.zip ファイルアーカイブを使用して Go Lambda 関数をデプロイする - AWS Lambda

.zip ファイルアーカイブを使用して Go Lambda 関数をデプロイする

AWS Lambda 関数のコードは、スクリプトまたはコンパイルされたプログラム、さらにそれらの依存関係で構成されます。デプロイパッケージを使用して、Lambda に関数コードをデプロイします。Lambda は、コンテナイメージと .zip ファイルアーカイブの 2 種類のデプロイパッケージをサポートしています。

このページでは、Go ランタイムのデプロイパッケージとして .zip ファイルを作成し、AWS Lambda (AWS Command Line Interface) を使用して関数コードを AWS CLI にデプロイするために .zip ファイルを使用する方法について説明します。

Prerequisites

AWS CLI は、コマンドラインシェルでコマンドを使用して AWS サービスとやり取りするためのオープンソースツールです。このセクションの手順を完了するには、以下が必要です。

ツールとライブラリ

Lambda は、Go ランタイム用の次のツールとライブラリを提供します。

Go 用のツールとライブラリ

詳細については、GitHub の「aws-lambda-go」をご参照ください。

サンプルアプリケーション

Lambda は、Go ランタイム用の次のサンプルアプリケーションを提供します。

Go のサンプル Lambda アプリケーション

  • blank-go - Lambda の の Go ライブラリ、ログ記録、環境変数、AWS SDK の使用を示す Go 関数。

macOS および Linux での .zip ファイルの作成

次の手順は、go get を使用して GitHub から lambda ライブラリをダウンロードし、go build を使用して実行可能ファイルをコンパイルするためのものです。

  1. GitHub から lambda ライブラリをダウンロードします。

    go get github.com/aws/aws-lambda-go/lambda
  2. 実行可能ファイルをコンパイルします。

    GOOS=linux go build main.go

    GOOSlinux に設定すると、非 Linux 環境でコンパイルする場合でも、コンパイルされた実行可能ファイルと Go ランタイムとの互換性を確保できます。

  3. (オプション) main パッケージが複数のファイルで構成されている場合は、次の go build コマンドを使用してパッケージをコンパイルします。

    GOOS=linux go build main
  4. (オプション) Linux では、CGO_ENABLED=0 set を使用してパッケージをコンパイルする必要がある場合があります。

    GOOS=linux CGO_ENABLED=0 go build main.go

    このコマンドは、標準の C ライブラリ (libc) バージョン用の安定したバイナリパッケージを作成します。このパッケージは、Lambda と他のデバイスでは異なる場合があります。

  5. Lambda は POSIX ファイルアクセス許可を使用するため、.zip ファイルのアーカイブを作成する前に、デプロイパッケージフォルダのアクセス許可を設定する必要がある場合があります。

  6. 実行可能ファイルを .zip ファイルにパッケージ化して、デプロイパッケージを作成します。

    zip function.zip main

Windows での .zip ファイルの作成

次の手順は、go get を使用して GitHub から Windows 用の build-lambda-zip ツールをダウンロードし、go build を使用して実行可能ファイルをコンパイルするためのものです。

注記

上記を実行していない場合には、git をインストールした上で、お使いの Windows の git 環境変数に %PATH% の実行可能ファイルを追加します。

  1. build-lambda-zip ツールを GitHub からダウンロードします。

    go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
  2. GOPATH のツールを使用して、.zip ファイルを作成します。Go のデフォルトのインストールがある場合、このツールは通常 %USERPROFILE%\Go\bin に置かれています。それ以外の場合は、Go ランタイムをインストールした場所に移動し、次のいずれかの操作を行います。

    cmd.exe

    cmd.exe で次を実行します。

    set GOOS=linux go build -o main main.go %USERPROFILE%\Go\bin\build-lambda-zip.exe -output main.zip main
    PowerShell

    PowerShell で次を実行します。

    $env:GOOS = "linux" $env:CGO_ENABLED = "0" $env:GOARCH = "amd64" go build -o main main.go ~\Go\Bin\build-lambda-zip.exe -output main.zip main

provided.al2 ランタイムを使用して Go を構築する

Go は、他のネイティブランタイムとは異なる方法で実装されます。Lambda では Go はカスタムランタイムとして扱われるため、provided.al2 ランタイムに Go 関数を作成できます。.zip ファイルのパッケージは、AWS SAM ビルドコマンドで構築できます。

AWS SAM を使用して AL2 関数用 Go を構築

  1. provided.al2 ランタイムを使用するように AWS SAM テンプレートを更新します。また、[BuildMethod] を [makefile] に設定します。

    Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: my.bootstrap.file Runtime: provided.al2 Architectures: [arm64] Metadata: BuildMethod: makefile

    x86_64 命令セットアーキテクチャ用のパッケージを構築する場合は、Architectures プロパティを削除してください。

  2. ファイル makefile を次の内容でプロジェクトフォルダに追加します。

    GOOS=linux go build -o bootstrap cp ./bootstrap $(ARTIFACTS_DIR)/.

アプリケーションの例については、AL2 での Go をダウンロードしてください。readme ファイルには、アプリケーションを構築および実行する手順が記載されています。また、ブログ投稿 Migrating AWS Lambda functions to Amazon Linux 2 も参照してください。