

# Go による Lambda 関数の構築
<a name="lambda-golang"></a>

Go は、他のマネージドランタイムとは異なる方法で実装されています。Go は実行可能バイナリにネイティブにコンパイルするため、専用の言語ランタイムは必要ありません。Go 関数を Lambda にデプロイするには、[OS 専用ランタイム](runtimes-provided.md) (`provided` ランタイム ファミリ) を使用します。

**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` ランタイムには、arm64 アーキテクチャのサポート (AWS Graviton2 プロセッサー)、バイナリの小型化、若干の呼び出し時間短縮化など、`go1.x` と比べていくつか利点があります。

この移行ではコードの変更は必要ありません。必要な変更は、デプロイパッケージの構築方法と、関数の作成に使用するランタイムに関するもののみです。詳細については、「*AWS コンピュートブログ*」の「[AWS Lambda 関数を Go1.x ランタイムから 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 日  |  Sep 30, 2026  | 

## ツールとライブラリ
<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 プログラミングモデルの実装。このパッケージは、[ハンドラー](golang-handler.md)を呼び出すために AWS Lambda で使用されます。
+ [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` ランタイムを使用しています。