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(东京))

image.png

参照

⑤变量模块

输入变量的定义块
与每个模块一起使用。请在variable.tf文件中进行记录。
※尽管可以在s3.tf文件中进行记录,但将输入变量的定义代码集中在variable.tf文件中更易于管理。

variable "region" {
  type = string
}
variable "enviroment" {
  type = string
}
image.png

※僅提供一種選擇:

请参考。

数据块

在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"
}
image.png
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的方法

语法、句法。

image.png

可以查看资源区块的写法。

提供者(与AWS相关的语法)

image.png

索引页 (suǒ yè)

我在下面整理了关于Terraform的主题并进行了介绍。

广告
将在 10 秒后关闭
bannerAds