.zip ファイルアーカイブで Ruby Lambda 関数をデプロイする - AWS Lambda

.zip ファイルアーカイブで Ruby Lambda 関数をデプロイする

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

.zip ファイルのデプロイパッケージを作成するには、コマンドラインツール用の組み込み .zip ファイルアーカイブユーティリティまたは他の .zip ファイルユーティリティ (7zip など) を使用できます。.zip ファイルをデプロイパッケージとして使用するには、次の要件に留意してください。

  • .zip ファイルには、関数のコードと、関数のコード (該当する場合) を Lambda で実行するために使用される依存関係が含まれています。関数が標準ライブラリまたは AWS SDK ライブラリにのみ依存する場合は、これらのライブラリを .zip ファイルに含める必要はありません。これらのライブラリは、サポートされている Lambda ランタイム環境とともに含まれています。

  • .zip ファイルのサイズが 50 MB を超える場合は、Amazon Simple Storage Service (Amazon S3) バケットから関数にアップロードすることをお勧めします。

  • デプロイパッケージにネイティブライブラリが含まれている場合は、AWS Serverless Application Model(AWS SAM) でデプロイパッケージを構築できます。AWS SAMCLI sam build コマンドを --use-container と共に使用して、デプロイパッケージを作成できます。このオプションでは、Lambda 実行環境と互換性のある Docker イメージ内にデプロイパッケージを構築します。

    詳細については、AWS Serverless Application Model デベロッパーガイドsam build を参照してください。

  • この関数の命令セットアーキテクチャと互換性を持たせるようにデプロイパッケージを構築する必要があります。

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

前提条件

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

ツールとライブラリ

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

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

依存関係のない関数を更新する

Lambda API を使用して関数を更新するには、UpdateFunctionCode オペレーションを使用します。関数コードを含むアーカイブを作成し、AWS Command Line Interface (AWS CLI) を使用してアップロードします。

依存関係のない Ruby 関数を更新するには
  1. .zip ファイルアーカイブを作成します。

    zip function.zip function.rb
  2. パッケージをアップロードするには、update-function-code コマンドを使用します。

    aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip

    以下の出力が表示されます。

    { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "Runtime": "ruby2.5", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }

追加の依存関係を使用して関数を更新する

関数が AWS SDK for Ruby 以外のライブラリに依存している場合は、Bundler を使用してローカルディレクトリにインストールし、デプロイパッケージに含めます。

依存関係のある Ruby 関数を更新するには
  1. bundle コマンドで、ライブラリをベンダーディレクトリにインストールします。

    bundle config set --local path 'vendor/bundle' \ bundle install

    以下の出力が表示されます。

    Fetching gem metadata from https://rubygems.org/.............. Resolving dependencies... Fetching aws-eventstream 1.0.1 Installing aws-eventstream 1.0.1 ...

    これにより、gem は、システムの場所ではなくプロジェクトディレクトリにインストールされ、vendor/bundle が今後のインストールのデフォルトのパスとして設定されます。gem をグローバルにインストールするには、bundle config set --local system 'true' を使用します。

  2. .zip ファイルアーカイブを作成します。

    zip -r function.zip function.rb vendor

    以下の出力が表示されます。

    adding: function.rb (deflated 37%) adding: vendor/ (stored 0%) adding: vendor/bundle/ (stored 0%) adding: vendor/bundle/ruby/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/build_info/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/cache/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/cache/aws-eventstream-1.0.1.gem (deflated 36%) ...
  3. 関数コードを更新します。

    aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip

    以下の出力が表示されます。

    { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "Runtime": "ruby2.5", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSize": 300, "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }