GitHub ActionsでS3にデプロイする!

GitHub ActionsでS3にデプロイする!

Photo by Hal Gatewood / Unsplash

2019年11月にGitHub Actionsが正式リリースされました!

GitHubでベータ版として公開されていたGitHub Actionsという機能が、GitHub主催のイベントGitHub Universe 2019で正式版としてリリースされました。
GitHub Actionsとは、GitHub上でワークフローを動かせるというものです。
ymlファイルでワークフローを定義し、pushやissue作成などをトリガーとして起動することができます。
リポジトリページのここにあるやつです↓

コワーキングスペースHarborS表参道オープンしました!

時を同じくしてアンチパターン社のオフィス兼コワーキングスペースが表参道にオープンしました!
https://harbors.anti-pattern.co.jp/

とにかくキレイでおしゃれ!

働きやすくて

カフェもあって

テラス席もある!

テラスからの夜景は最高なんです!!(個人の感想です)

エンジニアにとって働きやすい環境を提供するために、コワーキングスペースとしても運営しており、会員募集のサイトを作ったのですが、毎回のデプロイが大変なので、GitHub Actionsで自動化をしました!

GitHub ActionsでS3にデプロイする

会員募集サイトの構成は、CloudFrontでS3をオリジンに設定した構成ですので、S3の更新と、CloudFrontのキャッシュクリアの作業が必要です。

まず、AWSでデプロイ専用のS3とCloudFrontの権限を付与したIAM ユーザーを作成します。
アクセスキーとシークレットキーを控えておきます。

GitHub MarketPlaceページに、ワークフローのテンプレートが多数用意されているのでそれを利用します。

AWS S3 Syncというのがちょうど良さそうです。
ワークフローを追加したいリポジトリーのActionページを開きます。
Set up workflow yourself をクリック

リポジトリ/.github/workflows 配下にymlファイルが作られるので、そこにワークフローを設定します。ファイル名は拡張子が.ymlであればお好きな名前でOKです。

name: AWS S3 Sync

on: 
  push:
    branches:
      - master_for_aws

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v1
        with:
          fetch-depth: 1

      - name: Publish to AWS S3
        uses: opspresso/action-s3-sync@master
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: "ap-northeast-1"
          FROM_PATH: "./docs"
          DEST_PATH: "s3://{s3のバケット名・パスを入れる}"
          OPTIONS: "--acl public-read"

3行目〜
master_for_awsブランチにpush(merge、commit)されたときにワークフローを動かす という設定。

20行目・21行目は、AWSで作成したIAMユーザのシークレットキー、アクセスキーをGitHubのSecretsから登録します。

22行目はS3に利用しているリージョンを入力
23行目はGitHubのどこのディレクトリ配下をS3に配布するかを入力します。
「docs」というディレクトリ配下にしておくと、GitHub Pagesを利用するときにちょっと便利になります。

masterからブランチを切って追記修正、masterにマージ、GitHub Pagesで修正内容を確認、master_for_awsにマージしてワークフローが発火、デプロイされるという流れで運用しています。

master_for_awsブランチにマージすると、Actionsタブでワークフローが動き出しているのを確認できます。

どこかで失敗しても、ログで確認できます。
今回使ったワークフローは、S3バケットからたどってCloudFrontのキャッシュクリアをしてくれているので、CloudFrontを設定していないとエラーが発生します。

夢広がるGitHub Actions

ワークフローのトリガーはとにかく沢山あるみたいでして、色々と活用できそうです。

ワークフローのトリガー
GitHub Actions を用いて issue が更新されたら LINE に通知する方法
GitHub ActionsでPull Requestに自動的にラベルを付与してレビューをしやすくする

最後に

とにかく、エンジニア向けコワーキングスペースHarborS表参道は最高ですので、(個人の感想です)皆さんぜひ見学に来てみてください!
HarborS表参道

おしまい