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_name、bucket_name、unique_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 バケットへのアクセスを許可するにはどうすればよいですか?