🫠

CloudFormationのstringはクオーテーション("")で囲っとくのが無難

2024/07/27に公開

先日、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