使用CircleCI处理Terraform

请参考

目录结构

 yuta   add-subnet  ~  aws-terraform  tree -a -L 2
.
├── .circleci
│   └── config.yml
├── .git
│   ├── COMMIT_EDITMSG
│   ├── FETCH_HEAD
│   ├── HEAD
│   ├── ORIG_HEAD
│   ├── branches
│   ├── config
│   ├── description
│   ├── hooks
│   ├── index
│   ├── info
│   ├── logs
│   ├── objects
│   ├── packed-refs
│   └── refs
├── .gitignore
├── .terraform
│   └── providers
├── .terraform.lock.hcl
├── README.md
└── main.tf

    • terraformはVPCを作るだけのもの

 

    s3にremote stateをセットできるようにしておく
provider "aws" {
  region  = "ap-northeast-1"
  profile = "yuta"
}

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 3.36.0"
    }
  }
  backend "s3" {
    bucket  = "vamdemic-circleci"
    region  = "ap-northeast-1"
    profile = "yuta"
    key     = "terraform.tfstate"
    encrypt = true
  }
}

resource "aws_vpc" "main" {
  cidr_block       = "10.0.0.0/16"
  instance_tenancy = "default"

  tags = {
    Name = "circleci-test-vpc"
  }
}

resource "aws_subnet" "main" {
  vpc_id     = aws_vpc.main.id
  cidr_block = "10.0.1.0/24"

  tags = {
    Name = "Main"
  }
}

准备好

创建适用于CircleCI的配置文件。

version: 2.1
orbs:
  terraform: "circleci/terraform@2.1.0"
workflows:
  deploy_infrastructure:
    jobs:
      - terraform/fmt:
          checkout: true
          context: terraform
      - terraform/validate:
          checkout: true
          context: terraform
          requires:
            - terraform/fmt
      - terraform/plan:
          checkout: true
          context: terraform
          persist-workspace: true
          requires:
            - terraform/validate
      - terraform/apply:
          attach-workspace: true
          context: terraform
          filters:
            branches:
              only: main
          requires:
            - terraform/plan

将AWSCredencial配置到CircleCI的环境变量中。

    • CircleCI上で作成したプロジェクトでProject Settingsを選び入力する

 

    • それぞれ次の通りそのまま入力する

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY

今回の場合、指定した資格情報がterraform plan,applyのときに利用される

预先设置上下文

image.png

尝试

在 main.tf 中添加

resource "aws_subnet" "private" {
  vpc_id     = aws_vpc.main.id
  cidr_block = "10.0.2.0/24"

  tags = {
    Name = "private"
  }
}

将更改推送到远程分支

git checkout -b add-subnet 
git commit -m "init"
git push 

执行结果

image.png

将其合并到主分支

image.png

在中文中重新运行CircleCI

    • といのは、以下の記述があるから

ブランチがmainのときのみterraform applyが実行されるということ

      - terraform/apply:
          attach-workspace: true
          context: terraform
          filters:
            branches:
              only: main

已经结束

image.png
image.png
广告
将在 10 秒后关闭
bannerAds