はじめに
11/13 の GitHub Univers にて GitHub Actions が一般公開されました!
Terraformで構成管理している個人のAWS環境はCircel CIで CI/CD していたのですが、 GitHub Actions でもCI/CD できるようになった為、初心者向けの実行手順です。
前提条件
既にGitHubリポジトリで構成管理しており、リポジトをcloneすればローカル環境でplan/applyできる状態になっている事が前提です。
(terraformやproviderなどの各種初期設定は既に作成済みの想定)
作業手順
workflowの作成(plan)
リポジトリにてActions画面を開きます
新しいworkflowを作成します
デフォルトのworkflowファイルが自動で作成されるます
ますはplanを実行するworkflowを作成したいので、ファイル名を変更しておきます
workflowの定義については、hashicorpが提供するGitHub Actionsを使います
github.com
ただし、AWSアクセスキーについてはリポジトリ内に混入させたくないので、変数として取得するように、以下の変数を追加します
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWSアクセスキーの設定について(追記)
AWSアクセスキーの設定は公式のActionsがあるのでそっちを使った方が、ここのSTEPで変数を定義しないくてもいいので良さげです。
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に追加します
AWS_ACCESS_KEY_ID
とAWS_SECRET_ACCESS_KEY
を追加します
設定は以上で完了です
アクションを実行(plan)
workflowの「on:」の部分がトリガーの定義となるので、pull request
を作成します
pull requestを作成すると自動でwrokflowが実行されます
workflowが成功するとplan結果がコメントとして追加され、pull requestのcheckがpassedになり、Megeできる状態になります
「Show Output」をクリックするとplan結果が展開されて確認できます
Actionsの画面を開くと実行されたworkflowの一覧が表示されます
workflowを選択すると、処理ログを確認できます
workflowの作成(apply)
planのworkflowが作成できたので、applyのworkflowを作成します
ファイル名をapply.yml
にし、以下のworkflowをコピーします
planとの差分は以下です
- アクションの実行条件を
masterブランチへのpush
に変更 - 実行するstepを
init
とapply
に変更
アクションを実行(apply)
実行の条件がmaster
へのpush
の為、pull requestをMergeします
Actionsの画面を開き、applyのworkflowを開きます
plan同様に処理ログを確認します
まとめ
公式のworkflowが存在する為、簡単に実装する事ができました。
Circel CIで実装する場合は、planの結果をレビューGitHubの画面上で完結できるようにtfnotifyを使っていましたが、このツールを使わずにGitHubのコメントとしてplan結果を表示できました。
tfnotifyを利用する場合は、GitHubのtokenの発行が必要でしたがActions では不要な為、tokenの管理や発行も不要です。
バージョンアップも頻繁に行われている為、今後に期待できるなと感じました。
Releases · hashicorp/terraform-github-actions · GitHub
GitHubのみで実装できるというのが何よりのポイントなので、是非GitHubでコードを管理している方は試してみてください!