コンテナイメージとして定義する関数の設定 - AWS 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 上で実行するための、最適化プロセスが実行されます。この処理には数秒かかることがあり、その間、関数は保留状態になります。最適化プロセスが完了すると、関数はアクティブな状態になります。

ユーザー権限を更新する

関数を作成する AWS Identity and Access Management (IAM) ユーザーまたはロールのアクセス権限に、AWS の管理ポリシー GetRepositoryPolicySetRepositoryPolicyInitiateLayerUpload が含まれていることを確認します。

たとえば、IAM コンソールを使用して、次のポリシーでロールを作成します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:GetRepositoryPolicy", "ecr:InitiateLayerUpload" ], "Resource": "arn:aws:ecr:<region>:<account>:repository/<repo name>/" } ] }

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

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 リポジトリを選択し、所望のイメージを選択します。

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

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

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

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

        "/var/task"
      注記

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

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

  6. [関数の作成] を選択します。

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

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

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

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

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

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

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

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

  6. [Save] (保存) をクリックします。

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

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

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

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

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

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

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

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

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

Lambda API の使用

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

コンテナイメージとして定義された関数を作成するには、create-function コマンドを使用します。package-typeImage を設定した上で、code パラメーターを使用しながらコンテナイメージ URI を指定します。関数の作成は、Amazon EFS のコンテナレジストリと同じアカウントから実行する必要があることにご注意ください。

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። Function」を参照してください。

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

  • AWS::Lambda::Function

    • PackageType – Imageに設定します。

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

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

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

  • Command – EntryPoint を通じて渡すパラメータを指定します。

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

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

注記

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

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