別の AWS アカウントにある Lambda 関数を呼び出すために Amazon S3 イベント通知を設定するにはどうすればよいですか?

所要時間2分
0

Amazon Simple Storage Service (Amazon S3) バケットが別の AWS アカウントで AWS Lambda 関数を呼び出すようにしたいと考えています。

簡単な説明

Amazon S3 バケットが別の AWS アカウントの Lambda 関数を呼び出すようにするには、次の手順を実行します。

1.    Lambda 関数のリソースベースのアクセス権限ポリシーを更新して、Amazon S3 の呼び出しアクセス許可を付与します

2.    Lambda 関数を呼び出す Amazon S3 イベント通知を作成します。

重要: Lambda 関数は S3 バケットと同じ AWS リージョンに存在する必要があります。関数の移行の詳細については、「Lambda コンソールを使用して Lambda 関数を別の AWS アカウントまたはリージョンに移行するにはどうすればよいですか?」を参照してください。

解決方法

注: この手順を実行するには、次の情報が必要です。

注: AWS コマンドラインインターフェイス (AWS CLI) のコマンド実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

Lambda 関数のリソースベースの許可ポリシーを更新して、Amazon S3 に呼び出し許可を付与する

AWS マネジメントコンソール

1.    Lambda 関数が存在する AWS アカウントを使用して、Lambda コンソールの [関数] ページを開きます。

2.    Amazon S3 から呼び出す Lambda 関数の名前を選択します。

3.    [設定] タブで、[アクセス権限] を選択します。

4.    [リソースベースのポリシー] ペインで、[アクセス権限を追加] を選択します。

5.    [ポリシーステートメント] ペインで、[AWS service] (AWS のサービス) を選択します。[サービス] ドロップダウンリストが表示されます。

6.    [サービス] ドロップダウンリストで、[S3] を選択します。テキストフィールドが表示されます。

7.    [Source account] (ソースアカウント ) で、S3 バケットをホストしているアカウントの AWS アカウント ID を入力します。

8.    [Source ARN] (ソース ARN) で、S3 バケットの ARN を入力します。次の形式を使用します。

注: bucket_name を、お客様の S3 バケットの名前に置き換えてください。

arn:aws:s3:::bucket_name

9.    [アクション] ドロップダウンリストから [lambda:InvokeFunction] を選択します。

10.    [ステートメント ID] に、ポリシー内で作成するステートメントを区別する一意のステートメント ID を入力します。

11.    [Save] (保存) を選択します。

詳細については、「AWS Lambda でのリソースベースのポリシーの使用」を参照してください。

AWS CLI

Lambda 関数のリソースベースの許可ポリシーを更新して、次のような add-permission API を使用して Amazon S3 に呼び出し許可を付与します。

aws lambda add-permission \
--function-name LambdaFunction_name \
--action lambda:InvokeFunction \
--principal s3.amazonaws.com \
--source-arn arn:aws:s3:::bucket_name \
--statement-id "unique_statement_ID"

注: LambdaFunction_namebucket_nameunique_statement_ID を、お客様の変数に置き換えてください。

Lambda 関数を呼び出す Amazon S3 イベント通知を作成する

AWS マネジメントコンソール

Amazon S3 コンソールを使用したイベント通知の有効化と設定」の手順に従います。

AWS CLI

次のような put-bucket-notification-configuration API を使用して Lambda 関数を呼び出す Amazon S3 イベント通知を作成します。

注: bucket_name を、お客様の S3 バケットの名前に置き換えてください。

aws s3api put-bucket-notification-configuration \
--bucket bucket_name \
--notification-configuration file://notification.json

次のような notification.json ファイルを作成して保存します。

注: LambdaFunction_ARN を、お客様の Lambda 関数 ARN に置き換えてください。プレフィックスとサフィックスを、お客様のフィルタールールの変数に置き換えてください。

{
"LambdaFunctionConfigurations": [
    {
      "Id": "my-lambda-function-s3-event-configuration",
      "LambdaFunctionArn": "LambdaFunction_ARN",
      "Events": [ "s3:ObjectCreated:*" ],
      "Filter": {
        "Key": {
          "FilterRules": [
            {
              "Name": "prefix"|"suffix",
              "Value": "string"
            }
          ]
        }
      }
    }
  ]
}

Lambda 関数のテスト

指示に従って、Lambda コンソールを使用して Lambda 関数をテストします。

関数がイベント通知によって呼び出されない場合は、「Amazon S3 イベント通知が Lambda 関数を呼び出さないのはなぜですか?」の手順に従ってください。


関連情報

Lambda 実行ロールに Amazon S3 バケットへのアクセスを許可するにはどうすればよいですか?

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ