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