[OpenTaco入門]Pull Requestのコメントでterraform plan・applyを実行してみる
OpenTacoとは
OpenTacoは、オープンソースの「Terraform向けCI/CDオーケストレーター」です。
似た用途のツールとして、HCP TerraformやAtlantis等が挙げられます。
OpenTacoにはTerraformワークフローを管理するための、以下の機能があります。
- State管理
- Pull RequestベースのTerraform実行の自動化
- 例: Pull Request作成時に自動Plan、マージ時に自動Apply
- ドリフト検出
- リモート実行
以前は、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を使ったチュートリアルも用意されていました。
以下のサンプルリポジトリをForkしてチュートリアルを行いました。
OpenTacoアカウントの作成
以下にアクセスして、OpenTacoアカウントを作成します。
クレジットカード登録等は不要です。
ログインに成功すると以下の画面が表示されます。

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

リポジトリのSettings→IntegrationsでOpenTaco Cloudが確認できればOKです。

AWS認証情報をGitHub Actions Secretsに登録
手順中では、IAMアクセスキーを利用しています。
IAM Roleでも可能なので、IAM Roleを使った認証に変えてやってみました。
GitHub Actions用のIAM Roleの作成は以下のモジュールを使うと楽です。
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の変更も必要です。
忘れずに修正しましょう。
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に置き換えます。
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の設定ファイルです。
projects:
- name: production
dir: prod
OpenTacoではプロジェクトという概念がありTerraformコードの各ディレクトリと対応しています。
これにより、1つのリポジトリで複数のTerraform環境を管理できます。
prod配下にTerraformコードがあるため、prodディレクトリがproductionという名前のプロジェクトとして設定されています。
このファイルはリポジトリのルートに配置する必要があります。
GUI上からはProjectは以下のように確認できます。

動作確認
prod配下のTerraformコードに任意の変更を加えて、Pull Requestを作成します。
Pull Requestを作成すると、OpenTacoによってGitHub Actionsが実行されて自動でPlan結果等がコメントされました。


Plan結果が問題なかったので、applyしてみます。
Applyする際は、Pull Requestにdigger applyとコメントします。

Applyの成功も確認できました。
おわりに
OpenTacoに入門してみました。
コメントOpsのTerraformワークフローを試してみました。
GitHub Actionsを一から構築する場合と比較して、セットアップステップが削減されました。
管理用のサーバーを自分で建てなくて良い点も嬉しいですね。
HCP TerraformやAtlantisとの比較も今後やっていきたいと思います。






