.zip ファイルアーカイブで Ruby Lambda 関数をデプロイする
AWS Lambda 関数のコードは、スクリプトまたはコンパイルされたプログラム、さらにそれらの依存関係で構成されます。デプロイパッケージを使用して、Lambda に関数コードをデプロイします。Lambda は、コンテナイメージと .zip ファイルアーカイブの 2 種類のデプロイパッケージをサポートしています。
.zip ファイルのデプロイパッケージを作成するには、コマンドラインツール用の組み込み .zip ファイルアーカイブユーティリティまたは他の .zip ファイルユーティリティ (7zip
-
.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 用のツールとライブラリ
-
AWS SDK for Ruby
: Ruby プログラミング言語用の公式の AWS SDK。
依存関係のない関数を更新する
Lambda API を使用して関数を更新するには、UpdateFunctionCode オペレーションを使用します。関数コードを含むアーカイブを作成し、AWS Command Line Interface (AWS CLI) を使用してアップロードします。
依存関係のない Ruby 関数を更新するには
-
.zip ファイルアーカイブを作成します。
zip function.zip function.rb
-
パッケージをアップロードするには、
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 関数を更新するには
-
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'
を使用します。 -
.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%) ...
-
関数コードを更新します。
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", ... }