コンテナイメージを使用した Java Lambda 関数のデプロイ - AWS Lambda

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

コンテナイメージを使用した Java Lambda 関数のデプロイ

Java Lambda 関数のコンテナイメージを構築するには 3 つの方法があります。

ヒント

Lambda コンテナ関数がアクティブになるまでの時間を短縮するには、「Docker ドキュメント」の「マルチステージビルドを使用する」を参照してください。効率的なコンテナイメージを構築するには、「Dockerfiles を記述するためのベストプラクティス」に従ってください。

このページでは、Lambda のコンテナイメージを構築、テスト、デプロイする方法について説明します。

Java の AWS ベースイメージ

AWS は、Java の次のベースイメージを提供します。

タグ ランタイム オペレーティングシステム Dockerfile 廃止

21

Java 21 Amazon Linux 2023 の Dockerfile for Java 21 GitHub

17

Java 17 Amazon Linux 2 での Dockerfile for Java 17 GitHub

11

Java 11 Amazon Linux 2 での Dockerfile for Java 11 GitHub

8.al2

Java 8 Amazon Linux 2 での Java 8 用 Dockerfile GitHub

Amazon ECR リポジトリ: gallery.ecr.aws/lambda/java

Java 21 以降のベースイメージは、Amazon Linux 2023 の最小コンテナイメージ に基づいています。以前のベースイメージでは Amazon Linux 2 を使用しています。AL2023 ランタイムには、デプロイのフットプリントが小さいことや、glibc などのライブラリのバージョンが更新されていることなど、Amazon Linux 2 に比べていくつかの利点があります。

AL2023-basedイメージでは、Amazon Linux 2 のデフォルトのパッケージマネージャーである ではなくyummicrodnf ( としてシンボリックにリンクされたdnf) をパッケージマネージャーとして使用します。 microdnfは のスタンドアロン実装ですdnf。AL2023-basedイメージに含まれるパッケージのリストについては、「Amazon Linux 2023 コンテナイメージにインストールされているパッケージの比較」の「最小コンテナ列」を参照してください。AL2023 と Amazon Linux 2 の違いの詳細については、 AWS Compute Blog の「Introducing the Amazon Linux 2023 runtime for AWS Lambda 」を参照してください。

注記

AWS Serverless Application Model (AWS SAM) を含む AL2023-basedイメージをローカルで実行するには、Docker バージョン 20.10.10 以降を使用する必要があります。

Java の AWS ベースイメージを使用する

このセクションの手順を完了するには、以下が必要です。

Maven
  1. 次のコマンドを実行し、「Lambda のアーキタイプ」を使用して Maven プロジェクトを作成します。以下のパラメータは必須です。

    • サービス — Lambda 関数の使用対象となる AWS のサービス クライアント。使用可能なソースのリストについては、「」のaws-sdk-java-v「2/サービス」を参照してください GitHub。

    • region – Lambda 関数を作成する AWS リージョン。

    • groupId — アプリケーションの完全パッケージの名前空間。

    • artifactId — ユーザーのプロジェクト名。これがプロジェクトのディレクトリの名前になります。

    Linux および macOS では、次のコマンドを実行します。

    mvn -B archetype:generate \ -DarchetypeGroupId=software.amazon.awssdk \ -DarchetypeArtifactId=archetype-lambda -Dservice=s3 -Dregion=US_WEST_2 \ -DgroupId=com.example.myapp \ -DartifactId=myapp

    で PowerShell、次のコマンドを実行します。

    mvn -B archetype:generate ` "-DarchetypeGroupId=software.amazon.awssdk" ` "-DarchetypeArtifactId=archetype-lambda" "-Dservice=s3" "-Dregion=US_WEST_2" ` "-DgroupId=com.example.myapp" ` "-DartifactId=myapp"

    Lambda の Maven アーキタイプは、Java SE 8 でコンパイルするように事前設定されており、AWS SDK for Java への依存関係を含みます。別のアーキタイプまたは別の方法でプロジェクトを作成する場合、Maven の Java コンパイラを設定し、SDK を依存関係として宣言する必要があります。

  2. myapp/src/main/java/com/example/myapp ディレクトリを開いて App.java ファイルを探します。これは Lambda 関数のコードです。提供されるサンプルコードをテストに使用することも、独自のサンプルコードで置き換えることもできます。

  3. プロジェクトのルートディレクトリに戻り、次の設定で新しい Dockerfile を作成します。

    • FROM プロパティにベースイメージの URI を設定します。

    • CMD 引数を Lambda 関数ハンドラーに設定します。

    例 Dockerfile
    FROM public.ecr.aws/lambda/java:21 # Copy function code and runtime dependencies from Maven layout COPY target/classes ${LAMBDA_TASK_ROOT} COPY target/dependency/* ${LAMBDA_TASK_ROOT}/lib/ # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "com.example.myapp.App::handleRequest" ]
  4. プロジェクトをコンパイルしてランタイムの依存関係を収集します。

    mvn compile dependency:copy-dependencies -DincludeScope=runtime
  5. Docker イメージを「Docker の構築」コマンドで構築します。次の例では、イメージを docker-image と名付けて test タグを付けます。

    docker build --platform linux/amd64 -t docker-image:test .
    注記

    このコマンドは、ビルドマシンのアーキテクチャに関係なく、コンテナが Lambda の実行環境と互換性があることを確認する --platform linux/amd64 オプションを特定します。ARM64 命令セットアーキテクチャを使用して Lambda 関数を作成する場合は、代わりに --platform linux/arm64 オプションを使用するようにコマンドを変更してください。

Gradle
  1. プロジェクト用のディレクトリを作成し、そのディレクトリに切り替えます。

    mkdir example cd example
  2. 次のコマンドを実行して、Gradle が 環境の example ディレクトリに新しい Java アプリケーションプロジェクトを生成するようにします。[ビルドスクリプト DSL を選択] では、[2: Groovy] を選択します。

    gradle init --type java-application
  3. /example/app/src/main/java/example ディレクトリを開いて App.java ファイルを探します。これは Lambda 関数のコードです。次のサンプルコードをテストに使用することも、独自のサンプルコードで置き換えることもできます。

    例 App.java
    package com.example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class App implements RequestHandler<Object, String> { public String handleRequest(Object input, Context context) { return "Hello world!"; } }
  4. build.gradle ファイルを開きます。前のステップのサンプル関数コードを使用している場合、「build.gradle」の内容を次の内容で置き換えてください。独自の関数コードを使用している場合、必要に応じて「build.gradle」ファイルを変更してください。

    例 build.gradle (Groovy DSL)
    plugins { id 'java' } group 'com.example' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { implementation 'com.amazonaws:aws-lambda-java-core:1.2.1' } jar { manifest { attributes 'Main-Class': 'com.example.App' } }
  5. また。ステップ 2 の gradle init コマンドが app/test ディレクトリにダミーのテストケースを生成しました。このチュートリアルの用途のため、/test ディレクトリを削除してテスト実行をスキップします。

  6. プロジェクトをビルドします。

    gradle build
  7. プロジェクトのルートディレクトリ (/example) に、次の設定で Dockerfile を作成します。

    • FROM プロパティを「ベースイメージの URI」に設定します。

    • COPY コマンドを使用して、関数コードとランタイム依存関係を Lambda 定義{LAMBDA_TASK_ROOT}の環境変数 である にコピーします。 定義されたランタイム環境変数

    • CMD 引数を Lambda 関数ハンドラーに設定します。

    例 Dockerfile
    FROM public.ecr.aws/lambda/java:21 # Copy function code and runtime dependencies from Gradle layout COPY app/build/classes/java/main ${LAMBDA_TASK_ROOT} # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "com.example.App::handleRequest" ]
  8. Docker イメージを「Docker の構築」コマンドで構築します。次の例では、イメージを docker-image と名付けて test タグを付けます。

    docker build --platform linux/amd64 -t docker-image:test .
    注記

    このコマンドは、ビルドマシンのアーキテクチャに関係なく、コンテナが Lambda の実行環境と互換性があることを確認する --platform linux/amd64 オプションを特定します。ARM64 命令セットアーキテクチャを使用して Lambda 関数を作成する場合は、代わりに --platform linux/arm64 オプションを使用するようにコマンドを変更してください。

  1. docker run コマンドを使用して、Docker イメージを起動します。この例では、docker-image はイメージ名、test はタグです。

    docker run --platform linux/amd64 -p 9000:8080 docker-image:test

    このコマンドはイメージをコンテナとして実行し、localhost:9000/2015-03-31/functions/function/invocations でローカルエンドポイントを作成します。

    注記

    ARM64 命令セットアーキテクチャ用に Docker イメージをビルドした場合は、--platform linux/amd64 の代わりに --platform linux/arm64 オプションを使用してください。

  2. 新しいターミナルウィンドウから、イベントをローカルエンドポイントにポストします。

    Linux/macOS

    Linux および macOS では、次の curl コマンドを実行します。

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    このコマンドは、空のイベントで関数を呼び出し、応答を返します。サンプル関数コードではなく独自の関数コードを使用している場合は、JSON ペイロードを使用して関数を呼び出すことをお勧めします。例:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    で PowerShell、次のInvoke-WebRequestコマンドを実行します。

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    このコマンドは、空のイベントで関数を呼び出し、応答を返します。サンプル関数コードではなく独自の関数コードを使用している場合は、JSON ペイロードを使用して関数を呼び出すことをお勧めします。例:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  3. コンテナ ID を取得します。

    docker ps
  4. docker kill」コマンドを使用してコンテナを停止します。このコマンドでは、3766c4ab331c を前のステップのコンテナ ID で置き換えます。

    docker kill 3766c4ab331c
Amazon ECR にイメージをアップロードして Lambda 関数を作成するには
  1. get-login-password コマンドを実行して、Amazon ECR レジストリに対して Docker CLI を認証します。

    • --region 値を Amazon ECR リポジトリを作成する AWS リージョン に設定します。

    • 111122223333 を AWS アカウント ID に置き換えます。

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. create-repository」コマンドを使用して Amazon ECR にリポジトリを作成します。

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    注記

    Amazon ECR リポジトリは Lambda 関数と同じ AWS リージョン に配置されている必要があります。

    成功すると、次のようなレスポンスが表示されます。

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. 前のステップの出力から repositoryUri をコピーします。

  4. docker tag」コマンドを実行して、最新バージョンとしてローカルイメージを Amazon ECR リポジトリにタグ付けします。このコマンドで:

    • docker-image:test をお使いの Docker イメージの名前およびタグで置き換えます。

    • <ECRrepositoryUri> を、コピーした repositoryUri に置き換えます。URI の末尾には必ず :latest を含めてください。

    docker tag docker-image:test <ECRrepositoryUri>:latest

    例:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. docker push」コマンドを実行して Amazon ECR リポジトリにローカルイメージをデプロイします リポジトリ URI の末尾には必ず :latest を含めてください。

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. まだ作成済みでない場合、関数に「実行ロールの作成」を実行してください。次のステップではロールの Amazon リソースネーム (ARN) が必要です。

  7. Lambda 関数を作成します。ImageUri には、先ほど使用したリポジトリ URI を指定します。URI の末尾には必ず :latest を含めてください。

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    注記

    イメージが Lambda 関数と同じリージョンに配置されていれば、別の AWS アカウントのイメージを使用して関数を作成することができます。詳細については、「 Amazon ECR クロスアカウント許可」を参照してください。

  8. 関数を呼び出します。

    aws lambda invoke --function-name hello-world response.json

    次のような結果が表示されます。

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. 関数の出力を確認するには、response.json ファイルをチェックします。

関数コードを更新するには、イメージを再度構築し、新しいイメージを Amazon ECR リポジトリにアップロードしてから、 update-function-code コマンドを使用してイメージを Lambda 関数にデプロイする必要があります。

ランタイムインターフェイスクライアントで代替ベースイメージを使用する

OS 専用ベースイメージまたは代替のベースイメージを使用する場合、イメージにランタイムインターフェイスクライアントを含める必要があります。ランタイムインターフェイスクライアントは、Lambda と関数コード間の相互作用を管理する Lambda Runtime API を拡張します。

Java 用のランタイムインターフェイスクライアントを Dockerfile にインストールするか、プロジェクトの依存関係としてインストールします。たとえば、Maven パッケージマネージャーを使用してランタイムインターフェイスクライアントをインストールするには、pom.xml ファイルに以下を追加します。

<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-runtime-interface-client</artifactId> <version>2.3.2</version> </dependency>

パッケージの詳細については、「Maven Central Repository」の「AWS Lambda Java ランタイムのインターフェイスクライアント」を参照してください。Java AWS Lambda サポートライブラリ GitHub リポジトリでランタイムインターフェイスクライアントのソースコードを確認することもできます。

次の例は、Amazon Corretto イメージを使用して Java 用のコンテナイメージを構築する方法を示しています。Amazon Corretto は、Open Java Development Kit (OpenJDK) の、マルチプラットフォーム対応の本番稼働可能な、無償ディストリビューションです。Maven プロジェクトには、ランタイムインターフェイスクライアントが依存関係として含まれています。

このセクションの手順を完了するには、以下が必要です。

  1. Maven プロジェクトの作成 以下のパラメータは必須です。

    • groupId — アプリケーションの完全パッケージの名前空間。

    • artifactId — ユーザーのプロジェクト名。これがプロジェクトのディレクトリの名前になります。

    Linux/macOS
    mvn -B archetype:generate \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DgroupId=example \ -DartifactId=myapp \ -DinteractiveMode=false
    PowerShell
    mvn -B archetype:generate ` -DarchetypeArtifactId=maven-archetype-quickstart ` -DgroupId=example ` -DartifactId=myapp ` -DinteractiveMode=false
  2. プロジェクトディレクトリを開きます。

    cd myapp
  3. pom.xml ファイルを開き、内容を次に置き換えます。このファイルには、依存関係として aws-lambda-java-runtime-interface-client が含まれています。代わりに、ランタイムインターフェイスクライアントを Dockerfile にインストールすることもできます。ただし、最も簡単な方法は、ライブラリを依存関係として含めることです。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>example</groupId> <artifactId>hello-lambda</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>hello-lambda</name> <url>http://maven.apache.org</url> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-runtime-interface-client</artifactId> <version>2.3.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.1.2</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
  4. myapp/src/main/java/com/example/myapp ディレクトリを開いて App.java ファイルを探します。これは Lambda 関数のコードです。このコードを、次のコードで置き換えます。

    例 関数ハンドラ
    package example; public class App { public static String sayHello() { return "Hello world!"; } }
  5. ステップ 1 の mvn -B archetype:generate コマンドにより、ダミーのテストケースも src/test ディレクトリに生成されます。このチュートリアルでは、この生成された /test ディレクトリ全体を削除して、実行中のテストをスキップします。

  6. プロジェクトのルートディレクトリに戻り、新しい Dockerfile を作成します。次の Dockerfile の例では、Amazon Corretto イメージを使用しています。Amazon Corretto は、マルチプラットフォーム対応で本番稼働可能な OpenJDK の無償ディストリビューションです。

    • ベースイメージの URI に FROM プロパティを設定します。

    • ENTRYPOINT を、Docker コンテナの起動時に実行させるモジュールに設定します。この場合、モジュールはランタイムインターフェイスクライアントです。

    • CMD 引数を Lambda 関数ハンドラーに設定します。

    例 Dockerfile
    FROM public.ecr.aws/amazoncorretto/amazoncorretto:21 as base # Configure the build environment FROM base as build RUN yum install -y maven WORKDIR /src # Cache and copy dependencies ADD pom.xml . RUN mvn dependency:go-offline dependency:copy-dependencies # Compile the function ADD . . RUN mvn package # Copy the function artifact and dependencies onto a clean base FROM base WORKDIR /function COPY --from=build /src/target/dependency/*.jar ./ COPY --from=build /src/target/*.jar ./ # Set runtime interface client as default command for the container runtime ENTRYPOINT [ "/usr/bin/java", "-cp", "./*", "com.amazonaws.services.lambda.runtime.api.client.AWSLambda" ] # Pass the name of the function handler as an argument to the runtime CMD [ "example.App::sayHello" ]
  7. Docker イメージを「Docker の構築」コマンドで構築します。次の例では、イメージを docker-image と名付けて test タグを付けます。

    docker build --platform linux/amd64 -t docker-image:test .
    注記

    このコマンドは、ビルドマシンのアーキテクチャに関係なく、コンテナが Lambda の実行環境と互換性があることを確認する --platform linux/amd64 オプションを特定します。ARM64 命令セットアーキテクチャを使用して Lambda 関数を作成する場合は、代わりに --platform linux/arm64 オプションを使用するようにコマンドを変更してください。

ランタイムインターフェイスエミュレーターを使用して、イメージをローカルでテストします。エミュレーターはイメージに組み込むことも、ローカルマシンにインストールすることもできます。

ローカルマシンにランタイムインターフェイスエミュレーターをインストールして実行するには
  1. プロジェクトディレクトリから次のコマンドを実行して、 からランタイムインターフェイスエミュレータ (x86-64 アーキテクチャ) をダウンロード GitHub し、ローカルマシンにインストールします。

    Linux/macOS
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    arm64 エミュレータをインストールするには、前のコマンドの GitHub リポジトリ URL を次のように置き換えます。

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    PowerShell
    $dirPath = "$HOME\.aws-lambda-rie" if (-not (Test-Path $dirPath)) { New-Item -Path $dirPath -ItemType Directory } $downloadLink = "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie" $destinationPath = "$HOME\.aws-lambda-rie\aws-lambda-rie" Invoke-WebRequest -Uri $downloadLink -OutFile $destinationPath

    arm64 エミュレーターをインストールするには、$downloadLink を次のように置き換えます。

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
  2. docker run コマンドを使用して、Docker イメージを起動します。次の点に注意してください。

    • docker-image はイメージ名、test はタグです。

    • /usr/bin/java -cp './*' com.amazonaws.services.lambda.runtime.api.client.AWSLambda example.App::sayHello は ENTRYPOINT で、その後に Dockerfile の CMD が続きます。

    Linux/macOS
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ /usr/bin/java -cp './*' com.amazonaws.services.lambda.runtime.api.client.AWSLambda example.App::sayHello
    PowerShell
    docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 ` --entrypoint /aws-lambda/aws-lambda-rie ` docker-image:test ` /usr/bin/java -cp './*' com.amazonaws.services.lambda.runtime.api.client.AWSLambda example.App::sayHello

    このコマンドはイメージをコンテナとして実行し、localhost:9000/2015-03-31/functions/function/invocations でローカルエンドポイントを作成します。

    注記

    ARM64 命令セットアーキテクチャ用に Docker イメージをビルドした場合は、--platform linux/amd64 の代わりに --platform linux/arm64 オプションを使用してください。

  3. イベントをローカルエンドポイントにポストします。

    Linux/macOS

    Linux および macOS では、次の curl コマンドを実行します。

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    このコマンドは、空のイベントで関数を呼び出し、応答を返します。サンプル関数コードではなく独自の関数コードを使用している場合は、JSON ペイロードを使用して関数を呼び出すことをお勧めします。例:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    で PowerShell、次のInvoke-WebRequestコマンドを実行します。

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    このコマンドは、空のイベントで関数を呼び出し、応答を返します。サンプル関数コードではなく独自の関数コードを使用している場合は、JSON ペイロードを使用して関数を呼び出すことをお勧めします。例:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  4. コンテナ ID を取得します。

    docker ps
  5. docker kill」コマンドを使用してコンテナを停止します。このコマンドでは、3766c4ab331c を前のステップのコンテナ ID で置き換えます。

    docker kill 3766c4ab331c
Amazon ECR にイメージをアップロードして Lambda 関数を作成するには
  1. get-login-password コマンドを実行して、Amazon ECR レジストリに対して Docker CLI を認証します。

    • --region 値を Amazon ECR リポジトリを作成する AWS リージョン に設定します。

    • 111122223333 を AWS アカウント ID に置き換えます。

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. create-repository」コマンドを使用して Amazon ECR にリポジトリを作成します。

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    注記

    Amazon ECR リポジトリは Lambda 関数と同じ AWS リージョン に配置されている必要があります。

    成功すると、次のようなレスポンスが表示されます。

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. 前のステップの出力から repositoryUri をコピーします。

  4. docker tag」コマンドを実行して、最新バージョンとしてローカルイメージを Amazon ECR リポジトリにタグ付けします。このコマンドで:

    • docker-image:test をお使いの Docker イメージの名前およびタグで置き換えます。

    • <ECRrepositoryUri> を、コピーした repositoryUri に置き換えます。URI の末尾には必ず :latest を含めてください。

    docker tag docker-image:test <ECRrepositoryUri>:latest

    例:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. docker push」コマンドを実行して Amazon ECR リポジトリにローカルイメージをデプロイします リポジトリ URI の末尾には必ず :latest を含めてください。

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. まだ作成済みでない場合、関数に「実行ロールの作成」を実行してください。次のステップではロールの Amazon リソースネーム (ARN) が必要です。

  7. Lambda 関数を作成します。ImageUri には、先ほど使用したリポジトリ URI を指定します。URI の末尾には必ず :latest を含めてください。

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    注記

    イメージが Lambda 関数と同じリージョンに配置されていれば、別の AWS アカウントのイメージを使用して関数を作成することができます。詳細については、「 Amazon ECR クロスアカウント許可」を参照してください。

  8. 関数を呼び出します。

    aws lambda invoke --function-name hello-world response.json

    次のような結果が表示されます。

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. 関数の出力を確認するには、response.json ファイルをチェックします。

関数コードを更新するには、イメージを再度構築し、新しいイメージを Amazon ECR リポジトリにアップロードしてから、 update-function-code コマンドを使用してイメージを Lambda 関数にデプロイする必要があります。