今日学んだことを雑多に書く。
route53:GetHostedZoneのPermissionエラーでCloudFormationスタックのデプロイに失敗する
AccessDenied. User doesn't have permission to call route53:GetHostedZone. Rollback requested by user.
- テンプレートのパラメータで Route53 ホストゾーンを型指定している
yaml HostedZoneId: Type: AWS::Route53::HostedZone::Id Default: Z0123xxxxxxxxxxxxxxxx Description: Route53 hosted zone ID. - マネージメントコンソールでデプロイしている
- CloudFormation のサービスロールで
route53:GetHostedZoneを許可している
デフォルト値のZ0123xxxxxxxxxxxxxxxxが、その環境に存在しないホストゾーン ID だったことが原因。おそらくデプロイの際に内部的にroute53:GetHostedZoneを実行していると思われる。
解決策はDefault属性の削除か、またはType属性をStringに変更する。
なお、サービスロールを指定しない場合はサインインユーザーの認証情報がスタックデプロイに使用される。
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/using-iam-servicerole.html
CloudFormation はデフォルトで、スタックオペレーションのためのユーザー認証情報から CloudFormation が生成する一時的なセッションを使用します。サービスロールを指定すると、CloudFormation はロールの認証情報を使用します。
Lambda関数にCloudFormationでタグをつける
Resources: StartStepFunctionLambda: Type: AWS::Lambda::Function Properties: FunctionName: StartStepFunctionLambda # ... その他のプロパティ Tags: - Key: Environment Value: production - Key: Project Value: my-project