开始使用Terraform与GitHub Actions

我认为从未接触过GitHub Actions很糟糕,所以决定尝试一下。

我們這次想要使用GitHub Actions,在Terraform代碼被推送到主分支時,簡單地部署到AWS環境。

创建仓库

我为本篇文章创建了以下仓库。

 

使用 GitHub Actions 连接到 AWS 环境。

我们将在GitHub Actions中使用OIDC作为向AWS环境进行身份验证的方式。

 

在GitHub代码库的Secrets中设置环境变量来引用访问密钥等信息的方法已经有了,但根据我的研究,似乎这种方式更好。

我会从IAM>ID提供商处添加提供商。

根据以下设定进行创建。

    • プロバイダのタイプ:OpenID Connect

 

    • プロバイダのURL:https://token.actions.githubusercontent.com

対象者:sts.amazonaws.com

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: jh6230/github-actions-test

将其设置为。

这次我们将赋予您管理员权限。

创建Terraform代码

在使用CLI或其他方式之前,预先创建tfstate文件。

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:実行ジョブ

我会提交并推送。

我能通过GitHub Action创建资源了。

Screenshot 2023-08-13 at 0.44.43.png

通过这个,你是否学到了一些关于GitHub Actions的知识呢?

只剩下实践了!!

广告
将在 10 秒后关闭
bannerAds