在VSCode中开始使用Terraform

我正在工作中开始构建一个利用AWS的物联网平台。
在这样的情况下,为了实现IaC(基础设施即代码),
我尝试使用TerraForm进行创建S3。

执行环境

    • Windows 10 pro 64bit

 

    • VisualStudioCode: 1.26.1

 

    Terraform: 0.11.13

环境的建设 de

我们现在开始进行实际操作吧。
操作步骤基本上是参考官方网页。
https://learn.hashicorp.com/terraform/getting-started/install.html

亞馬遜網路服務建構

首先,需要进行AWS端的设置。

创建IAM用户并记下其凭据。

这次我创建了一个带有poweruser角色的IAM用户。

    • ACCESS_KEY

 

    SECRET_KEY

将Terraform和tflint环境配置设置为终端

下面是一种选项:

下载并构建一个可以运行Terraform和tflint的环境。这次我们将以这种配置进行安排。

C:\Users\my_user\terraform
  terraform.exe
  tflint.exe

Terraform的配置

存档下载

从Terraform官方网站上下载最新版本的存档文件
https://www.terraform.io/downloads.html

解冻 (jiě

将 C:\Users\my_user\terraform 解压缩到指定位置。

TFLint的配置

存档下载

从tflint的官方网站上下载最新标签的tflint_windows_amd64.zip文件,并使用Terraform的Lint功能进行安装。
https://github.com/wata727/tflint/releases/

解凍

将C:\Users\my_user\terraform解压缩。

设置环境变量

请执行以下命令,并在环境变量中设置terraform/tflint的路径。这时,请以管理员权限运行PowerShell。

>$env:Path += ";C:\Users\my_user\terraform"
>[Environment]::SetEnvironmentVariable('PATH', $Env:Path, 'Machine')

确认行动

只要Terraform和tflint各自的版本能正常显示即可。

> terraform -v
Terraform v0.11.13

> tflint -v
TFLint version 0.7.5

VSCode的设置

安装Terraform扩展插件。

image.png
image.png

创建工作目录

>mkdir C:\Users\my_user\terraform
>cd C:\Users\my_user\terraform

创建tf文件

本次我们将按照这样的方式创建文件。
由于同一层级的tf文件将全部执行,因此我们进行了按管理单元分隔。

C:\Users\my_user\terraform
  terraform.exe          
  tflint.exe
  main.tf           #   メインの設定 
  s3.tf             #   S3の設定
  terraform.tfvars  #   クレデンシャルの設定
variable "access_key" {}
variable "secret_key" {}
variable "region" {}

# AWS プロバイダの設定
provider "aws" {
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
  region = "${var.region}"
}
access_key = "YOUR_ACCESS_KEY"
secret_key = "YOUR_SECRET_KEY"
region = "ap-northeast-1"
resource "aws_s3_bucket" "bucket" {
  bucket = "garakutayama-terraform-test"
  acl    = "private"

  lifecycle_rule {
    id      = "log"
    enabled = true

    prefix = "log/"

    tags = {
      "rule"      = "log"
      "autoclean" = "true"
    }

    transition {
      days          = 30
      storage_class = "STANDARD_IA" # or "ONEZONE_IA"
    }

    transition {
      days          = 60
      storage_class = "GLACIER"
    }

    expiration {
      days = 90
    }
  }
}

执行Terraform Init

Init命令用于初始化工作目录中的Terraform配置文件.
例如,如果使用aws作为提供程序,则会运行下载aws插件等相关处理步骤。

> terraform init

Initializing provider plugins...


・・・

* provider.aws: version = "~> 2.9"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

执行Terraform计划

我們將執行設定內容的計劃。
使用”out”命令將計劃結果輸出,然後在執行”apply”命令之後進行參考。

>terraform plan -out=mainplan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.


------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

・・・


Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

This plan was saved to: main_plan

To perform exactly these actions, run the following command to apply:
    terraform apply "main_plan"

执行Terraform apply。

最后执行apply命令来创建。

> terraform apply main_plan
aws_s3_bucket.bucket: Creating...
・・・
aws_s3_bucket.bucket: Creation complete after 4s (ID: garakutayama-terraform-test)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

办妥了!

image.png

整理整顿

我会删除创建的S3。
删除使用destroy命令。

> terraform destroy
aws_s3_bucket.bucket: Refreshing state... (ID: garakutayama-terraform-test)

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  - aws_s3_bucket.bucket


Plan: 0 to add, 0 to change, 1 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes

aws_s3_bucket.bucket: Destroying... (ID: garakutayama-terraform-test)
aws_s3_bucket.bucket: Destruction complete after 0s

Destroy complete! Resources: 1 destroyed.

结束

剩下的任务

    • credentialをaws cliのUserProfileから参照するように変更

credentialを間違ってgitにあげちゃうなどしないようにtfファイルとは別ディレクトリで管理したい

statusファイルをどう管理するか

中にはクレデンシャル情報も含まれてたりする
またstatusファイルはdeploy先のインスタンスとtfファイルの差異があるとエラーになる
外部ベンダーとの共有方法はどうするか

我们将在下一集中解决这个问题。

广告
将在 10 秒后关闭
bannerAds