AWSを使ってHugoを自動デプロイする

AWSを使ってHugoを自動デプロイする



今までは、手動でデプロイしていましたが、やはりナウイ感じにしようと思いAWSのサービスを使ってgit pushすると自動でデプロイできるように設定します。

今回は、CodeBuild,CodePipelineの設定をメモしておきます。

使うもの

  • CodeCommit(フルマネージド型のソースコントロールサービス)
  • CodeBuild(完全マネージ型ビルドサービス)
  • CodePipeline(継続的デリバリーとリリースの自動化)



CodeBuildの設定

まずはbuildspec.ymlを作成します。buildspec.ymlはフォルダ直下におきます。

AWSを使ってHugoを自動デプロイする

僕の場合は、以下のようにしました。CloudFrontのキャッシュ削除もしようと思ったのですが、CloudFrontはキャッシュを削除する度にお金がかかるのでやめました。

オペレーティングシステムはUbuntuです。

version: 0.2

env:
  variables:
    LC_CTYPE: "C.UTF-8"
    hugo_version : "0.36.1"
    bucket_name: "bokunonikki.net"

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
    post_build:
       commands:
            - echo "S3 Upload Beginning"
            - aws s3 sync --delete ./public s3://${bucket_name}
            - echo "S3 Upload Complete"

コンソールからCodeBuildにいきます。プロジェクトの作成を選択。

AWSを使ってHugoを自動デプロイする



以下のように作成します。

AWSを使ってHugoを自動デプロイする

AWSを使ってHugoを自動デプロイする



S3でbuildするのですが、その際にCodeBuildがS3にアクセスできるようにcodebuild-blog-service-roleにポリシーのアタッチをします。

コンソールからIAMを選択します。

ロールに先ほど作ったcodebuild-blog-service-roleがあると思います。

AWSを使ってHugoを自動デプロイする



codebuild-blog-service-roleを選択すると以下のような詳細が出てきます。

AWSを使ってHugoを自動デプロイする



ポリシーのアタッチを選択し、AmazonS3FullAccessを追加します。

AWSを使ってHugoを自動デプロイする



CodeBuildに戻り、ビルドをすると成功するはずです。

AWSを使ってHugoを自動デプロイする



CodePipelineの設定

次はCodePipelineの設定を行います。

コンソールからCodePipelineに移動し、パイプラインの作成を選択。以下のように設定していきます。

AWSを使ってHugoを自動デプロイする



AWSを使ってHugoを自動デプロイする



AWSを使ってHugoを自動デプロイする



AWSを使ってHugoを自動デプロイする



AWSを使ってHugoを自動デプロイする



AWSを使ってHugoを自動デプロイする



AWSを使ってHugoを自動デプロイする



AWSを使ってHugoを自動デプロイする



AWSを使ってHugoを自動デプロイする



これでCodeCommitにpushすると自動でデプロイできるようになりました。

個人のブログ程度ですとAWSの無料枠の範囲で収まると思います。そんなに更新しないし。

有料になったとしてもたかがしれてるのでHugoでメディア運営をするというのも面白いかもしれません。ライターの人にgitを覚えてもらえばいいわけですから。

gitで管理できるのでWordPressとかよりも効率的な運営ができそうです。

See Also