

# Go를 사용하여 Lambda 함수 빌드
<a name="lambda-golang"></a>

Go는 다른 관리형 런타임과 다른 방법으로 구현됩니다. Go는 기본적으로 실행 가능한 바이너리로 컴파일되므로 전용 언어 런타임이 필요하지 않습니다. [OS 전용 런타임](runtimes-provided.md)(`provided` 런타임 패밀리)을 사용하여 Lambda에 Go 함수를 배포합니다.

**Topics**
+ [Go 런타임 지원](#golang-al1)
+ [도구 및 라이브러리](#golang-libraries)
+ [Go에서 Lambda 함수 핸들러 정의](golang-handler.md)
+ [Lambda 컨텍스트 객체를 사용하여 Go 함수 정보 검색](golang-context.md)
+ [.zip 파일 아카이브를 사용하여 Go Lambda 함수 배포](golang-package.md)
+ [컨테이너 이미지로 Go Lambda 함수 배포](go-image.md)
+ [Go Lambda 함수를 위한 계층 작업](golang-layers.md)
+ [Go Lambda 함수 로깅 및 모니터링](golang-logging.md)
+ [AWS Lambda에서 Go 코드 계측](golang-tracing.md)

## Go 런타임 지원
<a name="golang-al1"></a>

Lambda용 Go 1.x 관리형 런타임은 [더 이상 사용되지 않습니다](lambda-runtimes.md#runtime-support-policy). Go 1.x 런타임을 사용하는 함수가 있는 경우 `provided.al2023` 또는 `provided.al2`로 마이그레이션해야 합니다. `provided.al2023` 및 `provided.al2` 런타임은 `go1.x`보다 뛰어난 몇 가지 이점을 제공하며, 여기에는 arm64 아키텍처(AWS Graviton2 프로세서), 더 작은 바이너리 및 약간 더 빠른 간접 호출 시간에 대한 지원이 해당됩니다.

이 마이그레이션에는 코드 변경이 필요 없습니다. 유일한 필수 변경 사항은 배포 패키지를 빌드하는 방법과 함수를 생성하는 데 사용하는 런타임과 관련이 있습니다. 자세한 내용은 *AWS 컴퓨팅 블로그*에서 [ Migrating AWS Lambda functions from the Go1.x runtime to the custom runtime on Amazon Linux 2](https://aws.amazon.com/blogs/compute/migrating-aws-lambda-functions-from-the-go1-x-runtime-to-the-custom-runtime-on-amazon-linux-2/)를 참조하세요.


| 이름 | 식별자 | 운영 체제 | 사용 중단 날짜 | 블록 함수 생성 | 블록 함수 업데이트 | 
| --- | --- | --- | --- | --- | --- | 
| OS 전용 런타임 | `provided.al2023` | Amazon Linux 2023 |  2029년 6월 30일  |  2029년 7월 31일  |  2029년 8월 31일  | 
| OS 전용 런타임 | `provided.al2` | Amazon Linux 2 |  2026년 7월 31일  |  2026년 8월 31일  |  2026년 9월 30일  | 

## 도구 및 라이브러리
<a name="golang-libraries"></a>

Lambda에서는 다음과 같은 Go 런타임용 도구 및 라이브러리를 제공합니다.
+ [AWS SDK for Go v2](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2): Go 프로그래밍 언어용 공식 AWS SDK입니다.
+ [github.com/aws/aws-lambda-go/lambda](https://github.com/aws/aws-lambda-go/tree/master/lambda): Go용 Lambda 프로그래밍 모델을 구현한 것입니다. 이 패키지는 AWS Lambda에서 [핸들러](golang-handler.md)를 간접 호출하기 위해 사용됩니다.
+ [github.com/aws/aws-lambda-go/lambdacontext](https://github.com/aws/aws-lambda-go/tree/master/lambdacontext): [컨텍스트 객체](golang-context.md)에서 컨텍스트 정보에 액세스하기 위한 헬퍼입니다.
+ [github.com/aws/aws-lambda-go/events](https://github.com/aws/aws-lambda-go/tree/master/events): 이 라이브러리는 일반적인 이벤트 소스 통합을 위한 유형 정의를 제공합니다.
+ [github.com/aws/aws-lambda-go/cmd/build-lambda-zip](https://github.com/aws/aws-lambda-go/tree/master/cmd/build-lambda-zip): 이 도구를 사용하여 Windows에서 .zip 파일 아카이브를 생성할 수 있습니다.

자세한 내용은 GitHub의 [aws-lambda-go](https://github.com/aws/aws-lambda-go)를 참조하세요.

Lambda에서는 다음과 같은 Go 런타임용 샘플 애플리케이션을 제공합니다.

**Go의 샘플 Lambda 애플리케이션**
+ [go-al2](https://github.com/aws-samples/sessions-with-aws-sam/tree/master/go-al2) – 퍼블릭 IP 주소를 반환하는 hello world 함수입니다. 이 앱은 `provided.al2` 사용자 지정 런타임을 사용합니다.
+ [blank-go](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/blank-go) – Lambda의 Go 라이브러리, 로깅, 환경 변수 및 AWS SDK를 사용하는 방법을 보여주는 Go 함수입니다. 이 앱은 `go1.x` 런타임을 사용합니다.