Closed8
ローカルのtfstateをs3へ移行し、Github Actionsから利用する
参考
方針
- ローカルのtfstateをs3へ移行
- ローカルのtfファイルをGithubへpush
- workflowを起動、
terraform plan
を実行し、No Changes
であることを確認する
環境
Terraform 1.4.6
前提
GitHub Actionsが使用するOIDCプロバイダーの設定が済んでいる
イメージ図
ローカルからs3にtfstate移行
s3バケット作成
$ aws s3 mb s3://<bucket_name>
バックエンドをs3に変更
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.65.0"
}
}
+ backend "s3" {
+ bucket = "<作成したバケット>"
+ key = "<パス>"
+ region = "ap-northeast-1"
+ }
}
バックエンド設定をローカルからs3に更新
現在の状態を維持したいので、-migrate-state
オプションを使用します
$ terraform init -migrate-state
s3にtfstateがあることを確認
$ aws s3 ls s3://<bucket_name>
2023-07-05 12:33:54 29450 terraform.tfstate
tfファイル、workflowをpush
ディレクトリ構成はこんな感じ
.
├── .github
│ └── workflows
│ └── terraform.yaml
└── terraform
└── main.tf
これをpushします。
ワークフローはworkflow_dispatch
で起動します。
terraform.yaml
name: terraform
on:
workflow_dispatch:
env:
AWS_ROLE_ARN: ${{ secrets.AWS_OIDC_ROLE_ARN }}
permissions:
id-token: write
contents: read
jobs:
test:
runs-on: ubuntu-latest
defaults:
run:
working-directory: terraform
steps:
- name: configure aws credential
uses: aws-actions/configure-aws-credentials@v2
with:
role-to-assume: ${{ env.AWS_ROLE_ARN }}
aws-region: ap-northeast-1
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
with:
terraform_version: 1.4.6
- name: Terraform fmt
id: fmt
run: terraform fmt
continue-on-error: true
- name: Terraform Init
id: init
run: terraform init
- name: Terraform Validate
id: validate
run: terraform validate
- name: Terraform Plan
id: plan
run: terraform plan
continue-on-error: true
workflow実行
OIDC用ロール作成
アクセスキーなしでAWSサービスを操作するため、OIDC用のIAMロールを作成します。
#ロール作成
aws iam create-role \
--role-name GitHubActionsRole \
--assume-role-policy-document file://trust.json
#ポリシーアタッチ
aws iam attach-role-policy \
--role-name GitHubActionsRole \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess
trust.json
の内容はこちらを参照
動作確認
run workflow
を選択し
No Changes
となればOK
このスクラップは2023/07/07にクローズされました