基本 AWS Lambda Docker イメージの作成プロジェクト - AWS Toolkit for Visual Studio

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

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

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

  • Docker ファイルはプロジェクトに含まれています。

  • 別のパブリッシング構成が選択されます。

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

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

Visual Studio .NET Core Lambda プロジェクトを作成する

Lambda Visual Studio のテンプレートとブループリントを使用すると、プロジェクトの初期化をスピードアップできます。Lambda ブループリントには、柔軟なプロジェクト基盤を簡単に作成できるようにあらかじめ記述された関数が含まれています。

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

  2. 新規プロジェクト」ダイアログボックスで、「言語」、「プラットフォーム」、および「プロジェクトタイプ」ドロップダウンボックスを「すべて」に設定し、「検索」フィールドに入力しますaws lambdaAWS Lambda プロジェクト (.NET コア-C#) テンプレートを選択します。

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

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

プロジェクトファイルのレビュー

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

  1. Dockerfile

  2. aws-lambda-tools-defaults.json

  3. Function.cs

1. Dockerfile

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

  • 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"]

以下は、.NET 8 (コンテナイメージ) ブループリントによって作成された Dockerfile の例です。

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このファイルは、Visual Studio デプロイウィザードおよび.NET Core 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 の発行ウィザードにこの値が事前入力されます。

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

{ "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 関数です。このプロジェクトでは、FunctionHandler入力テキストを呼び出しますToUpper()

Lambda に発行する

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

関数を Lambdaに発行するには
  1. ソリューションエクスプローラーから、プロジェクトのコンテキストメニューを開き (右クリック)、[Publish AWS Lambda to] を選択して [Lambda Function のアップロード] ウィンドウを開きます。

  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. [次へ] をクリックします。

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

    注記

    アカウントには IAM ListPolicies アクションを実行する権限が必要です。そうでない場合、Role Name リストは空になります。

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

    注記

    -関数がアップロード中にアップロード機能ページが表示されます。発行プロセスは、設定パラメータに基づいてイメージをビルドし、必要に応じて 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 エクスプローラーウィンドウが開いていない場合は、[表示] → [AWS エクスプローラー] でドッキングできます。

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

クリーンアップ

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

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

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

次のステップ

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

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