我试图使用Terraform构建AWS上的IaC环境(基础)
首先
最近,IaC(Infrastructure as Code的缩写)已经成为系统构建的主流趋势。IaC的意思是通过编码来管理系统基础设施,通过代码来理解资源的整体情况,并利用源代码自动构建,可以在短时间内构建许多服务器。以前,为了实现这些功能,使用了诸如Ansible、chef和puppet等工具。但是,现在我们会使用Terraform来实现IaC环境,这已经成为AWS环境中变得司空见惯的做法。
Terraform的优点在于可以使用IaC构建云资源本身。虽然AWS的CloudFormation也具有同样的功能,但考虑到其在AWS、GCP等多云环境中的通用性,我们选择了Terraform。
系统配置
让我们构建一个环境,当我们将资源信息推送到CodeCommit时,AWS的VPC会自动创建。系统配置如下图所示。

代码托管
这个术语指的是源代码存储库。在著名的例子中,类似于Gitlab和Github的亚马逊AWS版本。在这里,我们可以放置各种源代码。
事件桥
通过旧版CloudWatch Event,可以获取AWS的各种事件,并针对这些事件执行其他操作。
这次我们将检测CodeCommit中的推送事件,并执行随后的CodeBuild操作。
代码构建
这次的主要内容是,针对构建服务进行操作,并执行Terraform的部分。
代码管道
这是一个便捷的服务,可以连接CodeXX系列产品。
虚拟私人云(VPC)
私たちが今回IaCで作成するリソースは、虚拟私有云的简称。
尝试构建
CodeCommit – 代码托管
请在AWS的管理控制台中搜索CodeCommit。请以任意名称创建一个仓库。
创建仓库完成后,请使用文件创建功能准备以下三个项目。
由于Terraform的规定是读取文件夹中扩展名为.tf的文件,所以”2. provider.tf”和”3. resource.tf”可以写在同一个文件中,也可以将”3. resource.tf”根据资源进行分割并以更易管理的方式进行管理。
version: 0.2
phases:
install:
runtime-versions:
docker: 18
commands:
- ls -la
- yum install unzip -y
- wget https://releases.hashicorp.com/terraform/0.12.19/terraform_0.12.19_linux_amd64.zip
- unzip terraform_0.12.19_linux_amd64.zip
- mv terraform /usr/local/bin/
pre_build:
commands:
- terraform init -input=false
- terraform plan -input=false
build:
commands:
- echo "build phase"
- terraform apply -input=false -auto-approve
post_build:
commands:
- echo "post phase"
terraform {
required_version = ">= 0.12.0"
backend "s3" {
encrypt = false
bucket = "{YOUR-BUCKET-NAME}"
key = "terraform/terraform.tfstate"
region = "ap-northeast-1"
}
}
provider "aws" {
region = "ap-northeast-1"
version = "~> 3.37"
}
这个bucket是指S3。在Terraform中,当前Terraform的管理状态是通过名为terraform.tfstate的文件进行记录和管理的。无论在哪里保存,只要能够访问即可,但我们会选择保存在具有高可用性的S3上。因此,请事先创建S3 bucket,并创建一个名为terraform的文件夹。
resource "aws_vpc" "vpc" {
cidr_block = "192.168.0.0/16"
tags = {
Name = "YOUR-VPC-NAME"
}
}
活动桥接
由于EventBridge会自动在CodePipeline中进行设置,所以无需手动单独创建。
代码构建
通过管理控制台访问CodeBuild页面。
从“创建构建项目”中创建构建项目。
以下是创建所需的配置。
-
- プロジェクト名:自身で決めた任意のプロジェクト名です。
-
- ソースプロバイダ:「AWS CodeCommit」を選択します。
-
- リポジトリ:自身で作成したCodeCommitのリポジトリ名を指定します。
-
- リファレンスタイプ:「ブランチ」を選択
-
- ブランチ:「main」を選択
-
- 環境イメージ:「マネージド型イメージ」を選択
-
- オペレーティングシステム:「Amazon Linux2」を選択
-
- ランタイム:Standardを選択
-
- イメージ:選べる中で「x86_64」である最新のもの
-
- サービスロール:新しいサービスロール
-
- ロール名:任意の名称で記載します。
-
- ビルド仕様:「buildspecファイルを使用する」を選択
- CloudWatch Logs-オプショナル:チェック有
代码管道
通过管理控制台访问CodePipeline页面。
从“创建管道”开始创建管道。
以下是创建所需的设置。
-
- パイプライン名:任意の名称を設定します。
-
- サービスロール:「新しいサービスロール」を選択
-
- ロール名:任意のロール名を設定します。
-
- パイプラインでのロール使用許可:チェック有
-
- ↓次のページへ
-
- ソース:「AWS CodeCommit」を選択
-
- リポジトリ名:自身でCodeCommitで作成したリポジトリ名
-
- ブランチ名:「main」を選択
-
- 検出オプションを変更する:「Amazon CloudWatch Events(推奨)」を選択
-
- 出力アーティファクト形式:「CodePipeline のデフォルト」を選択
-
- ↓次のページへ
-
- プロバイダーを構築する:「AWS CodeBuild」を選択
-
- リージョン:アジアパシフィック(東京)
-
- プロジェクト名:自身で作成したCodeBuildプロジェクト名を選択
-
- ビルドタイプ:「単一ビルド」を選択
-
- ↓次のページへ
-
- デプロイプロバイダを選択せずに「導入段階をスキップ」を選択
-
- ↓次のページへ
- 内容を見ておかしなところがないか確認して「パイプラインを作成する」をクリック
试着实际操作一下
让我们从我自己创建的CodeCommit存储库中编辑resource.tf文件。无论是添加注释还是其他任何修改都可以。当将更改推送到存储库时,根据推送事件,应该会触发CodeBuild构建,并创建VPC资源。