我试图使用Terraform构建AWS上的IaC环境(基础)

首先

最近,IaC(Infrastructure as Code的缩写)已经成为系统构建的主流趋势。IaC的意思是通过编码来管理系统基础设施,通过代码来理解资源的整体情况,并利用源代码自动构建,可以在短时间内构建许多服务器。以前,为了实现这些功能,使用了诸如Ansible、chef和puppet等工具。但是,现在我们会使用Terraform来实现IaC环境,这已经成为AWS环境中变得司空见惯的做法。

Terraform的优点在于可以使用IaC构建云资源本身。虽然AWS的CloudFormation也具有同样的功能,但考虑到其在AWS、GCP等多云环境中的通用性,我们选择了Terraform。

系统配置

让我们构建一个环境,当我们将资源信息推送到CodeCommit时,AWS的VPC会自动创建。系统配置如下图所示。

aws-draw_2022_01-IaC - basic.drawio.png
代码托管

这个术语指的是源代码存储库。在著名的例子中,类似于Gitlab和Github的亚马逊AWS版本。在这里,我们可以放置各种源代码。

事件桥

通过旧版CloudWatch Event,可以获取AWS的各种事件,并针对这些事件执行其他操作。
这次我们将检测CodeCommit中的推送事件,并执行随后的CodeBuild操作。

代码构建

这次的主要内容是,针对构建服务进行操作,并执行Terraform的部分。

代码管道

这是一个便捷的服务,可以连接CodeXX系列产品。

虚拟私人云(VPC)

私たちが今回IaCで作成するリソースは、虚拟私有云的简称。

尝试构建

CodeCommit – 代码托管

请在AWS的管理控制台中搜索CodeCommit。请以任意名称创建一个仓库。
创建仓库完成后,请使用文件创建功能准备以下三个项目。

Noファイル名説明1buildspec.ymlCodeBuildの実行定義ファイルです。2provider.tfTerraformで読まれるファイル(.tf)です。AWSのバージョンなど、configファイルのような立ち位置です。3resource.tfTerraformで読まれるファイル(.tf)です。このファイルがIaCの根幹となるリソースを定義したファイルです。
关于.tf文件
由于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
这个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プロジェクト名を選択

 

    • ビルドタイプ:「単一ビルド」を選択

 

    • ↓次のページへ

 

    • デプロイプロバイダを選択せずに「導入段階をスキップ」を選択

 

    • ↓次のページへ

 

    内容を見ておかしなところがないか確認して「パイプラインを作成する」をクリック
通过在CodePipeline中指定CodeCommit和CodeBuild来创建流水线,可以自动设置EventBridge,以侦测CodeCommit源代码变化的事件并执行CodeBuild项目。

试着实际操作一下

让我们从我自己创建的CodeCommit存储库中编辑resource.tf文件。无论是添加注释还是其他任何修改都可以。当将更改推送到存储库时,根据推送事件,应该会触发CodeBuild构建,并创建VPC资源。

bannerAds