Terraform的基本模块
基本块(8个)
①terraform模块:定义Terraform
②provider模块:连接的提供者(连接到哪个平台)
③resource模块:定义AWS资源
④module模块:定义Terraform模块
⑤variable模块:定义(环境,输入)变量
⑥data模块:定义要引用的实例
⑦output模块:定义要输出的实例
⑧local模块:定义(同一模块内的)局部变量
阻塞 (zhǔ sè) 的意思是
下面{ }中所包围的一组代码被称为”代码块”。
variable "test" {
type = string
}
关于每个区块
①terraform块
Terraform的定义块本身
terraform {
required_version = ">=1.1"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~>3.0"
}
}
backend "s3" {
bucket = "manage-bucket-sample"
key = "terraform.tfstate"
region = "ap-northeast-1"
profile = "terraform"
}
}
所需版本:设置Terraform的版本
所需提供者:设置所需提供者(基础设施平台)
※此块是一个约定俗成的文本。
② 供应商区块
provider "aws" {
profile = "terraform"
region = var.region
access_key = var.access_key
secret_key = var.secret_key
}
请将[terraform]在“$ vim ~/.aws/credential”中进行的更改与以下配置相匹配。
* 输入相同的值。
区域:ap-northeast-1(*东京)
访问密钥:自己(IAM用户)的访问密钥(例如:AIUGW&78SA69AS)
秘密密钥:自己(IAM用户)的秘密密钥(例如:jr232vvrkng323bfvt2tfw4)
※ 仅提供一种选项,以下是中文本地化的释义:
③资源区块
基础设施服务资源定义块 (jī chǔ shè shī fú wù zī yì
resource "aws_s3_bucket" "s3-private-bucket" {
bucket = "${var.project}-${var.enviroment}-private-bucket-328674"
acl = "private"
# Manege version of S3 source
versioning {
enabled = false
}
}
aws_s3_bucket:资源类型
指定了特定的类型,需要写明所要定义的类型。
s3-private-bucket:本地名称
为类型分配特定的名称。自行决定名称并写明。
bucket:S3存储桶名称
${var.project} 是一个变量。它参考了 main.tf 中传递的 project。
实际的值(例如:terraform)需要在 terraform.tfvars 中写明。
main.tf 引用了 terraform.tfvars,将变量传递给 s3.tf。
※仅提供一种选项,
参考
④模块区块
在主要的main.tf文件中,我们进行各个模块(s3.tf,glue.tf等)的调用。
module "S3" {
source = "./modules/s3"
project = var.project
enviroment = var.enviroment
region = var.region
}
源:模块的路径配置
※文件夹结构示例
terraform
└main.tf
└modules
└s3
└s3.tf
翻译:源:模块的路径配置
※文件夹结构示例
terraform
└main.tf
└modules
└s3
└s3.tf
项目:项目名称(例如:terraform)
环境:环境名称(例如:开发、阶段、生产)
地区:地区名称(例如:ap-northeast-1(东京))
参照
⑤变量模块
输入变量的定义块
与每个模块一起使用。请在variable.tf文件中进行记录。
※尽管可以在s3.tf文件中进行记录,但将输入变量的定义代码集中在variable.tf文件中更易于管理。
variable "region" {
type = string
}
variable "enviroment" {
type = string
}
※僅提供一種選擇:
请参考。
数据块
在tf文件中引入不受Terraform管理的资源块。
※aws_iam_policyリソースの読み込み
data "aws_iam_policy_document" "lambda" {
statement {
sid = "LambdaAssumeRolePolicy"
effect = "Allow"
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = [
"logs.${var.region}.amazonaws.com",
"lambda.amazonaws.com"
]
}
}
}
请用中文简洁地表达以下内容:
↓
resource "aws_iam_role" "lambda" {
name = "${var.enviroment}-lambda-role"
assume_role_policy = "${data.aws_iam_policy_document.lambda.json}" #参照することができる
}
可以使用”data.aws_iam_policy_document”将数据块的定义作为实例接收,这样就不需要在多个位置写相同的代码了。
※archive_fileリソース(生成したアーカイブ)を取り込む
data "archive_file" "initial_lambda_package" {
type = "zip"
output_path = "./src/.temp_files/lambda.zip"
source {
content = "# empty"
filename = "main.py"
}
}
可以引用到AWS的”archive_file”资源。
在这个区块中,引用了”archive_file”资源,并在指定的目录下创建了”main.py”文件。
※仅提供一种中文翻译选项:
请参考以下内容。
第七输出块
将module内的资源信息封装成block以便于对外公开。
resource "aws_s3_bucket" "s3-private-bucket" {
bucket = "${var.project}-${var.enviroment}-private-bucket-105"
acl = "private"
}
请将以下内容以中文进行复述:
↓
请以中文进行复述。
output "aws_s3_bucket" {
value = aws_s3_bucket.s3-private-bucket.id
sensitive = false # not external output
}
请分别举出每个人作风反映出来的霸气。
请以以下形式举例,一个人,一句话,短时间内做出回应。
↓
module "sfn" {
source = "./modules/sfn"
s3_private_bucket06 = module.S3.aws_s3_bucket
}
请用中文进行重新表述:↓
resource "aws_s3_bucket_object" "lambda_file" {
bucket = "${var.s3_private_bucket}"
key = "initial.zip"
source = "./src/.temp_files/lambda.zip"
}
output “output_test" {
value = "test_value"
sensitive = true # external display ok
}
$ terraform output
> Output:
> Value = test_value
※デバッグにも使用できる
※请参考
本地区块
定义一个局部变量的代码块
locals {
bucket_name = "terraform-dev-private-bucket-41627"
}
↓
resource "aws_s3_bucket" "s3-private-bucket" {
cidr_block = local.bucket_name # 参照
}
※仅提供一种中文表达,可以参考:
– 参考一下
如何有效地调查Terraform的方法
语法、句法。
可以查看资源区块的写法。
提供者(与AWS相关的语法)
索引页 (suǒ yè)
我在下面整理了关于Terraform的主题并进行了介绍。