CloudFormation을 사용하여 S3 및 CloudFront 구성에서 Sorry 페이지를 표시하는 환경 구축

소개



이 기사에서는 AWS CloudFormation 관리 콘솔을 사용하여 S3 및 CloudFront에서 Sorry 페이지를 표시하는 환경을 구축하는 단계를 설명합니다. (초보자용)

본 기사에서 게재하고 있는 템플릿의 최신판은 아래에 두고 있습니다.
htps : // 기주 b. 코 m / 오쿠보 t / 아 ws-c ぉ d d ぉ r 마치 온

구성도





전제 조건



CloudFront에 설정하는 SSL 서버 인증서를 리전이 버지니아 북부의 AWS Certificate Manager(ACM)로 가져왔습니다.

ACM 관리 콘솔에서 CloudFront에 설정할 인증서의 식별자를 기록해 둡니다.


구축 절차



1 AWS CloudFormation 관리 콘솔에서 스택 생성을 클릭합니다.


2 후술하는 템플릿을 선택합니다.


3 각 파라미터를 입력합니다.



매개변수 이름
용도
비고


스택 이름
템플릿에서 만들 리소스 집합의 이름
예 prd-stack-vpc-20180801

BucketName
Sorry 페이지를 배치할 버킷 이름
필수

CName01
CloudFront로 설정 CNAME
선택

CName02
CloudFront에 설정할 CNAME(둘 이상인 경우)
선택

CFSSLCertificateId
전제 조건에서 기록한 인증서의 식별자
필수


4 후속 작업은 기본값으로 다음으로 생성됩니다.

5 상황이 CREATE COMPLETE가 되면 S3와 CloudFront의 구축이 완료됩니다.


6 관리 콘솔 하단의 출력에서 ​​구축한 S3 버킷과 CloudFront 정보를 확인할 수 있습니다.
"여기서, 키가 DomainName의 값을 메모해 둡니다.


7 S3의 관리 콘솔에서 매개변수로 설정한 버킷에 Sorry 페이지의 내용이 포함된 index.html 파일을 업로드합니다.


8 브라우저에서, 방금 메모한 DomainName의 값에 Web 액세스 해,
Sorry 페이지의 내용이 표시되면 OK입니다. (되지 않으면 5 분 정도 기다렸다가 확인해보십시오.)

템플릿



s3-cloudfront-sorry.yml
AWSTemplateFormatVersion: "2010-09-09"
Description: 
  S3 and CloudFront for Sorry Page Create

Metadata:
  "AWS::CloudFormation::Interface":
    ParameterGroups:
      - Label: 
          default: "S3 and CloudFront Configuration"
        Parameters: 
          - BucketName
          - CName01
          - CName02
          - CFSSLCertificateId

    ParameterLabels: 
      BucketName: 
        default: "BucketName"
      CName01:
        default: "CName01"
      CName02:
        default: "CName02"
      CFSSLCertificateId: 
        default: "CFSSLCertificateId"

# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------# 
Parameters:
  BucketName:
    Type: String

  CName01:
    Type: String
    Default: ""

  CName02:
    Type: String
    Default: ""

  CFSSLCertificateId:
    Type: String

Conditions:
  IsCName01: !Not [!Equals [!Ref CName01, ""]]
  IsCName02: !Not [!Equals [!Ref CName02, ""]]

Resources:
# ------------------------------------------------------------#
#  S3 Bucket
# ------------------------------------------------------------#        
# Bucket
  Bucket:
    Type: "AWS::S3::Bucket"
    Properties:
      BucketName: !Ref BucketName

  CloudFrontOriginAccessIdentity:
    Type: "AWS::CloudFront::CloudFrontOriginAccessIdentity"
    Properties:
      CloudFrontOriginAccessIdentityConfig:
        Comment: !Sub "access-identity-${Bucket}"

  BucketPolicy:
    Type: "AWS::S3::BucketPolicy"
    Properties:
      Bucket: !Ref Bucket
      PolicyDocument:
        Statement:
        - Action: "s3:GetObject"
          Effect: Allow
          Resource: !Sub "arn:aws:s3:::${Bucket}/*"
          Principal:
            CanonicalUser: !GetAtt CloudFrontOriginAccessIdentity.S3CanonicalUserId

# ------------------------------------------------------------#
#  CloudFront
# ------------------------------------------------------------#  
  CloudFrontDistribution:
    Type: "AWS::CloudFront::Distribution"
    Properties:
      DistributionConfig:
        PriceClass: PriceClass_All
        Aliases:
        - !If [IsCName01, !Ref CName01, !Ref "AWS::NoValue"]
        - !If [IsCName02, !Ref CName02, !Ref "AWS::NoValue"]
        Origins:
        - DomainName: !GetAtt Bucket.DomainName
          Id: !Sub "S3origin-${BucketName}"
          S3OriginConfig:
            OriginAccessIdentity: !Sub "origin-access-identity/cloudfront/${CloudFrontOriginAccessIdentity}"

        DefaultCacheBehavior:
          TargetOriginId: !Sub "S3origin-${BucketName}"
          ViewerProtocolPolicy: redirect-to-https
          AllowedMethods:
          - GET
          - HEAD
          CachedMethods:
          - GET
          - HEAD
          DefaultTTL: 3600
          MaxTTL: 86400
          MinTTL: 60
          Compress: true
          ForwardedValues:
            Cookies:
              Forward: none
            QueryString: false
        ViewerCertificate:
          SslSupportMethod: sni-only
          MinimumProtocolVersion: TLSv1.1_2016
          AcmCertificateArn: !Sub "arn:aws:acm:us-east-1:${AWS::AccountId}:certificate/${CFSSLCertificateId}"
        HttpVersion: http2
        Enabled: true
        CustomErrorResponses:
        - ErrorCode: 403
          ErrorCachingMinTTL: 30
          ResponsePagePath: /index.html
          ResponseCode: 503

# ------------------------------------------------------------#
# Output Parameters
# ------------------------------------------------------------#  
Outputs:
#BucketName
  BucketName:
    Value: !Ref Bucket

#DistributionID
  DistributionID:
    Value: !Ref CloudFrontDistribution

#DmainName
  DomainName:
    Value: !GetAtt CloudFrontDistribution.DomainName

좋은 웹페이지 즐겨찾기