💨
AWS CDKでdeployするときにエラー対処(メモ)
同じように悩んでいる人はいるかも知れないので、メモ書き程度に書いておきます。
CDK自体は、誰かが導入。半年前ぐらいまでは順調に稼働していたらしいが、突然動かなくなる・・・汗
(前職は、PdMだったこともあり、IaCはインフラチームに任せていたので、あまり経験がない・・・)
何をした?
$ cdk synth
$ cdk diff
$ cdk deploy --profile hoge
cdkを調整して、diff まで確認して、deployしようとしたら、エラーが発生・・・えっ。
何がおきた?
[stack]: fail: Bucket named 'hogefoobar' exists, but not in account
[account_id]. Wrong account?
色々と調べてみました。
- https://shou2017.com/post/2023/0328_cdk_deploy_error_bucket_exists_wrong_account/
- https://stackoverflow.com/questions/68134382/cdk-deploy-results-in-bucket-named-x-exists-but-not-in-account-067685711111
- https://dev.classmethod.jp/articles/points-to-be-careful-of-when-specifying-the-bootstrap-bucket-name-in-aws-cdk/
S3バケットへの権限周りの話っぽい。
深堀りするために、--verbose オプションで確認。
$ cdk deploy --profile hoge --verbose
...
[13:17:50] Checking for previously published assets
[13:17:50] Retrieved account ID xxxx from disk cache
[13:17:50] Assuming role 'arn:aws:iam::xxxx:role/cdk-hnb659fds-deploy-role-xxxx-ap-northeast-1'.
[13:17:50] Retrieved account ID xxxx from disk cache
[13:17:50] Assuming role 'arn:aws:iam::xxxx:role/cdk-hnb659fds-deploy-role-xxxx-ap-northeast-1'.
[13:17:50] Retrieved account ID xxxx from disk cache
[13:17:50] Assuming role 'arn:aws:iam::xxxx:role/cdk-hnb659fds-file-publishing-role-xxxx-ap-northeast-1'.
[13:17:50] Retrieved account ID xxxx from disk cache
[13:17:50] Assuming role 'arn:aws:iam::xxxx:role/cdk-hnb659fds-file-publishing-role-xxxx-ap-northeast-1'.
[13:17:51] stack: check: Check s3://hogefoobar/yyyy.zip
[13:17:51] stack: check: Check s3://hogefoobar/yyyyy.json
[13:17:51] Call failed: listObjectsV2({"Bucket":"hogefoobar","Prefix":"yyyyy.json","MaxKeys":1}) => Access Denied (code=AccessDenied)
[13:17:51] stack: debug: Access Denied
[13:17:51] Call failed: listObjectsV2({"Bucket":"hogefoobar","Prefix":"yyyy.zip","MaxKeys":1}) => Access Denied (code=AccessDenied)
[13:17:51] stack: debug: Access Denied
[13:17:51] 2 total assets, 2 still need to be published
[13:17:51] Retrieved account ID xxxx from disk cache
...
やはり、AccessDenied。どうやら、IAMのcdkロールがバケットにアクセス出来ない模様。
IAMのロールで、cdkを検索すれば、何件が表示される中で、deploy や file-publishing のロールをチェック。
deployのIAMロールを確認。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject*",
"s3:GetBucket*",
"s3:GetEncryptionConfiguration",
"s3:List*",
"s3:DeleteObject*",
"s3:PutObject*",
"s3:Abort*"
],
"Resource": [
"arn:aws:s3:::abcdefg",
"arn:aws:s3:::abcdefg/*",
],
"Effect": "Allow"
},
hogefoobarのバケットに許可が入っているはずが、abcdefg バケットになっている。。。汗
そりゃー、バケットにアクセスできない。。。file-publishing も同様になっていた。
どのように対処した?
なぜ、こうなったのかは謎・・・。
とりあえず、IAMのcdkロールで、deploy や file-publishingを下記のように調整。
"Resource": [
"arn:aws:s3:::abcdefg",
"arn:aws:s3:::abcdefg/*",
"arn:aws:s3:::hogefoobar",
"arn:aws:s3:::hogefoobar/*"
],
deploy できるようになった・・・ほっ。
まとめ
- 困ったら、verboseオプション。意外と原因調査しやすくなる
- cdk bootstrap 時に、バケット名を指定していて、何かの拍子でデフォルトになった?
- 今となっては謎なので、整えていこう
Discussion