在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扩展插件。
创建工作目录
>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.
办妥了!
整理整顿
我会删除创建的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ファイルの差異があるとエラーになる
外部ベンダーとの共有方法はどうするか
我们将在下一集中解决这个问题。