AWS Lambda – Go 기능

Go Language 지원은 최근 AWS에 추가되었습니다. Go를 사용하려면 AWS Lambda 함수를 생성하는 동안 AWS 콘솔에서 언어를 선택해야합니다. 이 장에서는 Go 언어로 된 AWS Lambda 함수에 대해 자세히 알아 보겠습니다.

Go 설치

시작하려면 Go 언어 지원이 필요합니다. 이 섹션에서는 Go에서 AWS Lambda 작업을 시작하기 위해 다음 세부 정보를 살펴 보겠습니다. 다음은 Go 다운로드를위한 공식 사이트입니다.https://golang.org/dl/

이제 운영 체제에 따라 패키지를 다운로드하십시오. 여기에 제공된 절차에 따라 각 운영 체제에 Go를 설치합니다.

Windows에 설치

Windows의 경우 32 비트 및 64 비트 다운로드를 사용할 수 있습니다. zip 파일을 다운로드하고 내용을 추출하여 선택한 디렉토리에 저장하십시오.

사용 가능한 환경 변수를 추가하십시오. ControlPanel ---> System ---> Advanced system settings.

이제 Environment Variables 버튼을 클릭하고 여기에 표시된대로 디렉토리 경로를 추가합니다.

여기에 표시된대로 시스템 변수를 편집 할 수도 있습니다.

이 단계가 완료되면 Go 작업을 시작할 수 있습니다. 명령 프롬프트를 열고 Go 명령에서 버전을 확인하십시오. 동일하게 다음 스크린 샷을 관찰하십시오.

Linux 및 Mac OS 용 설치

Linux 및 Mac OS에 패키지를 설치하려면 아래 표시된 지침을 따르십시오.

패키지의 포장을 풀고 위치에 보관하십시오. /usr/local/go. 이제 추가/usr/local/go/binPATH 환경 변수에. 다음을 사용하여 수행 할 수 있습니다./etc/profile 또는 $HOME/.profile.

이를 위해 다음 명령을 사용할 수 있습니다.

export PATH=$PATH:/usr/local/go/bin

Windows, Linux 및 Mac에 대한 AWS 지원을 추가하려면 git 명령 줄에서 다음을 사용하십시오.

go.exe get -u github.com/aws/aws-lambda-go/lambda 
go.exe get -u github.com/aws/aws-lambda-go/lambdacontext
go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip

Windows / Linux / Mac 코드를 컴파일하려면 다음 명령을 사용하십시오.

GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main

GO를 사용하는 AWS Lambda 함수

빌드가 실행 파일을 제공 할 때 Go에서 반환되는 프로그램입니다. 다음은 AWS Lambda를 지원하는 Go의 간단한 프로그램입니다. 우리는github.com/aws/aws-lambda-go/lambda, Lambda 프로그래밍 기능이 있으므로 AWS Lambda에 대한 또 다른 중요한 요구 사항은 핸들러입니다.

Main.go

// main.go
package main

import (
   "github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
   return "Hello Lambda", nil
}
func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

참고로 Go프로그램은 람다에서 시작됩니다. start는 핸들러 함수로 호출됩니다. 아래 표시된 코드를 관찰하십시오-

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

이제 Go 명령을 사용하여 위 파일을 실행 한 다음 실행 파일을 압축 해 보겠습니다.

우리가 사용한 파일의 구조는 다음과 같습니다.

go build, main.exe라는 실행 파일을 생성합니다. 파일을 압축하고 AWS Lambda에 업로드하려면 다음 절차를 사용할 수 있습니다.

Windows / Linux / Mac 코드를 컴파일하려면 다음 명령을 사용하십시오.

GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main

그런 다음 AWS 콘솔에 로그인하고 다음을 사용하여 Lambda 함수를 생성합니다. Go 런타임으로-

함수가 생성되면 위에서 생성 한 실행 가능한 zip 파일을 업로드합니다.

Go를 사용한 Lambda 함수 핸들러

핸들러는 Go 프로그램의 실행이 시작되는 곳입니다. 주요 통화에서lambda.start, 실행은 핸들러 함수로 호출됩니다. 추가 할 핸들러는main.

이해를 위해 여기 코드를 관찰하십시오.

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

아래 주어진 스크린 샷에 따라-

이제 함수를 저장하고 테스트하십시오. 다음과 같이 실행 결과를 볼 수 있습니다.

해당 로그 출력은 다음과 같습니다.

Go를 사용한 컨텍스트 개체

Go의 AWS Lambda는 컨텍스트에 대해 다음과 같은 전역 변수 및 속성을 제공합니다.

  • MemoryLimitInMB − aws lambda에 구성된 메모리 제한 (MB).

  • FunctionName − aws lambda 함수의 이름.

  • FunctionVersion − 실행중인 aws lambda 함수의 버전.

  • LogStreamName − cloudwatch 로그 스트림 이름.

  • LogGroupName − cloudwatch 그룹 이름.

컨텍스트에서 사용할 수있는 속성은 다음과 같이 제공됩니다.

AwsRequestID

이것은 AWS Lambda 함수가 호출 될 때 얻는 AWS 요청 ID입니다.

ClientContext

여기에는 AWS Mobile SDK를 통해 호출 될 때 클라이언트 애플리케이션 및 디바이스에 대한 세부 정보가 포함됩니다. null 일 수 있습니다. 클라이언트 컨텍스트는 클라이언트 ID, 애플리케이션 제목, 버전 이름, 버전 코드 및 애플리케이션 패키지 이름과 같은 세부 정보를 제공합니다.

InvokedFunctionArn

호출 된 함수의 ARN입니다. 정규화되지 않은 ARN은 $ LATEST 버전을 실행하고 별칭은 가리키는 함수 버전을 실행합니다.

정체

AWS 모바일 SDK와 함께 사용할 때 Amazon Cognito 자격 증명 공급자에 대한 세부 정보를 제공합니다.

추가 된 변경 사항 main.go 컨텍스트 세부 정보를 인쇄하려면-

// main.go
package main

import (
   "context"
   "log"
   "github.com/aws/aws-lambda-go/lambda"
   "github.com/aws/aws-lambda-go/lambdacontext"
)

func hello(ctx context.Context) (string, error) {
   lc, _ := lambdacontext.FromContext(ctx);
   log.Print(lc);
   log.Print(lc.AwsRequestID);
   log.Print(lc.InvokedFunctionArn);
   return "Hello Lambda", nil
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

우리는 loglambda contextGo와 함께 사용합니다. 컨텍스트 세부 정보는 다음과 같습니다.

func hello(ctx context.Context) (string, error) {
   lc, _ := lambdacontext.FromContext(ctx);
   log.Print(lc);
   log.Print(lc.AwsRequestID);
   log.Print(lc.InvokedFunctionArn);	
   return "Hello Lambda", nil
}

위 코드를 테스트 할 때 다음 출력을 관찰 할 수 있습니다.

데이터 로깅

Go 아래와 같이 log 또는 fmt 모듈을 사용하여 데이터를 기록 할 수 있습니다.

// main.go
package main

import (
   "log"
   "fmt"
   "github.com/aws/aws-lambda-go/lambda"
)

func hello() (string, error) {
   log.Print("Hello from Lambda Go using log");
   fmt.Print("Hello from Lambda Go using fmt");
   return "Hello Lambda", nil
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

동일한 출력은 다음과 같습니다.

CloudWatch에서 로그 확인

CloudWatch에서도 로그를 볼 수 있습니다. 이를 위해 AWS 서비스로 이동하여 cloudwatch를 선택하고Logs왼쪽에. 이제 목록에서 Lambda 함수를 검색하여 로그를 확인합니다.

기능 오류

아래 코드와 같이 오류 모듈을 사용하여 AWS Lambda에서 사용자 지정 오류 처리를 생성 할 수 있습니다.

// main.go
package main
import (
   "errors"
   "github.com/aws/aws-lambda-go/lambda"
)

func hello() error  {
   return errors.New("There is an error in the code!")
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

위에 표시된 코드의 출력은 다음과 같습니다.