基本 AWS Lambda Docker イメージの作成プロジェクト - AWS Amazon Q を使用したツールキット

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

基本 AWS Lambda Docker イメージの作成プロジェクト

Toolkit for Visual Studio を使用して、 AWS Lambda 関数を Docker イメージとしてデプロイできます。Docker を使用すると、ランタイムをより細かく制御できます。例えば、 などのカスタムランタイムを選択できます。NET 8.0。Docker イメージは、他のコンテナイメージと同じ方法でデプロイします。このチュートリアルは、「チュートリアル: 基本的な Lambda プロジェクト」に忠実に従っていますが、2 つには以下の違いがあります。

  • Dockerfile がプロジェクトに含まれています。

  • 別の発行設定が選択されます。

Lambda コンテナイメージに関する詳細については、AWS Lambda デベロッパーガイドの「Lambda デプロイパッケージ」を参照してください。

Lambda の操作の詳細については AWS Toolkit for Visual Studio、このユーザーガイドのトピックのAWS Lambda 「 テンプレートの使用 AWS Toolkit for Visual Studio」を参照してください。

Visual Studio を作成します。NET Core Lambda プロジェクト

Lambda Visual Studio テンプレートと設計図を使用して、プロジェクトの初期化を高速化できます。Lambda ブループリントには、柔軟なプロジェクト基盤の作成を簡素化する事前記述された関数が含まれています。

Visual Studio を作成するには 。NET Core Lambda プロジェクト
  1. Visual Studio から ファイルメニューを展開し、新しい を展開し、プロジェクト を選択します。

  2. New Project ダイアログボックスから、言語 プラットフォーム 、およびプロジェクトタイプのドロップダウンボックスを「All」に設定し、検索フィールドに入力aws lambdaします。AWS Lambda プロジェクト () を選択します。NET Core - C#) テンプレート。

  3. プロジェクト名 フィールドに と入力しAWSLambdaDocker、ファイルの場所 を指定し、 の作成 を選択します。

  4. 設計図の選択ページで、 を選択します。NET 8 (コンテナイメージ) ブループリントを選択し、終了を選択して Visual Studio プロジェクトを作成します。これでプロジェクトの構造とコードを確認できるようになりました。

プロジェクトファイルの確認

以下のセクションでは、 によって作成された 3 つのプロジェクトファイルについて説明します。NET 8 (コンテナイメージ) 設計図:

  1. Dockerfile

  2. aws-lambda-tools-defaults.json

  3. Function.cs

1. Dockerfile

Dockerfile は 3 つの主要なアクションを実行します。

  • FROM: このイメージに使用するベースイメージを確立します。このベースイメージは を提供します。NET ランタイム、Lambda ランタイム、および Lambda .NET プロセスのエントリポイントを提供するシェルスクリプト。

  • WORKDIR: イメージの内部作業ディレクトリを として確立します/var/task

  • COPY: ビルドプロセスから生成されたファイルをローカルの場所からイメージの作業ディレクトリにコピーします。

以下は、指定できるオプションのDockerfileアクションです。

  • ENTRYPOINT: ベースイメージには既に が含まれています。これはENTRYPOINT、イメージの起動時に実行される起動プロセスです。独自のエントリを指定する場合は、その基本エントリポイントを上書きします。

  • CMD: 実行する AWS カスタムコードを指示します。カスタムメソッドには完全修飾名が必要です。この行は Dockerfile に直接含める必要があるか、発行プロセス中に指定することができます。

    # Example of alternative way to specify the Lambda target method rather than during the publish process. CMD [ "AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler"]

以下は、 によって作成された Dockerfile の例です。NET 8 (コンテナイメージ) 設計図。

FROM public.ecr.aws/lambda/dotnet:8 WORKDIR /var/task # This COPY command copies the .NET Lambda project's build artifacts from the host machine into the image. # The source of the COPY should match where the .NET Lambda project publishes its build artifacts. If the Lambda function is being built # with the AWS .NET Lambda Tooling, the `--docker-host-build-output-dir` switch controls where the .NET Lambda project # will be built. The .NET Lambda project templates default to having `--docker-host-build-output-dir` # set in the aws-lambda-tools-defaults.json file to "bin/Release/lambda-publish". # # Alternatively Docker multi-stage build could be used to build the .NET Lambda project inside the image. # For more information on this approach checkout the project's README.md file. COPY "bin/Release/lambda-publish" .

2. aws-lambda-tools-defaults.json

このaws-lambda-tools-defaults.jsonファイルは、 Toolkit for Visual Studio デプロイウィザードと のデフォルト値を指定するために使用されます。NET コア CLI。次のリストは、aws-lambda-tools-defaults.jsonファイルで設定できるフィールドを示しています。

  • profile: AWS プロファイルを設定します。

  • region: リソースが保存されている AWS リージョンを設定します。

  • configuration: 関数の発行に使用される設定を設定します。

  • package-type: デプロイパッケージタイプをコンテナイメージまたは .zip ファイルアーカイブに設定します。

  • function-memory-size: 関数のメモリ割り当てを MB 単位で設定します。

  • function-timeout: タイムアウトは、Lambda 関数が実行できる秒単位の最大時間です。これは 1 秒単位で調整でき、最大値は 15 分までです。

  • docker-host-build-output-dir: ビルドプロセスの出力ディレクトリを設定します。これは、 の指示と相関しますDockerfile

  • image-command: は、Lambda 関数を実行するコードであるメソッドの完全修飾名です。構文は次のとおりです:{Assembly}::{Namespace}.{ClassName}::{MethodName}詳細については、「ハンドラー署名」を参照してください。ここで image-command を設定すると、後ほど Visual Studio の発行ウィザードにこの値が事前入力されます。

以下は、 によって作成された aws-lambda-tools-defaults.json の例です。NET 8 (コンテナイメージ) 設計図。

{ "Information": [ "This file provides default values for the deployment wizard inside Visual Studio and the AWS Lambda commands added to the .NET Core CLI.", "To learn more about the Lambda commands with the .NET Core CLI execute the following command at the command line in the project root directory.", "dotnet lambda help", "All the command line options for the Lambda command can be specified in this file." ], "profile": "default", "region": "us-west-2", "configuration": "Release", "package-type": "image", "function-memory-size": 512, "function-timeout": 30, "image-command": "AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler", "docker-host-build-output-dir": "./bin/Release/lambda-publish" }

3. Function.cs

Function.cs ファイルは、Lambda 関数として公開される c# 関数を定義します。-FunctionHandlerは、Lambda 関数の実行時に実行される Lambda 関数です。このプロジェクトでは、 は入力テキストToUpper()FunctionHandler呼び出します。

Lambda に発行する

ビルドプロセスによって生成された Docker イメージは、Amazon Elastic Container Registry (Amazon ) にアップロードされますECR。Amazon ECRは、Docker コンテナイメージの保存、管理、デプロイに使用するフルマネージド型の Docker コンテナレジストリです。Amazon はイメージをECRホストし、Lambda は呼び出し時にプログラムされた Lambda 機能を提供するために参照します。

関数を Lambraに発行するには
  1. Solution Explorer から、プロジェクトのコンテキストメニューを開き (右クリック)、 に発行 AWS Lambdaを選択して Lambda 関数のアップロードウィンドウを開きます。

  2. Lambda 関数のアップロードページから、以下を実行します。

    にイメージベースの Lambda 関数を発行するためのアップロード画面 AWS
    1. [Package Type] (パッケージタイプ) については、プロジェクト内で発行ウィザードが Dockerfile を検出したので、Imageパッケージタイプとして自動的に選択されます。

    2. [Function Name] (関数名) には、Lambda インスタンスの表示名を入力します。この名前は、Visual Studio の AWS Explorer および AWS Management Consoleの両方に表示される参照名です。

    3. [Description] (説明) には、 AWS Management Console内のインスタンスとともに表示するテキストを入力します。

    4. [Image Command] (イメージコマンド) では、Lambda 関数で実行するメソッドへの完全修飾パスを入力します:AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler

      注記

      ここに入力されたメソッド名は、Dockerfile 内のすべてのCMD命令を上書きします。[Image Command] (イメージコマンド) を入力するのが、オプションであるのは、DockerfileCMDLambda 関数の起動方法を指示するを含む場合においてだけです。

    5. [Image Repo] (イメージ Repo) では、新規もしくは既存の Amazon Elastic コンテナレジストリの名前を入力します。ビルドプロセスが作成する Docker イメージは、このレジストリにアップロードされます。公開されている Lambda 定義は、その Amazon ECRイメージを参照します。

    6. [Image Tag] (イメージタグ)で、リポジトリ内のイメージに関連付ける Docker タグを入力します。

    7. [Next (次へ)] を選択します。

  3. [Advanced Function Details] (アドバンスト関数の詳細) ページの [Role Name] (ロール名) で、アカウントに関連付けられているロールを選択します。このロールは、関数内のコードによって行われる Amazon Web Services コールに一時的な認証情報を提供するために使用されます。ロールがない場合は、 AWS マネージドポリシーに基づいて新しいロールを選択し、 を選択しますAWSLambdaBasicExecutionRole

    注記

    アカウントにはIAM ListPolicies アクションを実行するアクセス許可が必要です。許可がない場合、ロール名リストは空になります。

  4. アップロードを選択して、アップロードと公開のプロセスを開始します。

    注記

    -関数がアップロード中にアップロード機能ページが表示されます。その後、公開プロセスは設定パラメータに基づいてイメージを構築し、必要に応じて Amazon ECRリポジトリを作成し、そのイメージをリポジトリにアップロードし、そのイメージでそのリポジトリを参照する Lambda を作成します。

    関数がアップロードされると、関数 ページが開き、新しい Lambda 関数の設定が表示されます。

  5. Lambda 関数を手動で呼び出すには、[Test Function] (関数のテスト) タブで、リクエストの自由文入力フィールドに hello image based lambda を入力してから [Invoke] (呼び出し) を選択します。大文字に変換されたテキストは、[Response] (レスポンス) に表示されます。

    発行された [Function] (関数) ビューページの [Test Function] (関数のテスト) タブには、Lambda メソッドを手動で呼び出すためのボタンがあります。
  6. リポジトリを参照するには、AWS Explorer[Amazon Elastic Container Service] の下にある [Repositories] (リポジトリ) を選択します。

    AWS Explorer で、AWS Lambda ノードの下にあるデプロイ済みインスタンスをダブルクリックすると、いつでも [Function:] (関数:) ビューを再び開くことができます。

    注記

    AWS Explorer ウィンドウが開いていない場合は、View -> AWS Explorer を使用してドッキングできます。

  7. [Configuration] (設定) タブに、イメージ固有の追加設定オプションがあります。このタブには、Dockerfile 内で指定された可能性がある ENTRYPOINTCMD、および WORKDIR に上書きする方法が用意されています。説明アップロード/公開中に入力した説明 (ある場合) です。

クリーンアップ

この例を使用して開発を継続しない場合は、デプロイされた関数とECRイメージを削除して、アカウント内の未使用のリソースに対して請求されないようにします。

  • 関数を削除するには、AWS ExplorerAWS Lambda ノードの下にあるデプロイ済みインスタンスを右クリックします。

  • リポジトリは、AWS Explorer [Amazon Elastic Container Service] - [Repositories] (リポジトリ) の下で削除できます。

次のステップ

Lambda イメージの作成およびテストについては、「Lambda でのコンテナイメージの使用」を参照してください。

コンテナイメージのデプロイ、アクセス許可、および構成設定の上書きの詳細については、「関数の設定」を参照してください。