[OpenTaco入門]Pull Requestのコメントでterraform plan・applyを実行してみる

[OpenTaco入門]Pull Requestのコメントでterraform plan・applyを実行してみる

2025.12.28

OpenTacoとは

OpenTacoは、オープンソースの「Terraform向けCI/CDオーケストレーター」です。

似た用途のツールとして、HCP TerraformやAtlantis等が挙げられます。

OpenTacoにはTerraformワークフローを管理するための、以下の機能があります。

  • State管理
  • Pull RequestベースのTerraform実行の自動化
    • 例: Pull Request作成時に自動Plan、マージ時に自動Apply
  • ドリフト検出
  • リモート実行

https://opentaco.dev/

以前は、diggerという名称で2025年11月にOpenTacoに名称が変わりました。

digger時代の名残は設定ファイル(digger.yml)等からも確認できます。

余談ですが、TacoはTerraform Automation and COlaboration Softwareの略のようです。

TACOS stands for Terraform Automation and COlaboration Software

Spice up your Infrastructure as Code with TACOS
から引用

やってみた

以下の手順をやってみます。

今回は、TerraformとAWSのチュートリアルをやってみます。

他にも、OpenTofuやTerragruntを使ったチュートリアルも用意されていました。

https://docs.opentaco.dev/ce/getting-started/with-terraform

以下のサンプルリポジトリをForkしてチュートリアルを行いました。

https://github.com/diggerhq/quickstart-actions-aws

OpenTacoアカウントの作成

以下にアクセスして、OpenTacoアカウントを作成します。

クレジットカード登録等は不要です。

https://otaco.app/

ログインに成功すると以下の画面が表示されます。

OpenTaco_-_Future_of_IaC_is_open.png

GitHubアプリをインストール

以下のリンクからOpenTaco用のGitHubアプリをリポジトリにインストールします。

OpenTACO GitHUbアプリ

Installing_OpenTaco_Cloud.png

リポジトリのSettingsIntegrationsOpenTaco Cloudが確認できればOKです。

GitHub_Apps.png

AWS認証情報をGitHub Actions Secretsに登録

手順中では、IAMアクセスキーを利用しています。

IAM Roleでも可能なので、IAM Roleを使った認証に変えてやってみました。

GitHub Actions用のIAM Roleの作成は以下のモジュールを使うと楽です。

https://github.com/terraform-module/terraform-aws-github-oidc-provider

使用例
module "github_oidc" {
  source  = "terraform-module/github-oidc-provider/aws"
  version = "2.2.1"

  role_name                 = var.role_name
  role_description          = "Role for GitHub Actions OIDC"
  repositories              = var.repositories
  oidc_role_attach_policies = var.attach_policies
}

作成したIAM RoleのARNをGitHub Actionsシークレットに登録します。

gh secret set AWS_ROLE_ARN --body arn:aws:iam::0123456789:role/github-actions-role

Terraformコード修正

バックエンドの設定を環境に合わせて修正します。

具体的には、backend.bucket部分の修正が必要です。

新規にStatefile用のS3バケットを作って指定するか、既存のStatefile用のバケットを指定してください。

S3バケットの配置リージョンによっては、backend.regionの変更も必要です。

忘れずに修正しましょう。

prod/main.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "5.24.0"
    }
  }
    backend "s3" {
-    bucket = "digger-s3backend-quickstart-aws"              # Change if a different S3 bucket name was used for the backend
+    bucket = "<your statefile bucket>"

    /* Un-comment to use DynamoDB state locking
    dynamodb_table = "digger-locktable-quickstart-aws"      # Change if a different DynamoDB table name was used for backend
    */
    key    = "terraform/state"
    region = "us-east-1"
  }
}

GitHub Actionsワークフローファイルを修正

フォークしたリポジトリで作業します。

GitHub ActionsワークフローファイルではIAMアクセスキーを使っているため、IAM Roleに置き換えます。

.github/workflows/digger_workflow.yml
name: Digger Workflow

on:
  workflow_dispatch:
    inputs:
      spec:
        required: true
      run_name:
        required: false

run-name: '${{inputs.run_name}}'

jobs:
  digger-job:
    runs-on: ubuntu-latest
    permissions:
      contents: write      # required to merge PRs
      actions: write       # required for plan persistence
      id-token: write      # required for workload-identity-federation
      pull-requests: write # required to post PR comments
      issues: read         # required to check if PR number is an issue or not
      statuses: write      # required to validate combined PR status

    steps:
      - uses: actions/checkout@v4
      - name: ${{ fromJSON(github.event.inputs.spec).job_id }}
        run: echo "job id ${{ fromJSON(github.event.inputs.spec).job_id }}"
      - uses: diggerhq/digger@vLatest
        with:
          digger-spec: ${{ inputs.spec }}
          setup-aws: true
          setup-terraform: true
          terraform-version: 1.5.5
+          aws-role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
-          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
-          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        env:
          GITHUB_CONTEXT: ${{ toJson(github) }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

OpenTaco設定ファイル確認

digger.ymlはOpenTacoの設定ファイルです。

digger.yml
projects:
- name: production
  dir: prod

OpenTacoではプロジェクトという概念がありTerraformコードの各ディレクトリと対応しています。

これにより、1つのリポジトリで複数のTerraform環境を管理できます。

prod配下にTerraformコードがあるため、prodディレクトリがproductionという名前のプロジェクトとして設定されています。

このファイルはリポジトリのルートに配置する必要があります。

https://docs.opentaco.dev/ce/reference/digger.yml

GUI上からはProjectは以下のように確認できます。

OpenTaco_-_Future_of_IaC_is_open.png

動作確認

prod配下のTerraformコードに任意の変更を加えて、Pull Requestを作成します。

Pull Requestを作成すると、OpenTacoによってGitHub Actionsが実行されて自動でPlan結果等がコメントされました。

Remove__Test__tag_from_VPC_resource_in_main_tf_by_msato0731_·_Pull_Request__1_·_msato0731_quickstart-actions-aws.png

Remove__Test__tag_from_VPC_resource_in_main_tf_by_msato0731_·_Pull_Request__1_·_msato0731_quickstart-actions-aws.png

Plan結果が問題なかったので、applyしてみます。

Applyする際は、Pull Requestにdigger applyとコメントします。

Remove__Test__tag_from_VPC_resource_in_main_tf_by_msato0731_·_Pull_Request__1_·_msato0731_quickstart-actions-aws.png

Applyの成功も確認できました。

おわりに

OpenTacoに入門してみました。

コメントOpsのTerraformワークフローを試してみました。

GitHub Actionsを一から構築する場合と比較して、セットアップステップが削減されました。

管理用のサーバーを自分で建てなくて良い点も嬉しいですね。

HCP TerraformやAtlantisとの比較も今後やっていきたいと思います。

この記事をシェアする

FacebookHatena blogX

関連記事