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

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

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

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

  • Dockerfile はプロジェクトに含まれます

  • 変更された発行設定

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

AWS Toolkit for Visual Studio のセットアップの詳細と前提条件については、「AWS Toolkit for Visual Studio で AWS Lambda Lambda テンプレートを使用する」を参照してください。

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

組み込み Lambda Visual Studio ブループリントにより、プロジェクトの迅速な初期化が可能になります。ブループリントは、機能をすばやくデモンストレーションするための定型ファイルと関数のセットであり、後で変更する際の出発点となります。

Visual Studio .NET Core Lambdaプロジェクトを作成するには
  1. Visual Studio を開き、[File (ファイル)] メニューで [New (新規)] を選択し、[Project (プロジェクト)] を選択します。

  2. 次のいずれかを実行します。

    • Visual Studio 2017 の場合、[New Project] (新しいプロジェクト) ダイアログボックスで、[Installed] (インストール済み) を展開し、Visual C# を展開し、AWS Lambda を選択し、AWS Lambda Project (.NET Core - C#) テンプレートを選択してから、[OK] を選択します。

    • Visual Studio 2019 の場合、[New Project] (新しいプロジェクト) ダイアログボックスで、[Language] (言語)、[Platform] (プラットフォーム)、および [Project type] (プロジェクトタイプ) のドロップダウンボックスが [All] (すべて) に設定されていることを確認して、[Search] (検索) フィールドに aws lambda を入力します。次いで、AWS Lambda Project (.NET Core - C#) テンプレートを選択してから [Next] (次へ) を選択します。

  3. 次のいずれかを実行します。

    • Visual Studio 2017 では、名前には、AWSLambdaDockerを入力します。目的のファイルロケーションを選択してから、OKを選択します。

    • Visual Studio 2019 では、名前には、AWSLambdaDockerを入力します。目的のファイルロケーションを入力してから、作成を選択します。

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

プロジェクトファイルを確認する

見直すべきプロジェクトファイルは、Dockerfileaws-lambda-tools-defaults.json、および Function.cs の 3 つです。

次のコードは、選択したブループリントを使用して作成される Dockerfile を示します。以下の 3 つのアクションが実行されます。

FROM:

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

WORKDIR

イメージの内部作業ディレクトリを/var/taskのように確立します。

COPY

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

FROM ecr.aws/lambda/dotnet:5.0 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/net5.0/linux-x64/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/net5.0/linux-x64/publish" .

Dockerfile をさらにカスタマイズするには、以下を使用することもできます。

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

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

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

aws-lambda-tools-defaults.json ファイルを検証する

  • docker-host-build-output-dir フィールドは、Dockerfile における指示と相関性のあるビルドプロセスの出力ディレクトリを設定します。

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

{ "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-east-2", "configuration": "Release", "package-type": "image", "function-memory-size": 256, "function-timeout": 30, "image-command": "AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler", "docker-host-build-output-dir": "./bin/Release/net5.0/linux-x64/publish" }

Function.csファイルを確認します。Function.csは、Lambda 関数としてエクスポーズするc#機能を定義します。-FunctionHandlerは、Lambda 関数の実行時に実行される Lambda 関数です。このプロジェクトでは、1 つの関数が定義されています:FunctionHandler、これは、入力テキストに対して ToUpper () を呼び出します。

これでプロジェクトを Lambda に発行できるようになりました。

Lambda に発行する

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

関数を Lambdaに発行するには
  1. [Solution Explorer] で、アプリケーションのコンテキストメニュー (右クリック) を開き、[Publish to AWS Lambda] (AWS Lambda への発行先) を選択します。

  2. [Upload Lambda Function] (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 Managed Microsoft ADポリシーに基づく新規ロール] を選択してからを選択します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 Explorer ウィンドウが開いていない場合、[View] (表示) -> AWS Explorer を経由してドッキングできます。

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

クリーンアップ

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

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

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

次のステップ

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

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