コンソールで Lambda 関数を作成する - AWS Lambda

コンソールで Lambda 関数を作成する

この入門演習では、コンソールを使用して Lambda 関数を作成します。

最初の練習では、Lambda により作成されるデフォルトのコードを使用し関数を作成します。Lambda コンソールには、コンパイルされていない言語用のコードエディタがあり、コードを素早く変更およびテストすることができます。

次の練習では、コンテナイメージとして定義された関数を作成します。まず、関数コードのコンテナイメージを作成した後、Lambda コンソールを使用して、そのコンテナイメージから関数を作成します。

デフォルトの関数コードを使用して Lambda 関数を作成する

この入門演習では、Lambda コンソールを使用して Node.js の Lambda 関数を作成します。Lambda により、関数のデフォルトコードが自動的に作成されます。次に、サンプルのイベントデータを使用しながら Lambda 関数を手動で呼び出します。関数は Lambda により実行され結果を返します。その後、Lambda 関数によって作成されたログや、さまざまな Amazon CloudWatch メトリクスなど、結果を確認します。

コンソールで Lambda 関数を作成するには、

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

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

  3. [基本的な情報] で、以下の作業を行います。

    1. [関数名] に「my-function」と入力します。

    2. [Runtime] (ランタイム) で、[Node.js 14.x] が選択されていることを確認します。

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

Lambda により、Node.js の関数と実行ロールが作成され、ログをアップロードするためのアクセス許可が関数に付与されます。この Lambda 関数は、ユーザーの関数が呼び出される際に実行ロールを引き受け、そのロールを使用して AWS SDK のための認証情報を作成し、イベントソースからのデータの読み取りを行います。

関数の概要を使用する

[関数の概要] には、関数とその上流および下流リソースが視覚的に表示されます。この表示からは、トリガー、送信先、およびレイヤ設定にジャンプできます。


          Amazon S3 トリガーと Amazon EventBridge の送信先を使用する Lambda 関数。

Lambda 関数を呼び出す

コンソールに用意されているサンプルイベントデータを使用して Lambda 関数を呼び出します。

関数を呼び出すには

  1. 関数を選択した後、 テスト タブを選択します。

  2. テストイベント セクションで、 新しいイベント を選択します。 テンプレート で、デフォルトの hello-world オプションのままにします。名称に入力し、以下のサンプルイベントテンプレートに注目します。

    { "key1": "value1", "key2": "value2", "key3": "value3" }
  3. イベントの作成 を選択し、 呼び出し を選択します。ユーザーごとに、関数につき最大 10 個のテストイベントを作成できます。これらのテストイベントを他のユーザーが使用することはできません。

    Lambda はユーザーに代わって関数を実行します。関数ハンドラーは、サンプルイベントを受け取って、処理します。

  4. 正常に完了したら、コンソールに結果が表示されます。

    • 実行結果には、実行ステータルが成功として表示されます。関数の実行結果を表示するためには、詳細を選択します。ログ リンクをクリックすると、CloudWatchコンソールの ロググループページが開くことに注意してください。

    • [Summary] セクションには、[Log output] セクション(実行ログの REPORT 行)にレポートされた重要な情報が表示されます。

    • ログ出力セクションには、Lambda で各呼び出しに対して生成されるログが表示されます。関数は、これらのログCloudWatchを書き込みます。Lambda コンソールには、ユーザーに便利なようにこれらのログが表示されます。ここをクリックを選択してCloudWatch ロググループに追加し、CloudWatchコンソールでLog groupsページを開きます。

  5. 関数をさらに数回実行して(呼び出しを選択)、次のステップで表示できるいくつかのメトリックを収集します。

  6. ページの上部にある モニタリング タブを選択します。このページでは、Lambda から CloudWatch に送信するメトリクスのグラフを示します。

    これらのグラフの詳細AWS Lambda コンソールで関数をモニタリングするを参照してください。

クリーンアップ

サンプル関数の使用が終了したら、削除します。コンソールが作成した実行ロールと、関数のログを保存するためのロググループも削除できます。

Lambda 関数を削除するには

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

  2. 関数を選択します。

  3. [ Actions] で、[Delete ] を選択します。

  4. 関数の削除ダイアログボックスで、[削除] をクリックします。

ロググループを削除するには

  1. CloudWatch コンソールのロググループページを開きます。

  2. 関数のロググループ (/aws/lambda/my-function) を選択します。

  3. [アクション]、[ロググループの削除] の順にクリックします。

  4. ロググループの削除ダイアログボックスで、[削除] をクリックします。

実行ロールを削除するには

  1. AWS Identity and Access Management (IAM) コンソールのロールページを開きます。

  2. 関数のロール (my-function-role-31exxmpl) を選択します。

  3. [ロールの削除] を選択します。

  4. ロールの削除ダイアログボックスで、[はい、削除します] をクリックします。

AWS CloudFormation と AWS Command Line Interface (AWS CLI) を使用して、関数、ロググループ、ロールの作成とクリーンアップを自動化できます。完全に機能するサンプルアプリケーションについては、「Lambda サンプルアプリケーション」を参照してください。

コンテナイメージとして定義された関数を作成する

この入門演習では、Docker CLI を使用してコンテナイメージを作成した後、そのコンテナイメージから、Lambda コンソールを使用して関数を作成します。

前提条件

次のステップを完了するには、コマンドを実行するコマンドラインターミナルまたはシェルが必要です。コマンドは、該当する場合、プロンプト記号 ($) と現在のディレクトリの名前が前に付けられて、リストに示されます。

~/lambda-project$ this is a command this is output

コマンドが長い場合は、エスケープ文字 (\) を使用して、コマンドを複数の行に分割します。

Linux および macOS では、任意のシェルとパッケージマネージャーを使用します。Windows 10 では、Linux 用の Windows サブシステムをインストールして、Windows 統合バージョンの Ubuntu および Bash を入手できます。

この演習では、コンテナイメージの作成に Docker CLI コマンドを使用します。Docker CLI のインストールについては、 Docker ドキュメント Web サイトの「Docker の入手」を参照してください。

コンテナイメージを作成する

AWS では、Amazon Elastic Container Registry (Amazon ECR) にベースイメージのセットを提供しています。この入門演習では、Node.js のベースイメージを使用してコンテナイメージを作成します。ベースイメージの詳細については、「 Lambda 用の AWS ベースイメージ」を参照してください。

次のコマンドでは、123456789012 を、ご自身の AWS アカウント ID に置き換えます。

AWS Node.js 12 ベースイメージを使用してイメージを作成するには、

  1. ローカルマシンで、新しい関数のプロジェクトディレクトリを作成します。

  2. プロジェクトディレクトリに、app.js という名前のファイルを作成します。次のコードを app.js に追加します。

    exports.handler = async (event) => { // TODO implement const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
  3. テキストエディタを使用して、プロジェクトディレクトリに、Dockerfile という名前の新しいファイルを作成します。Dockerfile に次の内容を追加します。

    FROM public.ecr.aws/lambda/nodejs:12 # Copy function code and package.json COPY app.js package.json /var/task/ # Install NPM dependencies for function RUN npm install # Set the CMD to your handler CMD [ "app.handler" ]
  4. package.json ファイルを作成します。プロジェクトディレクトリから、npm init コマンドを実行します。デフォルト値をすべて受け入れます。

    npm init
  5. Docker イメージをビルドします。プロジェクトディレクトリから、次のコマンドを実行します。

    docker build -t hello-world .
  6. (オプション) AWS のベースイメージには Lambda ランタイムインターフェイスエミュレータが含まれているため、関数をローカルでテストできます。

    1. Docker イメージを実行します。プロジェクトディレクトリから、docker run コマンドを実行します。

      docker run -p 9000:8080 hello-world:latest
    2. Lambda 関数をテストします。新しいターミナルウィンドウを開き、curl コマンドを実行して関数を呼び出します。

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

イメージを Amazon ECR リポジトリにアップロードする

  1. Amazon ECR レジストリに対し、Docker CLI を認証します。

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

    aws ecr create-repository --repository-name hello-world --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
  3. docker tag コマンドを使用して、イメージにリポジトリ名と一致するタグを付けます。

    docker tag hello-world:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  4. docker push コマンドを使用して、イメージを Amazon ECR にデプロイします。

    docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

ユーザー権限を更新する

IAM ユーザーまたはロールが関数を作成するためのアクセス許可に、AWS の管理ポリシー GetRepositoryPolicySetRepositoryPolicy が含まれていることを確認します。アクセスポリシーの詳細については、IAM ユーザーガイド の、「アクセス管理」を参照してください。

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

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

コンテナイメージとして定義された Lambda 関数を作成する

コンテナイメージとして定義された関数の作成に、Lambda コンソールを使用します。

このコンソールを使用して関数を作成するには、

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

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

  3. [コンテナイメージ] オプションを選択します。

  4. [基本的な情報] で、以下の作業を行います。

    1. [関数名] に「my-function」と入力します。

    2. [コンテナイメージ の URI] に、先に作成済みの、Amazon ECR イメージの URI を入力します。

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

ユーザーの関数が Lambda により作成され、ログをアップロードするアクセス許可をこの関数に付与するための、実行ロールが作成されます。Lambda では、ユーザーの関数が呼び出される際に実行ロールを引き受けた後、そのロールを使用して AWS SDK の認証情報が作成され、イベントソースからデータが読み込まれます。

Lambda 関数を呼び出す

コンソールに用意されているサンプルイベントデータを使用して Lambda 関数を呼び出します。

関数を呼び出すには

  1. 関数を選択した後、 テスト タブを選択します。

  2. テストイベント セクションで、 新しいイベント を選択します。 テンプレート で、デフォルトの hello-world オプションのままにします。名称に入力し、以下のサンプルイベントテンプレートに注目します。

    { "key1": "value1", "key2": "value2", "key3": "value3" }
  3. イベントの作成 を選択し、 呼び出し を選択します。ユーザーごとに、関数につき最大 10 個のテストイベントを作成できます。これらのテストイベントを他のユーザーが使用することはできません。

    Lambda はユーザーに代わって関数を実行します。関数ハンドラーは、サンプルイベントを受け取って、処理します。

  4. 正常に完了したら、コンソールに結果が表示されます。

    • 実行結果には、実行ステータルが成功として表示されます。関数の実行結果を表示するためには、詳細を選択します。ログ リンクをクリックすると、CloudWatchコンソールの ロググループページが開くことに注意してください。

    • [Summary] セクションには、[Log output] セクション(実行ログの REPORT 行)にレポートされた重要な情報が表示されます。

    • ログ出力セクションには、Lambda で各呼び出しに対して生成されるログが表示されます。関数は、これらのログCloudWatchを書き込みます。Lambda コンソールには、ユーザーに便利なようにこれらのログが表示されます。ここをクリックを選択してCloudWatch ロググループに追加し、CloudWatchコンソールでLog groupsページを開きます。

  5. 関数をさらに数回実行して(呼び出しを選択)、次のステップで表示できるいくつかのメトリックを収集します。

  6. ページの上部にある モニタリング タブを選択します。このページでは、Lambda から CloudWatch に送信するメトリクスのグラフを示します。

    これらのグラフの詳細AWS Lambda コンソールで関数をモニタリングするを参照してください。

クリーンアップ

コンテナイメージの作業を完了したら、Amazon Elastic Container Registry ユーザーガイド の、「イメージの削除」を参照してください。

使用が終了したサンプル関数は削除しておきます。コンソールが作成した実行ロールと、関数のログを保存するためのロググループも削除できます。

Lambda 関数を削除するには

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

  2. 関数を選択します。

  3. [ Actions] で、[Delete ] を選択します。

  4. 関数の削除ダイアログボックスで、[削除] をクリックします。

ロググループを削除するには

  1. CloudWatch コンソールのロググループページを開きます。

  2. 関数のロググループ (/aws/lambda/my-function) を選択します。

  3. [アクション]、[ロググループの削除] の順にクリックします。

  4. ロググループの削除ダイアログボックスで、[削除] をクリックします。

実行ロールを削除するには

  1. IAM コンソールのロールページを開きます。

  2. 関数のロール (my-function-role-31exxmpl) を選択します。

  3. [ロールの削除] を選択します。

  4. ロールの削除ダイアログボックスで、[はい、削除します] をクリックします。

AWS CloudFormation と AWS CLI を使用すると、関数、ロググループ、およびロールの作成とクリーンアップを自動化できます。完全に機能するサンプルアプリケーションについては、「Lambda サンプルアプリケーション」を参照してください。