AWSCloudFront

CloudFrontログ用S3バケット指定時にLogging Bucket does not refer to a validのエラー

TerraformでCloudFrontのログ用のS3バケット指定時に The parameter Logging Bucket does not refer to a valid S3 bucket. のエラーに遭遇したのでメモっておきます。

スポンサーリンク

事象

Terraformのソースコードで以下のようにバケット名を指定して実行したところ当該エラーになりました。

$ cat main.tf
...
resource "aws_cloudfront_distribution" "main" {
...
  logging_config {
    bucket = "demo-logs"
...
  }
...
$
$ terraform apply
...

aws_cloudfront_distribution.main: Modifying... [id=E28CBxxxxx]
╷
│ Error: error updating CloudFront Distribution (E28CBxxxxx): InvalidArgument: The parameter Logging Bucket does not refer to a valid S3 bucket.
│ 	status code: 400, request id: 9496a475-xxxxx
│
│   with aws_cloudfront_distribution.main,
│   on main.tf line 4, in resource "aws_cloudfront_distribution" "main":
│    4: resource "aws_cloudfront_distribution" "main" {
│
╵
ERRO[0030] 1 error occurred:
	* exit status 1

$

原因と対応

bucketにはバケット名ではなく、バケット名.s3.ap-northeast-1.amazonaws.com仮想ホスティング形式バケット名.s3.amazonaws.comレガシーグローバルエンドポイント形式を指定します。

AWSマネジメントコンソールからS3を選択すると、デフォルトでは後者のレガシーグローバルエンドポイント形式が指定されます。

Terraformのaws_s3_bucketの属性を利用するときはbucket_regional_domain_namebucket_domain_nameを指定します。

# これはOK
output "global-endpoint-style" {
  value = aws_s3_bucket.logs.bucket_regional_domain_name
  # demo-logs.s3.ap-northeast-1.amazonaws.com
}
# これもOK
output "virtual-hosted-style" {
  value = aws_s3_bucket.logs.bucket_domain_name
  # demo-logs.s3.amazonaws.com
}
# これはNG
output "bucket-name" {
  value = aws_s3_bucket.logs.id
  # demo-logs
}

今回は以上です〜ノシ

参考

(`・ω・´)ノ アリガトウゴザイマス!!

CloudFormation creation of CloudFront distribution with logging bucket