开始使用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
接下来,我们将创建一个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创建资源了。
通过这个,你是否学到了一些关于GitHub Actions的知识呢?
只剩下实践了!!