🫠
CloudFormationのstringはクオーテーション("")で囲っとくのが無難
先日、LPをデプロイする用にS3をoriginにしたCloudFrontの環境をCloudFormationを使って作成したのですが、string(文字列)は最初から全部クオーテーション("")で囲っておけば良かったと後悔したので共有します。
AWSTemplateFormatVersion: 2010-09-09
Description: CDN
Parameters:
ProjectName:
Type: String
Description: The name of the project. USE KEBAB-CASE ONLY.
Resources:
Oac:
Type: AWS::CloudFront::OriginAccessControl
Properties:
OriginAccessControlConfig:
Name: !Sub ${ProjectName}-oac
OriginAccessControlOriginType: s3
SigningBehavior: always
SigningProtocol: sigv4
S3OriginBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: { Fn::ImportValue: !Sub "${ProjectName}-S3OriginBucketName" }
PolicyDocument:
Statement:
- Sid: allow-cloudfront-to-get-object
Effect: Allow
Principal:
Service: cloudfront.amazonaws.com
Action: s3:GetObject
Resource: !Sub
- ${BucketArn}/*
- BucketArn: { Fn::ImportValue: !Sub "${ProjectName}-S3OriginBucketArn" }
Condition:
StringEquals:
AWS:SourceArn: !Sub "arn:aws:cloudfront::${AWS::AccountId}:distribution/${CloudFrontDistribution}"
- Sid: allow-cloudfront-to-list-bucket # to avoid getting 403 error response instead of 404
Effect: Allow
Principal:
Service: cloudfront.amazonaws.com
Action: s3:ListBucket
Resource: { Fn::ImportValue: !Sub "${ProjectName}-S3OriginBucketArn" }
Condition:
StringEquals:
AWS:SourceArn: !Sub "arn:aws:cloudfront::${AWS::AccountId}:distribution/${CloudFrontDistribution}"
CloudFrontのオリジンにしてるS3のバケットポリシーですが、S3OriginBucketPolicyの上から四行目のところ
Bucket: { Fn::ImportValue: !Sub "${ProjectName}-S3OriginBucketName" }
ここ、ダブルクオーテーション取るとLinterに怒られまして。
そもそも、これはスタックを作成するときに入力したProjectName
を!Subで展開したのち、できた文字列で!ImportValueするというものです。
(一行でなんとしても書きたいということで、yamlの記述にjsonを混ぜてるので人によっては見にくいかもしれません。すみません。)
要はですね。ここでダブルクオーテーションを打つ必要があるのですが、そうすると他のところの文字列にダブルクオーテーションがないのが気になり始めるという...
例えばOACのところとか。
Name: !Sub ${ProjectName}-oac
で、結局全部ダブルクオーテーション入れました...
最初から打てば良かったです。
私のように気になるタイプの人は最初から文字列はダブルクオーテーションなりで囲むことをおすすめします。
Discussion