GitHub Actionsを一度も触ったことがないのはやばいと思い触ってみることにしました。
今回はGitHub Actionsを使ってTerraformコードをmainブランチにpushされた段階でAWS環境にデプロイされる簡単なものを作っていきたいと思います。
リポジトリの作成
今回本記事用に以下リポジトリを作成しました。
GitHub ActionsからAWS環境への接続
GitHub ActionsからAWS環境への認証方式としてOIDCを使用します。
GitHubリポジトリのSecretsに環境変数を設定してアクセスキーなどを参照する方法がありますが調べてみるとこちらの方式の方がベターのようです。
IAM>IDプロバイダからプロバイダを追加していきます。
以下設定で作成します。
- プロバイダのタイプ:OpenID Connect
- プロバイダのURL:https://token.actions.githubusercontent.com
- 対象者:sts.amazonaws.com
次にIAMロールの作成をします。
IAMロール>カスタム信頼ポリシーで作成します。
ポリシーを以下のように書き換えます。
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::{AWS_ACCOUNT_ID}:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:{GITHUB_ORG_NAME}/{GITHUB_REPO_NAME}:*"
}
}
}
]
}
{AWS_ACCOUNT_ID}
にAWSのアカウントIDを設定します。
repo:{GITHUB_ORG_NAME}/{GITHUB_REPO_NAME}
を
repo:jh6230/github-actions-test
に設定します。
ロール権限は今回は Administrator
権限を付与しておきます。
Terraformコードの作成
事前にtfstateファイルCLI等で作成しておきます。
terraform {
required_version = ">= 1.5.0"
backend "s3" {
bucket = "github-actions-test-2023-0815" # 作成したS3バケット
region = "ap-northeast-1"
key = "terraform.tfstate"
encrypt = true
}
}
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_vpc" "my_vpc" {
cidr_block = "192.0.0.0/22"
tags = {
Name = "github-actions-test"
}
}
workflowファイルの作成
name: AWS Deply
on:
push:
branches:
- main
env:
AWS_ROLE_ARN: ${{ secrets.AWS_ROLE_ARN }}
AWS_REGION: ap-northeast-1
permissions:
id-token: write
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Configure AWS Account
uses: aws-actions/configure-aws-credentials@v1
with:
aws-region: ${{ env.AWS_REGION }}
role-to-assume: ${{ env.AWS_ROLE_ARN }}
- name: Set Up Terraform
uses: hashicorp/setup-terraform@v1
- name: Terraform Init
run: terraform init
- name: Terraform Validate
run: terraform validate
- name: Terraform Fmt
run: terraform fmt
- name: Terraform Plan
run: terraform plan
- name: Terraform Apply
run: terraform apply -auto-approve
簡単に説明
- name:ワークフロー名
- on:GitHub Actionsが実行されるタイミング
- env:ワークフローファイル内で使用する環境変数を設定
- permission:GitHub Actionsを実行するために必要な権限
(参考)https://zenn.dev/not75743/scraps/926f2693809744 - jobs:実行ジョブ
commitしてpushします。
GitHub Action経由でリソースの作成ができました。
これで少しはGitHub Actionsの知識はついたかな、、
あとは実践あるのみです!!