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)
}
우리는 log 과 lambda 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)
}
위에 표시된 코드의 출력은 다음과 같습니다.