CDKを使ってS3をデプロイしようとした際に遭遇したエラーと、とりあえず実施した対応について紹介します。
※別環境で同様の設定で作成してもエラーが再現しなかったため具体的な発生要件は分かりませんでした・・・
作成した構成を眺めている感じは、CloudFront等のLogを格納するように作成しているBucketでエラーが出ているため、そのあたりにエラーを起こす何かがありそう・・・
各種バージョン
aws-cdk-lib==2.60.0
Python 3.7.16
開発環境はCloud9を利用しています。
エラー内容とコード
エラー内容
2023/5/23にS3をデプロイしようとしたところ以下のエラーが発生しました。
2023/3頃にデプロイした際には同様の構成でもエラーが発生しなかったため、2023/4にあったS3のデフォルト設定の変更が関係しているものと思っています。
Bucket cannot have ACLs set with ObjectOwnership's BucketOwnerEnforced setting (Service: Amazon S3; Status Code: 400; Error Code: InvalidBucketAclWithObjectOwnership; Request ID: KW3CT7MV5
GGDAECY; S3 Extended Request ID: bwGXYmFJlgJKDADmInLsDbMOzQsKQ6JM184mNwpQQolZOuaG1eXtTeWWltIZm5HgMgFwnzWMEkM=; Proxy: null)
CDKコード
以下は、S3へのアクセスLogを格納するBucketを作成するコードとなっています。
server_access_log_bucket = s3.Bucket(
self,
'ServerAccessLogBucket',
block_public_access=s3.BlockPublicAccess.BLOCK_ALL,
bucket_name=bucket_name,
encryption=s3.BucketEncryption.S3_MANAGED,
lifecycle_rules=[s3.LifecycleRule(expiration=Duration.days(60))],
removal_policy=RemovalPolicy.DESTROY,
)
解決策
同じようなエラーについてのIssueがあったため、そちらを参考にしました。
GithubのIssueはこちら
修正後のコードは以下です。
server_access_log_bucket = s3.Bucket(
self,
'ServerAccessLogBucket',
block_public_access=s3.BlockPublicAccess.BLOCK_ALL,
bucket_name=bucket_name,
encryption=s3.BucketEncryption.S3_MANAGED,
lifecycle_rules=[s3.LifecycleRule(expiration=Duration.days(60))],
removal_policy=RemovalPolicy.DESTROY,
# 下を追加
object_ownership=s3.ObjectOwnership.OBJECT_WRITER,
)
ここでは、Object Ownershipの設定を追加しています。
これによって、エラーは解消できました。
まとめ
今回は、CDKで発生したエラーについての対処法を紹介しました。
別環境で再現できていないことも有り、具体的なエラーの内容については触れることができませんでしたが、同様のエラーに悩まれる方のお役に立てれば幸いです。