Skip to Content

LambdaとS3のリージョンが異なることによるエラー対応

概要

LambdaとS3バケットのリージョンの関係で下記エラーから学んだことの備忘録

CloudWatch Logsより

The notification destination service region is not valid for the bucket location constraint

結論

LambdaからS3バケットを参照する場合、Lambdanが実行されるリージョンとS3バケットのリージョンは同じである必要がある

Amazon S3のCross-Region Replicationを使ってAWS Lambdaを発火させる | Developers.IO

状況

AWS Cost & Usage Report(AWSのコストと使用状況レポート)の設定中
CloudFormation実行時にステータスがCREATE_FAILEDで失敗
状況の理由はFailed to create resource. See the details in CloudWatch Log Stream:

環境構築の流れ

  1. AWS Cost & Usage Report設定をする
  2. S3バケットに必要な情報とCloudFormationのテンプレートが作成される
  3. テンプレートをCloudFormationで実行して環境構築(Glue, Lambda)
  4. Atehenaでコスト分析できる

リンクより画像借用
Querying your AWS Cost and Usage Report using Amazon Athena | AWS Cost Management

Billing

Cost & Usage Reportsの設定

  • S3バケットをap-northeast-1に新規作成
    • バケット名: bigmuramura-billing-report
  • レポートデータ統合の有効化でAmazon Athenaにチェック

S3

CloudFormationのテンプレートを確認

S3バケット(bigmuramura-billing-report)の一覧

生成されたテンプレートcrawler-cfn.ymlのオブジェクトIDを確認

CloudFormation

S3バケットに生成されたテンプレートを実行

Amazon S3 URLにS3のオブジェクトIDをペースト

チェックを入れてスタック作成

CloudFormationでのエラー対応

スタックが失敗し、CloudWatch Logsで詳細を確認できるとのこと
Failed to create resource. See the details in CloudWatch Log Stream:

CloudWatch Logsから対象のエラーを確認
The notification destination service region is not valid for the bucket location constraint
(通知先サービスのリージョンはバケットロケーション制約では無効です)
どういうことだろうとログを見てみると、Lambdaがus-east-1で実行されている
S3バケットはap-northeast-1で作成しているため、それが原因だった

なぜus-east-1でLambdaが実行されているのか?

CloudFormationのスタックを作成したリージョンが バージニア北部(us-east-1) になっていた
なにも意識していなかったため見落としていた

解決

CloudFormationのスタック作成リージョンを 日本(ap-northeast-1) に変更
※ S3バケットと同じリージョンに合わせた

正常にスタックが作成された

感想

S3とLambadaのリージョンの関係性をトラブルから学べた
知っていればすぐ気づけた問題

参考

記事内でリンク済み