
OpenTacoで複数のAWSアカウントにリソースをデプロイしてみる(configure-aws-credentialsで名前付きAWSプロファイル設定)
以前、OpenTaco(digger) + Terraform + GitHub Actions で複数のAWSアカウントへリソースをデプロイする構成を試しました。
その後、aws-actions/configure-aws-credentials v6.1.0で名前付きAWSプロファイル(aws-profile インプット)がサポートされ、~/.aws/credentials と ~/.aws/config にプロファイルを書き出せるようになりました。
このアップデートを使うと、OpenTacoで複数AWSアカウントへデプロイする構成をシンプルに書けそうだったので、組み直してみました。
前提
検証は以下を前提とします。
- AWSアカウント2つ(Prod・Stg)
- Prod・StgそれぞれのアカウントにGitHub Actions OIDCを信頼するIAMロールをデプロイ済み(本ブログではIAMロール名は
terraform-deployとしました) aws-actions/configure-aws-credentialsv6.1.0以上を使用
ディレクトリ構成
ディレクトリ構成は以下のとおりです。
├── ./.github
│ └── ./.github/workflows/digger_workflow.yml
├── ./digger.yml
├── ./prod
│ └── ./prod/main.tf
├── ./stg
│ └── ./stg/main.tf
└── ./README.md
Terraformコード
ProviderブロックとBackendブロックの両方でAWSプロファイルを指定します。Backendブロックでも指定しないと、terraform init が別アカウントで実行されてしまうためです。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "6.28.0"
}
}
backend "s3" {
bucket = "terraform-state-{PROD_ACCOUNT_ID}"
key = "terraform.tfstate"
region = "ap-northeast-1"
profile = "prod"
}
}
provider "aws" {
region = "us-east-1"
profile = "prod"
}
stg/main.tf も同じ形で profile = "stg" を指定します。
digger.yml
Prod・Stgそれぞれのディレクトリをプロジェクトとして定義します。
projects:
- name: production
dir: prod
- name: staging
dir: stg
GitHub Actionsワークフロー
ポイントは、configure-aws-credentials@v6.1.0 を環境ごとに1回ずつ呼び出し、aws-profile で名前付きプロファイルを書き出すことです。diggerhq/digger 側は setup-aws: false にして、事前に設定したプロファイルを使わせます。
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
actions: write
id-token: write
pull-requests: write
issues: read
statuses: write
steps:
- uses: actions/checkout@v4
- name: Configure AWS Credentials for Prod
uses: aws-actions/configure-aws-credentials@v6.1.0
with:
aws-region: ap-northeast-1
role-to-assume: arn:aws:iam::{PROD_ACCOUNT_ID}:role/terraform-deploy
aws-profile: prod
- name: Configure AWS Credentials for Stg
uses: aws-actions/configure-aws-credentials@v6.1.0
with:
aws-region: ap-northeast-1
role-to-assume: arn:aws:iam::{STG_ACCOUNT_ID}:role/terraform-deploy
aws-profile: stg
- uses: diggerhq/digger@vLatest
with:
digger-spec: ${{ inputs.spec }}
setup-aws: false
setup-terraform: true
terraform-version: 1.14.3
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
動作確認
prod/ と stg/ のリソース定義を変更したPRを作成すると、OpenTaco backendが両プロジェクトのplanを実行し、それぞれの環境で terraform plan が成功することを確認しました。

おわりに
aws-actions/configure-aws-credentials@v6.1.0のaws-profileインプットを使って、OpenTacoでの複数AWSアカウント構成を書き直してみました。
プロファイル設定をワークフロー側に寄せられるので、Terraform側はprofileを指定するだけで済み、認証の流れがワークフローファイルから追えるようになりました。
OpenTacoで複数のAWSアカウントへデプロイしたい方は試してみてください。






