STEP05:自動デプロイ
(上の日付は記事の並べ替えに使っているだけです。更新日は下をご覧ください)
ソースをAWS CodeCommitで管理するようにして、
ローカルから記事をgitでpushすると自動でデプロイされる仕組みを構築します。
■AWS CodeCommit設定
1. IAMユーザー作成
AWS管理コンソール利用
- IAMで グループ作成
・次のポリシーを付与:AWSCodeCommitFullAccess - IAMで 上記グループにユーザー作成
- 上記ユーザーの 認証タブにある「AWS CodeCommit の HTTPS Git 認証情報」で「認証情報を生成」
・するとユーザIDとパスワードが生成される(これをgitで利用)
2. CodeCommitでリポジトリ作成
AWS管理コンソール利用
- CodeCommitで「リポジトリ作成」
3. gitクライアントインストール
Macのgitクライアントとして Sourcetreeを使います
- Sourcetreeダウンロード(https://www.sourcetreeapp.com )
- ダウンロードしたSourcetree.appをアプリケーションフォルダへ移動
- ダブルクリックすると「開発元が未確認」と言われるので、Cotrolキーを押しながら「開く」
・「Optional Bitbucket Account」何も選択せずに続行
・「GitとMercurialのグローバル作成者の詳細を設定する」チェックなしで完了
4. ソースをCodeCommitに登録
- Sourcetreeの画面で 新規>URLからクローン
- ソースURLには以下の値をコピーしてくる
・AWS CodeCommitのリポジトリ画面で URLのクローン>HTTPSのクローン - 自動で保存先のパスと名前が入力され、ユーザ名・パスワード入力のダイアログが開く
- IAMユーザ作成時に作ったGit認証情報のユーザ名・パスワードを入力
- 3回くらいパスワード入力を求められる
- Soucrtreeが開く
- ローカルのリポジトリにMy_Website下のファイルを全て入れて、コミット、プッシュ
■AWS CodeBuild設定
1. buildspec.yml作成
リポジトリ直下に配置し、コミット、プッシュしておく
buildspec.yml
version: 0.2
env:
variables:
LC_CTYPE: "C.UTF-8"
hugo_version : "0.69.2"
bucket_name: "バケット名"
distribution_id: "CloudFrontのディストリビューションID"
phases:
install:
commands:
- pip install awscli --upgrade --user
- wget https://github.com/gohugoio/hugo/releases/download/v${hugo_version}/hugo_${hugo_version}_Linux-64bit.deb
- dpkg -i hugo_${hugo_version}_Linux-64bit.deb
build:
commands:
- hugo --buildFuture --environment production
post_build:
commands:
- echo "S3 Upload Beginning"
- aws s3 sync --delete ./public s3://${bucket_name}
- echo "S3 Upload Complete"
- echo "Clear CloudFront Beginning"
- aws cloudfront create-invalidation --distribution-id ${distribution_id} --paths "/*"
- echo "Clear CloudFront Complete"
HUGOでビルドしたあと、S3にファイルを送り、CloudFrontのキャッシュをクリアしてます。
2. CodeBuildでビルドプロジェクト作成
AWS管理コンソール利用
- CodeBuildで「ビルドプロジェクトを作成する」
- プロジェクトの設定:
・プロジェクト名:適当 - ソース:
・ソースプロバイダ:AWS CodeCommit
・リポジトリ:作成したリポジトリ
・ブランチ:master - 環境:
・環境イメージ:マネージド型イメージ
・オペレーティングシステム:Ubuntu
・ランタイム:Standard
・イメージ:一番新しいそうなやつ(今回はaws/codebuild/standard:4.0)
・イメージのバージョン:一番新しいやつ
・環境タイプ:Linux
・サービスロール:新しいサービスロール
・ロール名:自動でできてる名前をそのまま利用 - BuildSpec:
・ビルド仕様:buildspecファイルを使用する - アーティファクト:
・タイプ:Amazon S3
・バケット名:今回使うバケット名
・名前:適当(今回はbuild_post) - 他は全部デフォルトのまま「ビルドプロジェクトを作成する」
3. IAMのロールにポリシーをアタッチ
AWS管理コンソール利用
- IAMで ロールから前ステップで生成されたサービスロール名を選択
- 「AmazonS3FullAccess」をアタッチ
ここまでやると、CodeBuildで 前ステップで作ったビルドプロジェクトをビルドすると成功する
■AWS CodePipeline設定
1. CodePipelineでパイプライン作成
AWS管理コンソール利用
- CodePipelineで「パイプラインを作成する」
- パイプラインの設定:
・パイプライン名:適当
・サービスロール:新しいサービスロール
・ロール名:自動でできてる名前をそのまま利用 - ソース:
・ソースプロバイダー:AWS CodeCommit
・リポジトリ名:選択
・ブランチ名:選択
・検出オプションを変更する:Amazon CloudWatch Events (推奨) - 構築する
・プロバイダーを構築する:AWS CodeBuild
・プロジェクト名:選択 - デプロイ
・「導入段階をスキップ」 - 内容確認後、「パイプラインを作成する」
最初、ここでSourceが失敗して、詳細を見ると以下のメッセージが出ていました。
「無効なアクション設定(中略)
Make sure the encryption key is available, and then try again.
Error:The KMS default master key for CodeCommit ‘alias/aws/codecommit’ is unavailable in your account」
十数分放っておくと、なぜかエラーがなくなってました
以上で出来上がり!
■参考URL
<自動デプロイ>
AWSを使ってHugoを自動デプロイする
https://bokunonikki.net/post/2018/0319_hugo_auto_deploy/
<CodeCommit>
【AWS】CodeCommit用のIAMユーザを作成する手順
https://blog.proglearn.com/2019/12/27/
<CodeBuild>
Hugoでの静的サイトのデプロイをCircleCIからAWS CodeBuildに変更してみました
https://blog.kozakana.net/2019/10/change-hugo-deployment-from-circleci-to-codebuild/
HUGOの更新作業をAWS CodeBuildを使って自動化する
https://qiita.com/shigeru-yokochi/items/abf15bc37d7b93ef2bd8
<Sourcetree>
誰でも簡単!GitHubで管理するためのSourcetreeの最低限の使い方
https://haniwaman.com/sourcetree/
新規作成:2020/05/04
最終更新:2020/05/04