使用GitHub与Terraform Cloud进行集成(VCS与工作目录设置)- Terraform云探索第2篇

簡單重述

在上一期的文章中(Terraform Cloud その1 – まずは使ってみた(ローカル実行からリモート実行に変更))我们将之前在本地使用的Terraform迁移到了云端。
这次我们想要通过与Github的整合,以实现类似CI/CD的操作。

在这篇文章中实现的目标

    • GitHub経由でのTerraform Cloudの実行

 

    • 1つのVCSリポジトリからstateを分離させ複数のWorkspaceで実行

 

    Terraform CloudのWorkspace間の連携

这篇文章的目标读者群

    • Terraform CloudとVCSを連携させたい人

 

    VCSを使う際のWorkspaceの設定を知りたい人

准备好了

我们需要以下的东西,与之前创建的不同。

    GitHubのアカウント

使用的示例Terraform代码。

这次我们将采用下面的结构,就像我们在这里放置的那样。

树形结构.
├── 说明.md
├── ec2
│ └── 主文件.tf
└── 主文件.tf

./main.tf“`
variable “aws_access_key” {}

variable “aws_secret_key” {}

variable “region” {
default = “ap-northeast-1”
}

terraform {
backend “remote” {
hostname = “app.terraform.io”
organization = “kuroseets”

workspaces {
name = “vpc-test”
}
}
}

provider “aws” {
access_key = var.aws_access_key
secret_key = var.aws_secret_key
region = var.region
}

resource “aws_vpc” “test” {
cidr_block = “10.0.0.0/16”

tags = {
Name = “test”
}
}

resource “aws_subnet” “test_subnet” {
vpc_id = aws_vpc.test.id
cidr_block = “10.0.0.0/24”
availability_zone = “ap-northeast-1a”

tags = {
Name = “test-a”
}
}
“`

./main.tf

“`
variable “aws_access_key” {}

variable “aws_secret_key” {}

variable “region” {
default = “ap-northeast-1”
}

terraform {
backend “remote” {
hostname = “app.terraform.io”
organization = “kuroseets”

workspaces {
name = “vpc-test”
}
}
}

provider “aws” {
access_key = var.aws_access_key
secret_key = var.aws_secret_key
region = var.region
}

resource “aws_vpc” “test” {
cidr_block = “10.0.0.0/16”

tags = {
Name = “test”
}
}

resource “aws_subnet” “test_subnet” {
vpc_id = aws_vpc.test.id
cidr_block = “10.0.0.0/24”
availability_zone = “ap-northeast-1a”

tags = {
Name = “test-a”
}
}
“`

 

./ec2/main.tf变量 “aws_access_key” {}
变量 “aws_secret_key” {}
变量 “region” {
默认值 = “ap-northeast-1”
}

terraform {
远程后端 “remote” {
主机名 = “app.terraform.io”
组织 = “kuroseets”

工作区 {
名称 = “ec2-test”
}
}
}

提供者 “aws” {
访问密钥 = var.aws_access_key
密钥 = var.aws_secret_key
区域 = var.region
}

数据 “aws_vpc” “test” {
标签 = {
名称 = “test”
}
}

数据 “aws_subnet” “test_subnet” {
vpc_id = data.aws_vpc.test.id

标签 = {
名称 = “test-a”
}
}

资源 “aws_instance” “test-ec2-1” {
ami = “ami-0053d11f74e9e7f52”
实例类型 = “t3.micro”
子网_id = data.aws_subnet.test_subnet.id
标签 = {
名称 = “test-ec2-1”
}
}

初始化 Terraform虚拟专用网络测试EC2测试

版本控制系統設定

在Terraform Cloud中获取授权回调URL。

スクリーンショット 2020-09-05 10.46.10.png
スクリーンショット 2020-09-05 10.47.15.png
スクリーンショット 2020-09-05 10.48.33.png
スクリーンショット 2020-09-05 10.49.41.png

请在Github上。

(Github上) 编辑Github。

スクリーンショット 2020-09-05 10.51.08.png
スクリーンショット 2020-09-05 10.52.04.png
スクリーンショット 2020-09-05 10.52.43.png
スクリーンショット 2020-09-05 10.53.13.png
スクリーンショット 2020-09-05 10.53.46.png
スクリーンショット 2020-09-05 10.55.44.png

使用Terraform将GitHub的信息输入并完成连接。

スクリーンショット 2020-09-05 10.59.08.png
スクリーンショット 2020-09-05 11.02.19.png
スクリーンショット 2020-09-05 11.06.04.png
スクリーンショット 2020-09-05 11.06.41.png

在Github上查看

スクリーンショット 2020-09-05 11.07.40.png

工作区的设置

这次我打算这样合作。

WorkspaceRepositoryDirctoryAuto ApplyRun Triggervpc-testtfc-aws-test
false
ec2-testtfc-aws-testec2truevpc-test

分开目录和工作空间是因为希望以不同的状态管理EC2的添加和删除。

在工作区中设置存储库。

スクリーンショット 2020-09-05 11.09.11.png
スクリーンショット 2020-09-05 11.09.25.png
スクリーンショット 2020-09-05 11.09.42.png
スクリーンショット 2020-09-05 11.09.51.png
スクリーンショット 2020-09-05 11.10.09.png
スクリーンショット 2020-09-05 11.10.22.png
スクリーンショット 2020-09-05 11.11.50.png
スクリーンショット 2020-09-05 11.12.22.png

请在vpc-test和ec2-test中进行上述的设置。

指定目录自动执行Apply和Terraform的操作。

スクリーンショット 2020-09-05 11.15.33.png

以其他工作区为触发器

スクリーンショット 2020-09-05 11.27.49.png

确认

スクリーンショット 2020-09-05 13.26.00.png

总结

这次我们确认了Terraform Cloud和Github的合作。虽然每个工作区和Github都需要进行一些详细的设置和考虑,但毫无疑问,这样就能实现基础设施的CI/CD了。虽然这次我们使用了AWS的构建代码,但下次我们打算利用Terraform Cloud来管理Terraform Cloud,试试看。

相关文章

Terraform Cloud 之一 – 首先尝试使用(从本地执行更改为远程执行)
Terraform Cloud 之二 – 尝试与Github进行集成(设置VCS和工作目录)
Terraform Cloud 之三 – 使用Terraform来管理Terraform Cloud
Terraform Cloud 之四 – 关于在工作区之间共享的私密空间中使用的模块

bannerAds