LoginSignup
0
0

Terrafrom✖︎GitHub Actions入門

Posted at

GitHub Actionsを一度も触ったことがないのはやばいと思い触ってみることにしました。

今回はGitHub Actionsを使ってTerraformコードをmainブランチにpushされた段階でAWS環境にデプロイされる簡単なものを作っていきたいと思います。

リポジトリの作成

今回本記事用に以下リポジトリを作成しました。

GitHub ActionsからAWS環境への接続

GitHub ActionsからAWS環境への認証方式としてOIDCを使用します。

GitHubリポジトリのSecretsに環境変数を設定してアクセスキーなどを参照する方法がありますが調べてみるとこちらの方式の方がベターのようです。

IAM>IDプロバイダからプロバイダを追加していきます。

以下設定で作成します。

Screenshot 2023-08-13 at 0.09.29.png

次に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経由でリソースの作成ができました。

Screenshot 2023-08-13 at 0.44.43.png

これで少しはGitHub Actionsの知識はついたかな、、

あとは実践あるのみです!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0