コンテンツにスキップ

CloudFormation

ここでは、前回作成したリポジトリの続きから進めていきます。 まずは AWS CLI と Github Appをインストールし、 Github Personal Access Token (PAT)を取得し、 CloudFormationの.ymlファイルで静的ウェブをAmplify通してデプロイします。

AWS CLIの設定


a. AWS CLIをインストール

インストール
C:\> msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
C:\> msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi /qn
確認
C:\> aws --version
aws-cli/2.25.11 Python/3.11.6 Windows/10 exe/AMD64 prompt/off
インストール
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
確認
$ aws --version
aws-cli/2.25.11 Python/3.11.6 Linux/5.10.205-195.807.amzn2.x86_64 
インストール
C:\> msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
C:\> msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi /qn
確認
$ which aws
/usr/local/bin/aws 
$ aws --version
aws-cli/2.25.11 Python/3.11.6 Darwin/23.3.0

b. AWS アクセスキー

AWS IAM にてアクセスキーを作成し、取得をします。

aws-cli

aws-cli-success

注意

上記のシークレットアクセスキーが再生できないため、.csvファイルをダウンロードボタンで安全な場所に 保管しましょう。

c. アクセスキー設定

最後に AWS CLI にアクセスキーを設定します。上記画面のアクセスキーをコピペします。

bash
$ aws configure
AWS Access Key ID [None]: *************
AWS Secret Access Key [None]: ***************
Default region name [None]: ap-northeast-1
Default output format [None]: json

Github Appをインストール

Amplify が GitHub リポジトリに安全かつ最小限の権限でアクセスし、 ソース取得・ビルド・Webhook 設定を行うため、従来の OAuth に代わって GitHub App のインストールが必要です。

https://github.com/apps/aws-amplify-ap-northeast-1へアクセスし、
以下の通りGithub Appのインストールをします。

install-app


Personal Access token 作成

https://github.com/settings/tokensへアクセス

create-token

create-token-2

create-token-3

トークンを保存
$ echo "*****" > ~/.github_amplify_token
$ chmod 600 ~/.github_amplify_token 

CFのテンプレート作成

こちらは AWS CloudFormation テンプレートで、 GitHub 上の MkDocs サイトを AWS Amplify を使ってデプロイし、 カスタムドメイン tutorial.yourdomain.com で公開する構成を定義しています。

template-cf.yml
Parameters:
  GitHubAccessToken:
    Type: String
    NoEcho: true
    Description: GitHub personal access token

Resources:
  MyAmplifyApp:
    Type: AWS::Amplify::App
    Properties:
      Name: static-website
      Repository: https://github.com/your-name/your-repo
      AccessToken: !Ref GitHubAccessToken
      BuildSpec: |
        version: 1.0
        frontend:
          phases:
            preBuild:
              commands:
                - pip install mkdocs-material
            build:
              commands:
                - mkdocs build
          artifacts:
            baseDirectory: site
            files:
              - '**/*'

  AmplifyBranch:
    Type: AWS::Amplify::Branch
    Properties:
      AppId: !GetAtt MyAmplifyApp.AppId
      BranchName: main

  AmplifyDomain:
    Type: AWS::Amplify::Domain
    Properties:
      AppId: !GetAtt MyAmplifyApp.AppId
      DomainName: yourdomain.com
      SubDomainSettings:
        - Prefix: tutorial
          BranchName: main

a. パラメータ定義

Parameters:
  GitHubAccessToken:
    Type: String
    NoEcho: true
    Description: GitHub personal access token
  • GitHubAccessToken: GitHub リポジトリへアクセスするための個人アクセストークン(PAT)をパラメータとして受け取ります。
  • NoEcho: true により、CloudFormation コンソール上で値が表示されないように保護されています。

b. リソース定義

  1. MyAmplifyApp — Amplify アプリの作成

    MyAmplifyApp:
    Type: AWS::Amplify::App
    Properties:
        Name: static-website
        Repository: https://github.com/BobbyTumur/static-website
        AccessToken: !Ref GitHubAccessToken
    
    • GitHub リポジトリから static-website という名前で Amplify アプリを作成。
    • AccessToken によりプライベートリポジトリも扱えるようになる。

    BuildSpec:

        BuildSpec: |
        version: 1.0
        frontend:
            phases:
            preBuild:
                commands:
                - pip install mkdocs-material
            build:
                commands:
                - mkdocs build
            artifacts:
            baseDirectory: site
            files:
                - '**/*'
    
    • mkdocs-material をインストールし、mkdocs build で静的サイトを生成。
    • site/ フォルダの中身をデプロイ対象とする。
  2. AmplifyBranch — デプロイするブランチの指定

    AmplifyBranch:
    Type: AWS::Amplify::Branch
    Properties:
        AppId: !GetAtt MyAmplifyApp.AppId
        BranchName: main
    
    • GitHub の main ブランチを Amplify アプリに紐づけ、ブランチ単位での自動ビルド/デプロイが可能になります。
  3. AmplifyDomain — カスタムドメインの設定

    AmplifyDomain:
    Type: AWS::Amplify::Domain
    Properties:
        AppId: !GetAtt MyAmplifyApp.AppId
        DomainName: yourdomain.com
        SubDomainSettings:
        - Prefix: tutorial
            BranchName: main
    
    • tutorial.yourdomain.commain ブランチに割り当てます。
    • これにより、https://tutorial.yourdomain.com でサイトが公開されます。

    注意

    このドメインを使用するには、事前に Route 53 や外部の DNS プロバイダで DNS 設定を行う必要があります。 ドメイン取得していない場合は、AmplifyDomainのリソースを削除してください。


CloudFormation実行

$ aws cloudformation deploy \
--template-file template-cf.yml \ # (1)!
--stack-name amplify-deploy \ # (2)!
--parameter-overrides GitHubAccessToken=$(cat ~/.github_amplify_token) \ # (3)!
--capabilities CAPABILITY_IAM

Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - amplify-deploy
  1. CFのテンプレート作成で作成したテンプレートを指定
  2. CloudFormationのスタックの名付け
  3. Personal Access Token 作成したトークンの指定

cloudformation

amplify-ui

ウェブへアクセス

website


クリーンアップ

$ aws cloudformation delete-stack --stack-name amplify-deploy
$ rm ~/.github_amplify_token

clean-up

完了🔥

上記において、Amplify **がリポジトリへアクセスできるよう、GitHub** にて Amplify App をインストールしました。 また、そのアクセスのための認証情報として PAT (Personal Access Token) を発行・ダウンロードしました。 この PAT を CloudFormation テンプレートに含めることで、CloudFormation によってスタックおよび Amplify アプリを正常に作成・実行することができました。

参照リンク: