본문 바로가기
aws

[aws] golang으로 aws lambda(serverless) 구축하기

by devjh 2022. 4. 8.
반응형

이번게시글에서는 aws serverless 구축방법에 대해 정리합니다.

 

1. serverless란

서버가 없는 형태의 서버를 말하지만 정말 서버가 없는건 아닙니다.

서버가 없다는 의미는 평소에 따로 관리해줘야 하는 서버가 없다는 뜻 입니다.

필요할때마다(api 호출이 일어날때마다) aws에서 서버를 빌려서 잠깐 사용하고 다시 반납하기에 서버리스라고 부릅니다.

 

비용은 메모리 사용량과 하나의 request를 처리하는데 소요된 시간을 곱해서 산정됩니다.

 

2. aws Lambda

lambda란 aws에서 제공하는 serverless를 위한 서비스 입니다.

aws console에 접속하여 lambda function을 생성할 수 있습니다.

이름을 설정해주고 런타임으로 go.1x로 설정해줍니다.

 

3. 트리거 구성

함수 개요라는 화면이 등장합니다.

트리거 추가를 눌러

API 게이트웨이를 추가합니다.

연습용이니 보안은 열어주고 HTTP Api를 클릭합니다.

 

 

생성이 완료된후 구성 탭을 누르면 API 엔드포인트를 확인할 수 있습니다.

이제 해당 엔드포인트로 request를 보내면 Lambda Function이 response를 내려주게 됩니다.

 

4. Lambda Function 작성

람다 Function은 zip파일로 작성할수도, S3에 올려놓은걸 사용할 수도 있습니다.

이번 게시글에서는 zip파일로 작성하여 동작시키는걸 포스팅합니다.

 

(1) 의존성 다운로도

$ go get github.com/aws/aws-lambda-go/lambda

 

(2) 소스코드

package main

import (
	"context"
	"fmt"

	"github.com/aws/aws-lambda-go/lambda"
)

type RequestModel struct {
	Name string `json:"name"`
}

func HandleRequest(ctx context.Context, requestModel RequestModel) (string, error) {
	if len(requestModel.Name) > 0 {
		return fmt.Sprintf("Hello %s!", requestModel.Name), nil
	}
	return "Hello world", nil
}

func main() {
	lambda.Start(HandleRequest)
}

 

(3). 빌드

$ GOARCH=amd64 GOOS=linux go build main.go

GOARCH=amd64 GOOS=linux

빌드환경을 맞춰서 빌드합니다.

 

람다는 amd64의 아키텍쳐와 linux의 OS 환경으로 이루어져있으므로

내가 빌드하고있는 환경이 람다의 환경과 동일하지 않다면 

fork/exec /var/task/main: exec format error"

이러한 에러를 맞게 되니 해당설정을 꼭 넣어줘야 합니다.

 

(4). zip 파일로 변환

$ zip main.zip main

실행파일을 function.zip 파일로 압축해줍니다.

그냥 우클릭해서 압축해도 됩니다.

 

(5). aws에 업로드

aws console에서 코드업로드를 클릭해 해당 zip파일을 업로드합니다. 

 

5. 런타임 핸들러 설정

아까만든 go 애플리케이션의 시작점은 main 메서드였습니다.

핸들러를 main이라고 설정해줍니다.

 

6. test

테스트 탭을 눌러 해당 아래와같이 json을 작성한후 test버튼을 눌러 테스트합니다.

Hello Tom이 정상적으로 리턴된걸 확인할 수 있습니다.

 

7.  http request 확인

3번에서 트리거를 구성해 api gateway를 만들어놨으므로 api gateway가 제공하는 url에 http request를 보냅니다.

정상적으로 결과가 출력된걸 확인할 수 있습니다.

반응형

'aws' 카테고리의 다른 글

[aws] aws vpc 구축하기  (0) 2022.04.18

댓글