dehio3’s diary

仕事、生活、趣味のメモ

GitHub Actions で terraform plan/apply をCI/CDしてみた

f:id:dehio3:20191123083858p:plain

はじめに

11/13 の GitHub Univers にて GitHub Actions が一般公開されました!

github.blog

Terraformで構成管理している個人のAWS環境はCircel CIで CI/CD していたのですが、 GitHub Actions でもCI/CD できるようになった為、初心者向けの実行手順です。

前提条件

既にGitHubリポジトリで構成管理しており、リポジトをcloneすればローカル環境でplan/applyできる状態になっている事が前提です。

(terraformやproviderなどの各種初期設定は既に作成済みの想定)

作業手順

workflowの作成(plan)

リポジトリにてActions画面を開きます f:id:dehio3:20191123094335p:plain

新しいworkflowを作成します f:id:dehio3:20191123094749p:plain

デフォルトのworkflowファイルが自動で作成されるます
ますはplanを実行するworkflowを作成したいので、ファイル名を変更しておきます f:id:dehio3:20191123095031p:plain

workflowの定義については、hashicorpが提供するGitHub Actionsを使います github.com f:id:dehio3:20191123212726p:plain

ただし、AWSアクセスキーについてはリポジトリ内に混入させたくないので、変数として取得するように、以下の変数を追加します

AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

f:id:dehio3:20191123203448p:plain

AWSアクセスキーの設定について(追記)

AWSアクセスキーの設定は公式のActionsがあるのでそっちを使った方が、ここのSTEPで変数を定義しないくてもいいので良さげです。

github.com

    steps:
      - name: 'Checkout'
        uses: actions/checkout@master
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ap-northeast-1

Secretsを登録

workflowにて追加したAWSアクセスキーをSecretsに追加します f:id:dehio3:20191123205527p:plain

AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYを追加します f:id:dehio3:20191126230452p:plain

f:id:dehio3:20191126230546p:plain

設定は以上で完了です

アクションを実行(plan)

workflowの「on:」の部分がトリガーの定義となるので、pull requestを作成します f:id:dehio3:20191123212900p:plain

pull requestを作成すると自動でwrokflowが実行されます f:id:dehio3:20191123211205p:plain

workflowが成功するとplan結果がコメントとして追加され、pull requestのcheckがpassedになり、Megeできる状態になります f:id:dehio3:20191123211811p:plain

「Show Output」をクリックするとplan結果が展開されて確認できます f:id:dehio3:20191123212305p:plain

Actionsの画面を開くと実行されたworkflowの一覧が表示されます f:id:dehio3:20191123213458p:plain

workflowを選択すると、処理ログを確認できます f:id:dehio3:20191123213833p:plain

workflowの作成(apply)

planのworkflowが作成できたので、applyのworkflowを作成します

ファイル名をapply.ymlにし、以下のworkflowをコピーします

planとの差分は以下です

  • アクションの実行条件をmasterブランチへのpushに変更
  • 実行するstepをinitapplyに変更

f:id:dehio3:20191126222443p:plain

アクションを実行(apply)

実行の条件がmasterへのpushの為、pull requestをMergeします f:id:dehio3:20191126223905p:plain

Actionsの画面を開き、applyのworkflowを開きます f:id:dehio3:20191126224253p:plain

plan同様に処理ログを確認します f:id:dehio3:20191126224741p:plain

まとめ

公式のworkflowが存在する為、簡単に実装する事ができました。

Circel CIで実装する場合は、planの結果をレビューGitHubの画面上で完結できるようにtfnotifyを使っていましたが、このツールを使わずにGitHubのコメントとしてplan結果を表示できました。

tfnotifyを利用する場合は、GitHubのtokenの発行が必要でしたがActions では不要な為、tokenの管理や発行も不要です。

バージョンアップも頻繁に行われている為、今後に期待できるなと感じました。

Releases · hashicorp/terraform-github-actions · GitHub

GitHubのみで実装できるというのが何よりのポイントなので、是非GitHubでコードを管理している方は試してみてください!