OpenTacoで複数のAWSアカウントにリソースをデプロイしてみる(configure-aws-credentialsで名前付きAWSプロファイル設定)

OpenTacoで複数のAWSアカウントにリソースをデプロイしてみる(configure-aws-credentialsで名前付きAWSプロファイル設定)

2026.05.04

以前、OpenTaco(digger) + Terraform + GitHub Actions で複数のAWSアカウントへリソースをデプロイする構成を試しました。

https://dev.classmethod.jp/articles/opentaco-aws-multi-account-aws-profile/

その後、aws-actions/configure-aws-credentials v6.1.0で名前付きAWSプロファイル(aws-profile インプット)がサポートされ、~/.aws/credentials~/.aws/config にプロファイルを書き出せるようになりました。

https://dev.classmethod.jp/articles/configure-aws-credentials-v6-named-aws-profile/

このアップデートを使うと、OpenTacoで複数AWSアカウントへデプロイする構成をシンプルに書けそうだったので、組み直してみました。

前提

検証は以下を前提とします。

  • AWSアカウント2つ(Prod・Stg)
  • Prod・StgそれぞれのアカウントにGitHub Actions OIDCを信頼するIAMロールをデプロイ済み(本ブログではIAMロール名は terraform-deploy としました)
  • aws-actions/configure-aws-credentials v6.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 が別アカウントで実行されてしまうためです。

prod/main.tf
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それぞれのディレクトリをプロジェクトとして定義します。

digger.yml
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 にして、事前に設定したプロファイルを使わせます。

.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
      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 が成功することを確認しました。

verify__digger_plan_via_named_p…ato0731_quickstart-actions-aws.png

おわりに

aws-actions/configure-aws-credentials@v6.1.0aws-profileインプットを使って、OpenTacoでの複数AWSアカウント構成を書き直してみました。

プロファイル設定をワークフロー側に寄せられるので、Terraform側はprofileを指定するだけで済み、認証の流れがワークフローファイルから追えるようになりました。

OpenTacoで複数のAWSアカウントへデプロイしたい方は試してみてください。

この記事をシェアする

関連記事