.zip ファイルアーカイブを使用して Go Lambda 関数をデプロイする
AWS Lambda 関数のコードは、スクリプトまたはコンパイルされたプログラム、さらにそれらの依存関係で構成されます。デプロイパッケージを使用して、Lambda に関数コードをデプロイします。Lambda は、コンテナイメージと .zip ファイルアーカイブの 2 種類のデプロイパッケージをサポートします。
このページでは、Go ランタイムのデプロイパッケージとして .zip ファイルを作成し、AWS Management Console、AWS Command Line Interface (AWS CLI)および AWS Serverless Application Model (AWS SAM) を使用して関数コードを AWS Lambda にデプロイするために .zip ファイルを使用する方法について説明します。
Lambda は POSIX ファイルアクセス許可を使用するため、.zip ファイルアーカイブを作成する前に、デプロイパッケージフォルダのアクセス許可を設定する
macOS および Linux での .zip ファイルの作成
以下の手順は、go build
コマンドを使用して実行ファイルをコンパイルし、Lambda 用の .zip ファイルデプロイパッケージを作成する方法を示しています。コードをコンパイルする前に、GitHub から Lambda
go get github.com/aws/aws-lambda-go/lambda
関数で AWS SDK for Go を使用している場合は、標準の SDK モジュールセットと、アプリケーションに必要な AWS サービス API クライアントをダウンロードしてください。SDK for Go のインストール方法については、「AWS SDK for Go V2 の使用開始
指定されたランタイムファミリーの使用
Go は、他のマネージドランタイムとは異なる方法で実装されています。Go は実行可能バイナリにネイティブにコンパイルするため、専用の言語ランタイムは必要ありません。Go 関数を Lambda にデプロイするには、OS 専用ランタイム (provided
ランタイム ファミリ) を使用します。
.zip デプロイパッケージを作成するには (macOS/Linux)
-
アプリケーションの
main.go
ファイルが含まれているプロジェクトディレクトリで、実行ファイルをコンパイルします。次の点に注意してください。-
実行ファイルには
bootstrap
という名前をつける必要があります。詳細については、「命名」を参照してください。 -
ターゲットの命令セットアーキテクチャを設定します。OS のみのランタイムは、arm64 と x86_64 の両方をサポートします。
-
オプションの
lambda.norpc
タグを使用して、Lambdaライブラリの Remote Procedure Call (RPC) コンポーネントを除外することができます。RPC コンポーネントは、Go 1.x ランタイムを使用している場合にのみ必要です。RPC を除外すると、デプロイパッケージのサイズが小さくなります。
arm64 アーキテクチャの場合:
GOOS=linux GOARCH=
arm64
go build -tags lambda.norpc -o bootstrap main.gox86_64 アーキテクチャの場合:
GOOS=linux GOARCH=
amd64
go build -tags lambda.norpc -o bootstrap main.go -
-
(オプション) Linux では、
CGO_ENABLED=0
set を使用してパッケージをコンパイルする必要がある場合があります。GOOS=linux GOARCH=
arm64
CGO_ENABLED=0 go build -o bootstrap -tags lambda.norpc main.goこのコマンドは、標準の C ライブラリ (
libc
) バージョン用の安定したバイナリパッケージを作成します。このパッケージは、Lambda と他のデバイスでは異なる場合があります。 -
実行可能ファイルを .zip ファイルにパッケージ化して、デプロイパッケージを作成します。
zip myFunction.zip bootstrap
注記
bootstrap
ファイルは、.zip ファイルのルートに置く必要があります。 -
関数を作成します。次の点に注意してください。
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler
bootstrap
\ --architecturesarm64
\ --rolearn:aws:iam::111122223333:role/lambda-ex
\ --zip-file fileb://myFunction.zip
Windows での .zip ファイルの作成
次の手順は、GitHub から Windows 用の build-lambda-zip
注記
上記を実行していない場合には、gitgit
環境変数に %PATH%
の実行可能ファイルを追加します。
コードをコンパイルする前に、GitHub から Lambda
go get github.com/aws/aws-lambda-go/lambda
関数で AWS SDK for Go を使用している場合は、標準の SDK モジュールセットと、アプリケーションに必要な AWS サービス API クライアントをダウンロードしてください。SDK for Go のインストール方法については、「AWS SDK for Go V2 の使用開始
指定されたランタイムファミリーの使用
Go は、他のマネージドランタイムとは異なる方法で実装されています。Go は実行可能バイナリにネイティブにコンパイルするため、専用の言語ランタイムは必要ありません。Go 関数を Lambda にデプロイするには、OS 専用ランタイム (provided
ランタイム ファミリ) を使用します。
.zip デプロイパッケージを作成するには (Windows)
-
GitHub から build-lambda-zip ツールをダウンロードします。
go install github.com/aws/aws-lambda-go/cmd/build-lambda-zip@latest
-
GOPATH
のツールを使用して、.zip ファイルを作成します。Go のデフォルトのインストールがある場合、このツールは通常%USERPROFILE%\Go\bin
に置かれています。それ以外の場合は、Go ランタイムをインストールした場所に移動し、次のいずれかの操作を行います。 -
関数を作成します。次の点に注意してください。
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler
bootstrap
\ --architecturesarm64
\ --rolearn:aws:iam::111122223333:role/lambda-ex
\ --zip-file fileb://myFunction.zip
.zip ファイルを使用した Go Lambda 関数の作成と更新
.zip デプロイパッケージを作成したら、このパッケージを使用して新しい Lambda 関数を作成するか、既存の関数を更新できます。.zip パッケージをデプロイするには、Lambda コンソール、AWS Command Line Interface、Lambda API を使用します。AWS Serverless Application Model (AWS SAM) および AWS CloudFormation を使用して、Lambda 関数を作成および更新することもできます。
Lambda の .zip デプロイパッケージの最大サイズは 250 MB (解凍) です。この制限は、Lambda レイヤーを含む、更新するすべてのファイルの合計サイズに適用されることに注意してください。
Lambda ランタイムには、デプロイパッケージ内のファイルを読み取るアクセス許可が必要です。Linux のアクセス権限の 8 進表記では、Lambda には非実行ファイル用に 644 のアクセス権限 (rw-r--r--) が必要であり、ディレクトリと実行可能ファイル用に 755 のアクセス権限 (rwxr-xr-x) が必要です。
Linux と MacOS で、デプロイパッケージ内のファイルやディレクトリのファイルアクセス権限を変更するには、chmod
コマンドを使用します。例えば、実行可能ファイルに正しいアクセス許可を付与するには、次のコマンドを実行します。
chmod 755 <filepath>
Windows でファイルアクセス許可を変更するには、「Microsoft Windows ドキュメント」の「Set, View, Change, or Remove Permissions on an Object
コンソールを使用して .zip ファイルの関数を作成、更新する
新しい関数を作成するには、まずコンソールで関数を作成し、次に .zip アーカイブをアップロードする必要があります。既存の関数を更新するには、その関数のページを開き、同じ手順に従って更新した .zip ファイルを追加します。
.zip ファイルが 50 MB 未満の場合は、ローカルマシンから直接ファイルをアップロードして関数を作成または更新できます。50 MB を超える .zip ファイルの場合は、まず Amazon S3 バケットにパッケージをアップロードする必要があります。AWS Management Console を使用して Amazon S3 バケットにファイルをアップロードする手順については、「Amazon S3 の開始方法」を参照してください。AWS CLI を使用してファイルをアップロードするには、「AWS CLI ユーザーガイド」の「オブジェクトの移動」を参照してください。
注記
既存のコンテナイメージ関数を変換して .zip アーカイブを使用することはできません。この場合は、新しい関数を作成する必要があります。
新しい関数を作成するには (コンソール)
-
Lambda コンソールの [関数]
ページを開き、[関数の作成] を選択します。 -
[一から作成] を選択します。
-
[基本的な情報] で、以下を行います。
-
[関数名] に、関数名を入力します。
-
[Runtime (ランタイム)] で、
provided.al2023
を選択します。
-
-
(オプション) [アクセス権限] で、[デフォルトの実行ロールの変更] を展開します。新しい [実行ロール] を作成することも、既存のロールを使用することもできます。
-
[関数の作成]を選択します。Lambda は、選択したランタイムを使用して基本的な「Hello world」関数を作成します。
ローカルマシンから zip アーカイブをアップロードするには (コンソール)
-
Lambda コンソールの [関数ページ]
で、.zip ファイルをアップロードする関数を選択します。 -
[コード] タブを選択します。
-
[コードソース] ペインで、[アップロード元] をクリックします。
-
[.zip ファイル] をクリックします。
-
.zip ファイルをアップロードするには、次の操作を行います。
-
[アップロード] をクリックし、ファイルセレクターで .zip ファイルを選択します。
-
[開く] をクリックします。
-
[保存] をクリックします。
-
Amazon S3 バケットから .zip アーカイブをアップロードするには (コンソール)
-
Lambda コンソールの [関数ページ]
で、新しい .zip ファイルをアップロードする関数を選択します。 -
[コード] タブを選択します。
-
[コードソース] ペインで、[アップロード元] をクリックします。
-
[Amazon S3 ロケーション] を選択します。
-
.zip ファイルの Amazon S3 リンク URL を貼り付けて、[保存] をクリックします。
AWS CLI を使用して .zip ファイルで関数を作成、更新する
AWS CLI を使用して新しい関数を作成したり、.zip ファイルを使用して既存の関数を更新したりできます。create-function コマンドと update-function-code を使用して、.zip パッケージをデプロイします。.zip ファイルが 50 MB 未満の場合は、ローカルビルドマシン上のファイルの場所から .zip パッケージをアップロードできます。サイズの大きいファイルの場合は、Amazon S3 バケットから .zip パッケージをアップロードする必要があります。AWS CLI を使用して Amazon S3 バケットにファイルをアップロードする方法については、「AWS CLI ユーザーガイド」の「オブジェクトの移動」を参照してください。
注記
AWS CLI を使用して Amazon S3 バケットから .zip ファイルをアップロードする場合、このバケットは関数と同じ AWS リージョン に配置する必要があります。
AWS CLI を含む .zip ファイルを使用して新しい関数を作成するには、以下を指定する必要があります。
-
関数の名前 (
--function-name
) -
関数のランタイム (
--runtime
) -
関数の実行ロール (
--role
) の Amazon リソースネーム (ARN) -
関数コード内のハンドラーメソッド (
--handler
) の名前
.zip ファイルの場所も指定する必要があります。.zip ファイルがローカルビルドマシン上のフォルダにある場合は、次のコマンド例に示すように、--zip-file
オプションを使用してファイルパスを指定します。
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler bootstrap \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --zip-file fileb://myFunction.zip
Amazon S3 バケット内の .zip ファイルの場所を指定するには、以下のコマンド例にある --code
オプションを使用します。S3ObjectVersion
パラメータは、バージョン管理下のオブジェクトにのみ使用する必要があります。
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler bootstrap \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --code S3Bucket=amzn-s3-demo-bucket,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion
CLI を使用して既存の関数を更新するには、--function-name
パラメータを使用して関数の名前を指定します。関数コードの更新に使用する .zip ファイルの場所も指定する必要があります。.zip ファイルがローカルビルドマシン上のフォルダにある場合は、次のコマンド例に示すように、--zip-file
オプションを使用してファイルパスを指定します。
aws lambda update-function-code --function-name myFunction \ --zip-file fileb://myFunction.zip
Amazon S3 バケット内の .zip ファイルの場所を指定するには、以下のコマンド例にある --s3-bucket
および --s3-key
オプションを使用します。--s3-object-version
パラメータは、バージョン管理下のオブジェクトにのみ使用する必要があります。
aws lambda update-function-code --function-name myFunction \ --s3-bucket amzn-s3-demo-bucket --s3-key myFileName.zip --s3-object-version myObject Version
Lambda API を使用して .zip ファイルで関数を作成、更新する
.zip ファイルアーカイブを使用して関数を作成および更新するには、以下の API オペレーションを使用します。
AWS SAM を使用して .zip ファイルで関数を作成、更新する
AWS Serverless Application Model (AWS SAM) は、AWS のサーバーレスアプリケーションの構築と実行のプロセスを合理化するのに役立つツールキットです。YAML または JSON テンプレートでアプリケーションのリソースを定義し、AWS SAM コマンドラインインターフェイス (AWS SAM CLI) を使用して、アプリケーションを構築、パッケージ化、デプロイします。AWS SAM テンプレートから Lambda 関数を構築すると、AWS SAM は関数コードと指定した任意の依存関係を含む .zip デプロイパッケージまたはコンテナイメージを自動的に作成します。AWS SAM を使用して Lambda 関数を構築およびデプロイする方法の詳細については、「AWS Serverless Application Model 開発者ガイドの」の「AWS SAM の開始方法」を参照してください。
AWS SAM を使用して、既存の .zip ファイルアーカイブを使用する Lambda 関数を作成できます。AWS SAM を使用して Lambda 関数を作成するには、.zip ファイルを Amazon S3 バケットまたはビルドマシンのローカルフォルダに保存します。AWS CLI を使用して Amazon S3 バケットにファイルをアップロードする方法については、「AWS CLI ユーザーガイド」の「オブジェクトの移動」を参照してください。
AWS SAM テンプレートでは、Lambda 関数は AWS::Serverless::Function
のリソースにより指定されます。このリソースで次のプロパティを設定し、.zip ファイルアーカイブを使用して関数を作成します。
-
PackageType
-Zip
に設定 -
CodeUri
- 関数コードの Amazon S3 URI、ローカルフォルダへのパス、または FunctionCode オブジェクトに設定 -
Runtime
- 選択したランタイムに設定
AWS SAM では、.zip ファイルが 50 MB を超える場合、この .zip ファイルを最初に Amazon S3 バケットにアップロードする必要はありません。AWS SAM では、ローカルビルドマシン上の場所から、最大許容サイズ 250 MB (解凍) の .zip パッケージをアップロードできます。
AWS SAM で .zip ファイルを使用して関数をデプロイする方法の詳細については、「AWS SAM 開発者ガイド」の「AWS::Serverless::Function」を参照してください。
例: provided.al2023 を使って Go 関数を構築するために AWS SAM を使用
-
次のプロパティで AWS SAM テンプレートを作成します。
-
[BuildMethod]: アプリケーションのコンパイラを指定します。
go1.x
を使用します。 -
[ランタイム]:
provided.al2023
を使用します。 -
[CodeUri]: コードへのパスを入力します。
-
[アーキテクチャ]: arm64 アーキテクチャ用の
[arm64]
を使用します。x86_64 命令セットアーキテクチャ用の場合、[amd64]
を使用するか、またはArchitectures
プロパティを削除します。
例 template.yaml
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: HelloWorldFunction: Type: AWS::Serverless::Function Metadata: BuildMethod:
go1.x
Properties: CodeUri:hello-world/
# folder where your main program resides Handler: bootstrap Runtime:provided.al2023
Architectures:[arm64]
-
-
sam build コマンドを使用して、実行ファイルをコンパイルします。
sam build
-
sam deploy コマンドを使用して、関数を Lambda にデプロイします。
sam deploy --guided
AWS CloudFormation を使用して .zip ファイルで関数を作成、更新する
AWS CloudFormation を使用して、.zip ファイルアーカイブを使用する Lambda 関数を作成できます。.zip ファイルから Lambda 関数を作成するには、最初にファイルを Amazon S3 バケットにアップロードする必要があります。AWS CLI を使用して Amazon S3 バケットにファイルをアップロードする方法については、「AWS CLI ユーザーガイド」の「オブジェクトの移動」を参照してください。
AWS CloudFormation テンプレートでは、Lambda 関数は AWS::Lambda::Function
のリソースにより指定されます。このリソースで次のプロパティを設定し、.zip ファイルアーカイブを使用して関数を作成します。
-
PackageType
-Zip
に設定 -
Code
-S3Bucket
およびS3Key
フィールドに Amazon S3 バケット名と .zip ファイル名を入力 -
Runtime
- 選択したランタイムに設定
AWS CloudFormation が生成する .zip ファイルは、4 MB を超えることはできません。AWS CloudFormation で .zip ファイルを使用して関数をデプロイする方法の詳細については、「AWS CloudFormation ユーザーガイド」の「AWS::Lambda::Function」を参照してください。