OpenTacoで複数のAWSアカウントにリソースをデプロイしてみる(AWSプロファイルでIAMロール切替)

OpenTacoで複数のAWSアカウントにリソースをデプロイしてみる(AWSプロファイルでIAMロール切替)

2026.02.20

OpenTacoを使ったAWSマルチアカウント環境へのリソースデプロイについて解説します。

今回はAWSプロファイルを利用する方法を紹介します。

https://docs.opentaco.dev/ce/howto/project-level-roles

前提条件

本ブログの検証は以下を前提とします。

  • Jump・Prod・Stgの3つのAWSアカウントが存在する
  • JumpアカウントにGitHub Actions OIDC用のIAMロールをデプロイ
  • ProdとStgアカウントにJumpアカウントのIAMロールが引き受け可能なIAMロールをデプロイ

https://docs.github.com/ja/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-aws

基本的には以下のブログと同様の構成です。

https://dev.classmethod.jp/articles/gha-terraform-aws-profile/

ディレクトリ構成

├── ./.aws
   └── ./.aws/config
├── ./.github
   └── ./.github/workflows/digger-workflow.yml
├── ./digger.yml
├── ./prod
   └── ./prod/main.tf
├──  ./stg
   └── ./stg/main.tf
└──  ./README.md

AWSプロファイル設定ファイル(./aws/config)を作成

GitHub Actions上でAWSプロファイルを利用するために、設定ファイルをGitHubリポジトリに追加します。

リソースデプロイ先アカウントのProdとStgアカウントのプロファイルを設定します。

ここで指定するIAMロールは、Jumpアカウントから引き受けが可能な設定にしておきます。

IAMロールの詳細は冒頭のブログ記事をご確認ください。

./aws/config
[profile prod]
credential_source = Environment
role_arn = arn:aws:iam::0123456789:role/terraform-deploy

[profile stg]
credential_source = Environment
role_arn = arn:aws:iam::1234567890:role/terraform-deploy

providerブロックでAWS Profileを指定

各TerraformコードのProviderブロックでAWSプロファイルを指定します。

terraform.backendブロックでもAWSプロファイル(または引受先IAM Role ARN)を指定する必要があります。

指定しないとJumpアカウント側の認証情報を使ってterraform initを実行することになりエラーになります。

prod/main.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "6.28.0"
    }
  }
  backend "s3" {
    bucket = "terraform-state-0123456789" # 環境に合わせて置き換え
    key     = "terraform.tfstate"
    region  = "ap-northeast-1"
    profile = "prod"
  }
}
# 省略
provider "aws" {
  region  = "us-east-1"
  profile = "prod"
}
# 省略
stg/main.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "6.28.0"
    }
  }
  backend "s3" {
    bucket = "terraform-state-123456789" # 環境に合わせて置き換え
    key     = "terraform.tfstate"
    region  = "ap-northeast-1"
    profile = "stg"
  }
}
# 省略
provider "aws" {
  region  = "us-east-1"
  profile = "stg"
}
# 省略

OpenTaco設定ファイルの作成

Terraformコードのあるディレクトリを指定して、プロジェクトを定義します。

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

GitHub ActionsワークフローファイルにJumpアカウントの認証情報を指定

GitHub Actionsワークフローファイルを定義します。

diggerhq/digger@vLatestアクションのwith.aws-role-to-assumeは引受もとのJumpアカウントのGitHub OIDC用IAMロールを設定します。

AWS_CONFIG_FILEでリポジトリに追加した./aws/configを指定しています。これで./aws/configで設定したAWSプロファイルが利用できます。

.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.14.3
          aws-role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
        env:
          GITHUB_CONTEXT: ${{ toJson(github) }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          AWS_CONFIG_FILE: ${{ github.workspace }}/.aws/config

動作確認

ProdとStgのそれぞれのディレクトリのファイルを変更したPRを作成しました。

各環境でPlanが成功することを確認できました。

Update_main_tf_by_msato0731_·_Pull_Request__34_·_msato0731_quickstart-actions-aws.png

おわりに

OpenTacoを使ったAWSマルチアカウント環境へのリソースデプロイについて解説しました。

AWSプロファイルを活用することで、GitHub Actionsワークフローファイル側の変更を最小限に抑えつつ、複数アカウントへのデプロイが実現できました。

アカウントが増えた場合でも、./aws/configにプロファイルを追加し、対応するTerraformコードとdigger.ymlのプロジェクト定義を追加するだけで対応できます。

関連記事

https://dev.classmethod.jp/articles/opentaco-aws-multi-account-deploy-digger-yml/

この記事をシェアする

FacebookHatena blogX

関連記事