チュートリアル: Amazon S3 トリガーを使用して Lambda 関数を呼び出す
このチュートリアルでは、コンソールを使用して Lambda 関数を作成し、Amazon Simple Storage Service (Amazon S3) のトリガーを設定します。トリガーは、Amazon S3 バケットにオブジェクトを追加するたびに関数を呼び出します。
このチュートリアルの Lambda 関数は Node.js ランタイムを使用します。他のランタイムを使用するコードサンプルについては、「Lambda 関数を呼び出すための Amazon S3 トリガー
前提条件
AWS アカウント がない場合は、以下のステップを実行して作成します。
AWS アカウント にサインアップするには
オンラインの手順に従います。
サインアップ手順の一環として、通話呼び出しを受け取り、電話のキーパッドを用いて検証コードを入力するように求められます。
AWS アカウント にサインアップすると、AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、管理ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。
AWS のサインアップ処理が完了すると、ユーザーに確認メールが送信されます。https://aws.amazon.com/
AWS アカウント にサインアップした後、日常的なタスクにルートユーザーを使用しないように、管理ユーザーを作成します。
AWS アカウントのルートユーザー をセキュリティで保護する
-
[ルートユーザー] を選択し、AWS アカウント のメールアドレスを入力して、アカウント所有者として AWS Management Console
にサインインします。次のページでパスワードを入力します。 ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドの「ルートユーザーとしてサインインする」を参照してください。
-
ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、IAM ユーザーガイドの「AWS アカウント のルートユーザーの仮想 MFA デバイスを有効にする (コンソール)」を参照してください。
管理ユーザーを作成する
-
日常的な管理タスクのためには、AWS IAM Identity Center (successor to AWS Single Sign-On) の管理ユーザーに管理アクセスを割り当てます。
手順については、AWS IAM Identity Center (successor to AWS Single Sign-On) ユーザーガイドの「開始方法」を参照してください。
管理ユーザーとしてサインインする
-
IAM Identity Center ユーザーとしてサインインするには、IAM Identity Center ユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。
IAM Identity Center ユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドの「AWS アクセスポータルにサインインする」を参照してください。
このチュートリアルでは、基本的な Lambda オペレーションと Lambda コンソールについてある程度の知識があることを前提としています。初めての方は、コンソールで Lambda の関数の作成 の手順に従って最初の Lambda 関数を作成してください。
Amazon S3 バケットを作成してサンプルオブジェクトをアップロードする
S3 バケットを作成してオブジェクトをアップロードするには、以下の手順を実行します。
-
Amazon S3 コンソール
を開きます。 -
[バケットを作成する] を選択します。
-
[全般設定] で、次の操作を行います。
-
[バケット名] に、一意の名前を入力します。
-
[AWS リージョン] で、リージョンを選択します。Lambda 関数をは同じリージョンで作成する必要があることに注意してください。
-
-
[バケットを作成する] を選択します。
-
バケットにオブジェクトをアップロードします (
HappyFace.jpg
など) 。Lambda 関数をテストする前に、このサンプルオブジェクトを作成する必要があります。このチュートリアルの後半で関数を手動でテストするときは、バケット名とオブジェクトファイル名を指定する関数にサンプイベントデータを渡します。
IAM 実行ロールを作成する
Lambda 関数には、Amazon S3 のオブジェクトにアクセスするための許可が必要です。次のステップに従って、完全な Amazon S3 許可を関数に付与する実行ロールを作成します。
実行ロールを作成するには
-
IAM コンソールの [Roles (ロール)] ページ
を開きます。 -
[ロールの作成] を選択します。
-
最初のページで、次の選択を行います。
-
[信頼できるエンティティタイプ] – [AWS のサービス]
-
[ユースケース] – [Lambda]
[Next] (次へ) をクリックします。
-
-
[許可を追加] ページの検索ボックスで、
s3
と入力します。AmazonS3FullAccess
マネージド AWS ポリシーの横にあるチェックボックスを選択します。 -
引き続き [許可を追加] ページで、以前の
s3
検索フィルターを削除し、検索ボックスでbasic
と入力します。AWSLambdaBasicExecutionRole
マネージド AWS ポリシーの横にあるチェックボックスを選択します。 -
[Next] (次へ) をクリックします。
-
[名前、確認、作成] ページで、
my-s3-function-role
と入力します。[Create role] (ロールの作成) を選択します。
Lambda 関数を作成する
次のステップに従って、Lambda 関数を作成します。
Lambda 関数を作成するには
Lambda コンソールの [Functions]
(関数) ページを開きます。 -
関数の作成 を選択します。
-
Author from scratch を選択します。
-
基本的な情報 で、以下の作業を行います。
-
関数名 に「
my-s3-function
」と入力します。 -
このチュートリアルでは、Node.js ランタイムを使用します。[ランタイム] で [Node.js 16.x] を選択します。
-
[アーキテクチャ] で、x86_64 と入力します。
-
[デフォルトの実行ロールを変更] タブを展開します。[既存の実行ロールを使用] を選択し、前に作成した
my-s3-function-role
を選択します。
-
-
[機能の作成]を選択します。
Amazon S3 トリガーを作成する
次のステップに従って、Amazon S3 トリガーを Lambda 関数に設定します。
Amazon S3 トリガーを作成するには
-
Lambda コンソールの [関数] ページ
で、前に作成した関数 ( my-s3-function
) を選択します。 -
[Add trigger] を選択します。
-
ソースとして [S3] を選択します。
-
[バケット] で、前に作成したバケットを選択します。他のデフォルト設定を維持します。
-
[再帰呼び出し] の警告を確認します。
-
[Add] (追加) を選択します。
関数コードを記述する
Lambda 関数は、受信したイベントパラメータから、ソース S3 バケット名とアップロードされたオブジェクトのキー名を取得します。この関数は Amazon S3 getObject
API を使用して、オブジェクトのコンテンツタイプを取得します。
Lambda コンソール
[Node.js] タブの Javascript コードを関数のコードエディタにコピーして貼り付け、[デプロイ] を選択します。タブリストには、Lambda がサポートする他のランタイムのサンプルコードも含まれています。
コンソールでテストする
サンプルの Amazon S3 イベントデータを使用して手動で Lambda 関数を呼び出します。
コンソールを使用して Lambda 関数をテストします。
-
関数については、[コード] タブの [コードソース] で、[テスト] の横にある矢印を選択し、ドロップダウンリストから [テストイベントを設定] を選択します。
-
[テストイベントの設定] ページで、以下の操作を行います。
-
[Create new test event] を選択します。
-
[イベント名] には、テストイベントの名前を入力します。例えば、
mys3testevent
です。 -
[Event sharing settings] (イベント共有の設定) で、[Private] (プライベート) を選択します。
-
[テンプレート] には、[S3 Put] ([s3-put]) を選択します。
-
[Event JSON] (イベント JSON) で、以下の値を置き換えます。
-
us-west-1
– Amazon S3 バケットと Lambda 関数を作成した AWS リージョン。 -
example-bucket
– 先ほど作成した Amazon S3 バケット。 -
Test%2FKey
– バケットにアップロードしたサンプルオブジェクトの名前 (
など)。HappyFace.jpg
{ "Records": [ { "eventVersion": "2.0", "eventSource": "aws:s3", "awsRegion": "
us-east-1
", "eventTime": "1970-01-01T00:00:00.000Z", "eventName": "ObjectCreated:Put", "userIdentity": { "principalId": "EXAMPLE" }, "requestParameters": { "sourceIPAddress": "127.0.0.1" }, "responseElements": { "x-amz-request-id": "EXAMPLE123456789", "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH" }, "s3": { "s3SchemaVersion": "1.0", "configurationId": "testConfigRule", "bucket": { "name": "example-bucket
", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::example-bucket
" }, "object": { "key": "test%2Fkey
", "size": 1024, "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901" } } } ] } -
-
[Save (保存)] を選択します。
-
-
テストイベントで関数を呼び出すには、[コードソース] で [テスト] を選択します。
[実行結果] タブには、次のような応答、関数ログ、リクエスト ID が表示されます。
Response "image/jpeg" Function Logs START RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 Version: $LATEST 2021-02-18T21:40:59.280Z 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 INFO INPUT BUCKET AND KEY: { Bucket: 'my-s3-bucket', Key: 'HappyFace.jpg' } 2021-02-18T21:41:00.215Z 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 INFO CONTENT TYPE: image/jpeg END RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 REPORT RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 Duration: 976.25 ms Billed Duration: 977 ms Memory Size: 128 MB Max Memory Used: 90 MB Init Duration: 430.47 ms Request ID 12b3cae7-5f4e-415e-93e6-416b8f8b66e6
S3 トリガーをテストする
Amazon S3 ソースバケットにファイルをアップロードするときに、関数を呼び出します。
S3 トリガーを使用して Lambda 関数をテストするには
-
Amazon S3 コンソールの [Buckets] (バケット) ページ
で、前に作成したソースバケットの名前を選択します。 -
[Upload] (アップロード) ページで、バケットに追加の .jpg または .png イメージファイルをアップロードします。
Lambda コンソールの [Functions]
(関数) ページを開きます。 -
関数の名前 (my-s3-function) を選択します。
-
[Monitor] (モニタリング) タブを選択し、アップロードしたファイルごとに関数が 1 回実行されたことを確認します。このページでは、Lambda から CloudWatch に送信されるメトリクスのグラフが表示されます。[Invocations] (呼び出し) グラフ内のカウント数は、Amazon S3 バケットにアップロードしたファイルの数と一致している必要があります。
これらのグラフの詳細Lambda コンソールでの関数のモニタリングを参照してください。
-
(オプション) CloudWatch コンソールでログを表示するには、[View logs in CloudWatch] (CloudWatch でログを表示) を選択します。ログストリームを選択して、関数呼び出しの 1 つのログ出力を表示します。
リソースのクリーンアップ
このチュートリアル用に作成したリソースは、保持を希望しない場合、すぐに削除できます。使用しなくなった AWS リソースを削除することで、AWS アカウントに請求される料金が発生しないようにできます。
Lambda 関数を削除する
-
Lambda コンソールの [Functions
] (関数) ページを開きます。 -
作成した関数を選択します。
-
[ Actions] で、[Delete ] を選択します。
-
テキスト入力フィールドに
delete
と入力し、[Delete] (削除) を選択します。
実行ロールを削除する
-
IAM コンソールの [Roles (ロール)] ページ
を開きます。 -
作成した実行ロールを選択します。
-
[Delete] (削除) をクリックします。
-
テキスト入力フィールドにロールの名前を入力し、[Delete] (削除) を選択します。
S3 バケットを削除するには
-
Amazon S3 コンソール
を開きます。 -
作成したバケットを選択します。
-
[削除] を選択します。
-
テキスト入力フィールドにバケットの名前を入力します。
-
[Delete Bucket ( バケットを削除 )] を選択します。
次のステップ
詳細なチュートリアルをお試しください。このチュートリアルでは、S3 トリガーは関数を呼び出して、S3 バケットにアップロードされる各イメージファイルのサムネイルイメージを作成します。このチュートリアルでは、AWS と Lambda ドメインに関する中級レベルの知識が必要です。AWS Command Line Interface( AWS CLI) を使用してリソースを作成し、関数とその依存関係の .zip ファイルアーカイブデプロイパッケージを作成します。