リージョン違いについて
Lambda@Edge がサポートされているリージョンは us-east-1 なので、SAM 等で開発した際は、必ず us-east-1 にデプロイする必要があります。
ここで注意したいのは、SAM はデプロイする際にテンプレートが S3 に保存されて、そのテンプレートを CloudFormation が参照してから Stack が立ち上がることです。
そして、先日、私が Lambda@Edge を SAM でデプロイした際のエラーが次です。
1$ sam deploy -g
2
3Configuring SAM deploy
4======================
5
6 Looking for samconfig.toml : Found
7 Reading default arguments : Success
8
9 Setting default arguments for 'sam deploy'
10 =========================================
11 Stack Name []: XXX
12 AWS Region []: us-east-1
13
14
15~略~
16
17
18XXX Error occurred while GetObject. S3 Error Code:
19
20PermanentRedirect. S3 Error Message: The bucket is in this
21
22region: ap-northeast-1. Please use this region to retry the
23
24request (Service: AWSLambdaInternal; Status Code: 400;
25
26Error Code: InvalidParameterValueException; Request ID:
27
28xxxx2640-xxxx-46aa-xxxx-01fc09cexxxx; Proxy: null)
29
30ROLLBACK_IN_PROGRESS AWS::CloudFormation::Stack sample-lambda The following resource(s) failed to create:
31
32[XXX]. . Rollback requested by user.
33DELETE_COMPLETE AWS::Lambda::Function XXX -
34DELETE_IN_PROGRESS AWS::IAM::Role XXXRole -
35ROLLBACK_COMPLETE AWS::CloudFormation::Stack sample-lambda -
36DELETE_COMPLETE AWS::IAM::Role XXXRole -
37-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
38Error: Failed to create/update the stack: sample-lambda, Waiter StackCreateComplete failed: Waiter encountered a terminal failure state
本当に初歩的なミスですが、
us-east-1 へのデプロイなので、us-east-1 内で S3 のテンプレートを取得しようとしているのですが、そのテンプレート ap-northeast-1 にあるよと怒られているエラーです。
本当に初歩ですね 😓
そのため、必ず us-east-1 で S3 を作成して、そこにテンプレートを保存してから、sam deploy
する必要があります。
1$ aws s3 mb --region us-east-1 s3://***
2$ aws s3 cp --recursive ./ s3://***
おわりに
ここらへんて、SAM 側が柔軟にリージョン対応してくれると思っていたのですが、何か私のコマンドの使い方や順序が間違っているようにも思えますが、取り敢えず似たようなエラーに遭遇した方の一助になればと思い残しておきます。