コンテナイメージとして定義された Lambda 関数の作成 - AWS Lambda

コンテナイメージとして定義された Lambda 関数の作成

Lambda 関数を作成する場合、関数コードをデプロイパッケージにパッケージ化します。Lambda は、コンテナイメージ.zip ファイルアーカイブの 2 種類のデプロイパッケージをサポートします。関数を作成するワークフローは、デプロイパッケージの種類によって異なります。.zip ファイルアーカイブとして定義された関数を設定するには、.zip ファイルアーカイブとして定義された Lambda 関数の作成を参照してください。

Lambda コンソールと Lambda API により、コンテナイメージとして定義された関数を作成し、そのイメージコードの更新やテストを行い、関数に対する他の設定を行うことができます。

注記

既存のコンテナイメージ関数を、.zip ファイルアーカイブを使用するように変換することはできません。この場合は、新しい関数を作成する必要があります。

イメージタグを使用してイメージを選択すると、そのタグは Lambda によって基盤となるイメージのダイジェストに変換されます。イメージのダイジェストを取得するには、GetFunctionConfiguration API オペレーションを実行します。関数を新しいイメージバージョンに更新するには、Lambda コンソールを使用して関数コードを更新するか、UpdateFunctionCode API オペレーションを実行する必要があります。UpdateFunctionConfiguration などの設定操作では、関数のコンテナイメージは更新されません。

注記

Amazon ECR では、イメージタグを別のイメージに再割り当てしても、Lambda はイメージのバージョンを更新しません。

関数バージョン $LATEST

あるバージョンの関数を公開すると、そのバージョンのユーザーエクスペリエンスの一貫性を保つために、コード自体と、そのためのほとんどの設定がロックされます。コードと、それに関する多くの構成設定は、関数の未公開バージョンでのみ変更が可能です。デフォルトでは、コンソールには未公開バージョンの関数の設定情報が表示されます。関数のバージョンを表示するには、[限定条件] をクリックします。未公開バージョンの名前は $LATEST です。

Amazon Elastic Container Registry (Amazon ECR) でも、latest というタグを使用して、コンテナイメージの最新バージョンを示していることにご注意ください。このタグを、関数バージョンの $LATEST と混同しないようにしてください。

バージョン管理の詳細については、「Lambda 関数のバージョン」を参照してください。

コンテナイメージのデプロイ

コードをコンテナイメージとして Lambda 関数にデプロイすると、そのイメージを Lambda 上で実行するための最適化プロセスが実行されます。この処理には数秒かかることがあり、その間、関数は保留状態になります。最適化プロセスが完了すると、関数はアクティブな状態になります。

Amazon ECR のアクセス許可

Amazon ECR のコンテナイメージにアクセスする関数の場合、Amazon ECR リポジトリに ecr:BatchGetImage および ecr:GetDownloadUrlForLayer のアクセス許可を追加できます。次の例は、最小ポリシーを示しています。

{ "Sid": "LambdaECRImageRetrievalPolicy", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] }

Amazon ECR のリポジトリのアクセス許可の詳細については、Amazon Elastic Container Registry ユーザーガイドの「リポジトリポリシー」を参照してください。

Amazon ECR リポジトリにこれらの権限が含まれていない場合、Lambda は ecr:BatchGetImage および ecr:GetDownloadUrlForLayer をコンテナイメージリポジトリのアクセス許可に追加します。Lambda は、Lambda を呼び出すプリンシパルに ecr:getRepositoryPolicy および ecr:setRepositoryPolicy のアクセス許可がある場合にのみ、これらのアクセス許可を追加できます。

Amazon ECR リポジトリのアクセス許可を表示または編集するには、Amazon Elastic Container Registry ユーザーガイドの「リポジトリポリシーステートメントの設定」を参照してください。

コンテナ設定を上書きする

Lambda コンソールまたは Lambda API を使用して、次のコンテナイメージ設定を上書きできます。

  • ENTRYPOINT - アプリケーションへのエントリポイントの絶対パスを指定します。

  • CMD - ENTRYPOINT とともに渡すパラメータを指定します。

  • WORKDIR - 作業ディレクトリの絶対パスを指定します。

  • ENV - Lambda 関数の環境変数を指定します。

Lambda コンソールまたは Lambda API で指定した値は、Dockerfile 内の値よりも優先されます。

関数の (コンソールからの) 作成

コンテナイメージとして定義された関数を作成するには、まずイメージを作成した上で、そのイメージを Amazon ECR リポジトリに保存する必要があります。

関数を作成するには

  1. Lambda コンソールで [Functions (関数)] ページを開きます。

  2. [Create function] を選択します。

  3. [コンテナイメージ] オプションを選択します。

  4. [基本的な情報] で、以下の作業を行います。

    1. [関数名] に関数名を入力します。

    2. コンテナイメージ URI では、関数コードに必要な命令セットアーキテクチャと互換性のあるコンテナイメージを提供します。

      Amazon ECR イメージの URI を入力するか、Amazon ECR イメージを参照できます。

      • Amazon ECR イメージの URI を入力します。

      • Amazon ECR リポジトリでイメージを参照する場合には、[Browse images] (イメージの参照) をクリックします。ドロップダウンリストから Amazon ECR リポジトリを選択し、所望のイメージを選択します。

  5. (オプション) Dockerfile に含まれる構成設定をオーバーライドするには、[コンテナイメージのオーバーライド] を展開します。次の設定のいずれかを上書きできます。

    • [エントリーポイント] には、実行可能なランタイムへの完全なパスを入力します。Node.js 関数のエントリポイントの例を次に示します。

      "/usr/bin/npx", "aws-lambda-ric"
    • [コマンド] には、[エントリーポイント] のパスを通じてイメージに渡す、追加のパラメータを入力します。次の例は、Node.js 関数に渡すコマンドを示しています。

      "app.handler"
    • [作業ディレクトリ] には、関数で使用される作業ディレクトリへの、完全なパスを入力します。次に、Lambda の AWS のベースイメージの作業ディレクトリの例を示します。

      "/var/task"
    注記

    設定を上書きする際には、各文字列を二重引用符 (" ") で囲んでください。

  6. (オプション) アーキテクチャで、関数の命令セットアーキテクチャを選択します。デフォルトのアーキテクチャは x86_64 です。注: 関数用のコンテナイメージを構築するときは、この命令セットアーキテクチャと互換性があることを確認してください。

  7. (オプション) [アクセス権限] で、[デフォルトの実行ロールの変更] を展開します。次に、[新しい実行ロールの作成] をクリックするか、あるいは、使用する既存のロールを選択します。

  8. [Create function] (関数の作成) をクリックします。

関数コードの (コンソールでの) 更新

コンテナイメージを関数にデプロイすると、そのイメージは読み取り専用になります。関数コードを更新するには、まず新しいバージョンのイメージをデプロイする必要があります。新しいバージョンのイメージを作成したら、そのイメージを Amazon ECR リポジトリに保存します。

更新されたコンテナイメージを使用するように関数を設定するには、

  1. Lambda コンソールで [Functions (関数)] ページを開きます。

  2. 対象の関数を選択します。

  3. [イメージ] の下にある、[新しいイメージのデプロイ] をクリックします。

  4. [画像の参照] をクリックします。

  5. [Select container image] (コンテナイメージの選択) ダイアログボックスで、ドロップダウンリストから Amazon ECR リポジトリを選択した後、新しいバージョンのイメージを選択します。

  6. [Save] を選択します。

イメージパラメータの (コンソールでの) オーバーライド

Lambda コンソールを使用して、コンテナイメージの設定値を上書きできます。

コンテナイメージの設定値を上書きするには、

  1. Lambda コンソールで [Functions (関数)] ページを開きます。

  2. 対象の関数を選択します。

  3. [イメージの設定] で、[編集] をクリックします。

  4. 必要なオーバーライド設定に新しい値を入力した上で、[保存] をクリックします。

  5. (オプション) 環境変数を追加またはオーバーライドするには、[環境変数] にある [編集] をクリックします。

    詳細については、「」を参照してくださいAWS Lambda 環境変数の使用

Lambda API の使用

次の API オペレーションを使用して、コンテナイメージとして定義された関数を管理します。

コンテナイメージとして定義された関数を作成するには、create-function コマンドを使用します。package-typeImage を設定した上で、code パラメーターを使用しながらコンテナイメージ URI を指定します。

関数を作成するときに、命令セットアーキテクチャを指定できます。デフォルトのアーキテクチャはx86-64です。コンテナイメージのコードがアーキテクチャと互換性があることを確認します。

関数は、Amazon ECR のコンテナレジストリと同じアカウントから作成する必要があることに注意してください。

aws lambda create-function --region sa-east-1 --function-name my-function \ --package-type Image \ --code ImageUri=<ECR Image URI> \ --role arn:aws:iam::123456789012:role/lambda-ex

関数コードを更新するには、update-function-code コマンドを使用します。image-uri パラメーターを使用して、コンテナイメージのロケーションを指定します。

注記

関数の package-type を変更することはできません。

aws lambda update-function-code --region sa-east-1 --function-name my-function \ --image-uri <ECR Image URI> \

関数のパラメータを更新するには、update-function-configuration オペレーションを使用します。EntryPointCommand は文字列の配列として指定し、WorkingDirectory は文字列として指定します。

aws lambda update-function-configuration --function-name my-function \ --image-config '{"EntryPoint": ["/usr/bin/npx", "aws-lambda-ric"], \ "Command": ["app.handler"] , \ "WorkingDirectory": "/var/task"}'

AWS CloudFormation

AWS CloudFormation を使用して、コンテナイメージとして定義された Lambda 関数を作成できます。AWS CloudFormation テンプレートでは、Lambda 関数は AWS::Lambda::Function のリソースにより指定されます。AWS::Lambda::Function リソースのプロパティの詳細については、 AWS CloudFormation ユーザーガイドの「AWS Lambda 関数」を参照してください。

コンテナイメージとして定義された関数を作成するには、AWS::Lambda::Functionリソースで次のプロパティを設定します。

  • AWS::Lambda::Function

    • PackageType - Image に設定します。

    • Code - ImageUri フィールドにコンテナイメージの URI を入力します。

    • ImageConfig - (オプション) コンテナイメージの設定プロパティを上書きします。

ImageConfigAWS::Lambda::Function プロパティには、次のフィールドがあります。

  • Command - EntryPoint で渡すパラメータを指定します。

  • EntryPoint - アプリケーションへのエントリポイントを指定します。

  • WorkingDirectory - 作業ディレクトリを指定します。

注記

ImageConfig テンプレートで AWS CloudFormation プロパティを宣言する場合は、ImageConfig プロパティの値 3 つすべてを指定する必要があります。

詳細については、 AWS CloudFormation ユーザーガイドの「ImageConfig」を参照してください。