
以前の記事「Try #081 – Amazon Route 53とAWS WAFとAmazon CloudFrontとAmazon S3で独自ドメインホスティング環境を構築してみた」の内容をAWS CloudFormationで実現する方法をためしてみました。
今回の作成したテンプレートをGitHubで公開したのでぜひご利用ください!
aws-cloudformation-templates-showcase
certificate-create.yml
AWSTemplateFormatVersion: 2010-09-09
Description: Certificate creation
Parameters: DomainName: Description: Domain Name Type: String HostedZoneId: Description: Host Zone ID Type: String
Resources: CertificateManagerCertificate: Type: AWS::CertificateManager::Certificate Properties: DomainName: !Sub ${DomainName} DomainValidationOptions: - DomainName: !Sub ${DomainName} HostedZoneId: !Sub ${HostedZoneId} ValidationMethod: DNS
|
hosting.yml
AWSTemplateFormatVersion: 2010-09-09
Description: Build a Unique Domain Hosting Environment with Amazon Route 53, Amazon CloudFront, and Amazon S3
Parameters: DomainName: Description: Domain Name Type: String HostedZoneId: Description: Host Zone ID Type: String CertificateId: Description: Certificate ID Type: String
Resources: S3Bucket: Type: AWS::S3::Bucket Properties: BucketName: !Sub ${AWS::StackName}-${AWS::Region}-${AWS::AccountId} S3BucketPolicy: Type: AWS::S3::BucketPolicy DependsOn: - CloudFrontOriginAccessIdentity Properties: Bucket: !Sub ${S3Bucket} PolicyDocument: Statement: - Sid: PolicyForCloudFrontPrivateContent Effect: Allow Principal: AWS: !Sub arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ${CloudFrontOriginAccessIdentity} Action: s3:GetObject Resource: !Sub arn:aws:s3:::${S3Bucket}/* CloudFrontOriginAccessIdentity: Type: AWS::CloudFront::CloudFrontOriginAccessIdentity Properties: CloudFrontOriginAccessIdentityConfig: Comment: Unique Domain Hosting Environment CloudFrontDistribution: Type: AWS::CloudFront::Distribution DependsOn: - S3Bucket - CloudFrontOriginAccessIdentity Properties: DistributionConfig: Aliases: - !Sub ${DomainName} Origins: - DomainName: !Sub ${S3Bucket}.s3.${AWS::Region}.amazonaws.com Id: !Sub ${S3Bucket}.s3.${AWS::Region}.amazonaws.com S3OriginConfig: OriginAccessIdentity: !Sub origin-access-identity/cloudfront/${CloudFrontOriginAccessIdentity} DefaultCacheBehavior: TargetOriginId: !Sub ${S3Bucket}.s3.${AWS::Region}.amazonaws.com Compress: true AllowedMethods: - HEAD - GET CachedMethods: - HEAD - GET ViewerProtocolPolicy: redirect-to-https CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6 CustomErrorResponses: - ErrorCode: 403 ResponsePagePath: /index.html ResponseCode: 200 ErrorCachingMinTTL: 0 - ErrorCode: 404 ResponsePagePath: /index.html ResponseCode: 200 ErrorCachingMinTTL: 0 PriceClass: PriceClass_All Enabled: true ViewerCertificate: AcmCertificateArn: !Sub arn:aws:acm:us-east-1:${AWS::AccountId}:certificate/${CertificateId} MinimumProtocolVersion: TLSv1.2_2021 SslSupportMethod: sni-only Restrictions: GeoRestriction: RestrictionType: none HttpVersion: http2 DefaultRootObject: index.html IPV6Enabled: true Route53RecordSet: Type: AWS::Route53::RecordSet DependsOn: - CloudFrontDistribution Properties: Name: !Sub ${DomainName} HostedZoneId: !Sub ${HostedZoneId} Type: A AliasTarget: DNSName: !GetAtt CloudFrontDistribution.DomainName HostedZoneId: Z2FDTNDATAQYW2
|
事前準備
- Amazon Route 53による独自ドメインの取得
- 対象の「ドメイン名」と「ホストゾーンID」をメモしておく

構築の流れ
- 指定リージョンでSSL証明書を自動デプロイ
- 任意リージョンで独自ドメインホスティング環境を自動デプロイ
指定リージョンでSSL証明書を自動デプロイ
はじめに、指定リージョンでSSL証明書を自動デプロイします。SSL証明書をCloudFrontで利用するためには、リージョンを「us-east-1」で作成する必要があります。
リージョン「us-east-1」でCloudFormationにアクセス。スタック → スタックの作成 → 「新しいリソースを使用」をクリック。

前提条件は「テンプレートの準備完了」を選択。テンプレートの指定は「テンプレートファイルのアップロード」を選択しファイルをアップロード → 「次へ」をクリック。
CloudFormationテンプレートは「certificate-create.yml」を利用。

任意のスタック名・ドメイン名・ホストゾーンIDを設定 → 「次へ」をクリック。

スタックオプションは今回デフォルトで設定 → 「次へ」をクリック。

設定を確認 → 「スタックの作成」をクリック。

スタックが作成されたのを確認。

「us-east-1」リージョンのAWS Certificate Managerを確認すると、SSL証明書が自動作成されているのを確認できる。次のテンプレートで利用するため対象の「証明書ID」をメモ。

任意リージョンで独自ドメインホスティング環境を自動デプロイ
最後に、任意リージョンで独自ドメインホスティング環境を自動デプロイします。
デプロイしたいリージョンでCloudFormationにアクセス。
スタック → スタックの作成 → 「新しいリソースを使用」をクリック。

前提条件は「テンプレートの準備完了」を選択。テンプレートの指定は「テンプレートファイルのアップロード」を選択しファイルをアップロード → 「次へ」をクリック。
CloudFormationテンプレートは「hosting.yml」を利用。

任意のスタック名・証明書ID・ドメイン名・ホストゾーンIDを設定 → 「次へ」をクリック。

スタックオプションは今回デフォルトで設定 → 「次へ」をクリック。

設定を確認 → 「スタックの作成」をクリック。

スタックが作成されたのを確認。

Amazon CloudFrontに自動でデプロイされているのを確認します。

Amazon S3に自動でデプロイされているのを確認します。

デプロイされたS3バケットに公開したいファイル一式をアップロードします。

独自ドメインにアクセスするとアップロードしたWebSiteが表示されます。

AWS CloudFormationを利用することで、独自ドメインホスティング等のさまざまなリソース構築を自動化することが可能です。
今後は、AWS CDK等で各サービス構成をどの範囲まで定義できるかも試していければと思います。
AWS CloudFormationについて、他にも記事を書いています。よろしければぜひ。
tags - AWS CloudFormation

