AWS Amplify Hosting に GitHub からフロントエンドアプリケーションをデプロイする構成を AWS CloudFormation で構築する機会があった.AWS Amplify Hosting はコンソールだと比較的簡単にデプロイできるけど,今回は AWS CloudFormation と GitHub の Personal Access Tokens (PAT) を組み合わせてデプロイしたため,検証時に使ったテンプレートを汎化してまとめておく❗️
ドキュメントとしては以下を読んでおくと良いと思う💡AWS Amplify Hosting と GitHub Apps を連携する手順がまとまっている📝
GitHub Apps (AWS Amplify)
まず最初に AWS Amplify の GitHub Apps をセットアップする.例えば「東京リージョン」なら https://github.com/apps/aws-amplify-ap-northeast-1/installations/new
にアクセスして,Permissions を与えておく.リポジトリを選択する設定では,基本的には All repositories ではなく Only select repositories で対象リポジトリを個別に選択するのが良いと思う👌
Personal Access Tokens (PAT)
次に AWS CloudFormation で使う GitHub の Personal Access Tokens (PAT) を取得する.現時点だとトークンは classic
と Fine-grained (Beta)
の2種類があるけど,今回はドキュメントに載っている手順に沿って classic
を使う.重要なのは Select scopes でトークンに指定するスコープで admin:repo_hook
を許可しておくところ❗️
ちなみに GitHub ドキュメントだと 可能な限り、personal access tokens (classic) ではなく fine-grained personal access token を使用することをお勧めします。
と書いてある.
AWS CloudFormation テンプレート
最後は AWS CloudFormation を使って AWS Amplify Hosting アプリケーションをデプロイする.ポイントは AccessToken
に取得した GitHub の Personal Access Tokens (PAT) を設定するところ❗️しかし,テンプレートに直接 Personal Access Tokens (PAT) を設定するのは避けるべきで,今回は以下の3種類のテンプレートを準備してみた❗️
- AWS Secrets Manager
- AWS Systems Manager Parameter Store
- Parameters (NoEcho)
1. AWS Secrets Manager
AWS Secrets Manager を使うと Personal Access Tokens (PAT) の管理を外部化できて,暗号化もできて,選択肢の中では1番良いと思う✌️今回は GitHubPat
というシークレットを登録した.
AWSTemplateFormatVersion: 2010-09-09 Resources: AmplifyApp: Type: AWS::Amplify::App Properties: Name: sandbox-app-secrets-manager Repository: https://github.com/kakakakakku/xxxxx AutoBranchCreationConfig: EnableAutoBranchCreation: true EnableAutoBuild: true EnableBranchAutoDeletion: true AccessToken: '{{resolve:secretsmanager:GitHubPat:SecretString:GitHubPat}}' MasterBranch: Type: AWS::Amplify::Branch Properties: AppId: !GetAtt AmplifyApp.AppId BranchName: master EnableAutoBuild: true
2. AWS Systems Manager Parameter Store
AWS Systems Manager Parameter Store を使っても Personal Access Tokens (PAT) の管理を外部化できるけど,SecureString
のパラメータを埋め込めるサービスは一部しかなく制約がある.よって,今回は String
で GitHubPat
というパラメータを登録した.
AWSTemplateFormatVersion: 2010-09-09 Resources: AmplifyApp: Type: AWS::Amplify::App Properties: Name: sandbox-app-secrets-manager Repository: https://github.com/kakakakakku/xxxxx AutoBranchCreationConfig: EnableAutoBranchCreation: true EnableAutoBuild: true EnableBranchAutoDeletion: true AccessToken: '{{resolve:ssm:GitHubPat}}' MasterBranch: Type: AWS::Amplify::Branch Properties: AppId: !GetAtt AmplifyApp.AppId BranchName: master EnableAutoBuild: true
3. Parameters (NoEcho)
選択肢の中で一番簡単に実現できるのは AWS CloudFormation の Parameters で,NoEcho
を設定することでパラメータを *****
としてマスキングできる(あくまで表示上).
AWSTemplateFormatVersion: 2010-09-09 Parameters: GitHubPat: Type: String Default: '' NoEcho: true Resources: AmplifyApp: Type: AWS::Amplify::App Properties: Name: sandbox-app-parameters-noecho Repository: https://github.com/kakakakakku/xxxxx AutoBranchCreationConfig: EnableAutoBranchCreation: true EnableAutoBuild: true EnableBranchAutoDeletion: true AccessToken: !Ref GitHubPat MasterBranch: Type: AWS::Amplify::Branch Properties: AppId: !GetAtt AmplifyApp.AppId BranchName: master EnableAutoBuild: true
まとめ
コンソールだと比較的簡単にデプロイできるのに AWS CloudFormation 化をしようとすると悩んだりすることはよくある❗️今回は CloudFormation と GitHub の Personal Access Tokens で AWS Amplify Hosting アプリケーションをデプロイするテンプレートを3種類準備してみた.誰かの参考になれば〜💡