🐈

そのIaC、本当に自動化できてる? 〜terraform applyはもう叩かない〜

2023/10/11に公開

Terraform CDK GitHub Action の紹介記事です。IaC管理の手間を削減できる上、コピペで利用可能なコードが公開されているので紹介していきます。

https://github.com/hashicorp/terraform-cdk-action

CDK for Terraform(cdktf)の基礎知識

通常のTerraformでは、HCL(Hashicorp Configuration Language) という言語を用いてインフラを記述します。

それに対してcdktfでは、TypescriptやGoといった言語でインフラを記述することができ、使い慣れた言語でのIaC管理が可能になります。

さらに、利用する可能性のあるリソースを事前に生成することができます。
そのため、importして利用する際に型によるサポートを受けることができます。

コード上で構築したインフラを環境に反映させるには、deployコマンドを利用します。

cdktf deploy

2回目以降のdeployが面倒

せっかくインフラをコードで管理しているのだから、deployも自動化してしまいたいものです。

Terraform CDK GitHub Actionを利用することで、プルリクエストの作成時にplanして、マージ時にdeploy(apply)できるようになります。

以下に、手順を説明します。

準備

インフラの環境は、すでにcdktfで管理されているものとします。

cdktfに馴染みがなく、実際に手を動かしたい方は、公式のチュートリアルを参考にしてください。

https://developer.hashicorp.com/terraform/tutorials/cdktf/cdktf-build

Terraform CloudからAPI Tokenを取得する

(トップページ) > User Settings > Tokensから、API Tokenを取得することができます。

CLIでterraform loginを実行するときにもこのページでAPI Tokenを取得するので、すでに生成されたTokenがあるかもしれません。

このTokenを、TF_API_TOKENとしてリポジトリの環境変数に登録します。

plan・deploy用のyamlファイルを作成する

Terraform CDK Action のREADMEに、Plan, Apply, Synthesize用のサンプルyamlファイルが用意されています。

例えばPlanのyamlファイルはこのようになっており、stackNameを書き換えることでそのまま利用できます。

https://github.com/hashicorp/terraform-cdk-action

name: "Comment a Plan on a PR"

on: [pull_request]

permissions:
  contents: read
  pull-requests: write

jobs:
  terraform:
    name: "Terraform CDK Diff"
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - uses: actions/setup-node@v3
        with:
          node-version: 18

      - name: Install dependencies
        run: yarn install

      - name: Generate module and provider bindings
        run: npx cdktf-cli get

      # Remove this step if you don't have any
      - name: Run unit tests
        run: yarn test

      - name: Run Terraform CDK
        uses: hashicorp/terraform-cdk-action@v0.1
        with:
          cdktfVersion: 0.17.0
          terraformVersion: 1.5.2
          mode: plan-only
          stackName: my-stack
          terraformCloudToken: ${{ secrets.TF_API_TOKEN }}
          githubToken: ${{ secrets.GITHUB_TOKEN }}

使ってみる

あとはPRを作成し、マージするだけです。

自動的にplanが実行され、マージするとその変更が実環境に反映されました。

GitHubで編集を提案
フィシルコム

Discussion