地形信息:
如果我运行terraform plan或terraform apply针对现有堆栈,则没有任何待处理的更改,状态完全是最新的。
resource "aws_security_group" "sg_apps" {
name = "Custom apps ${var.env}"
description = "Custom apps ${var.env}"
vpc_id = data.terraform_remote_state.vpc.outputs.vpc_east_id
tags = {
Name = "Custom apps ${var.env} - TF"
}
ingress {
from_port = 3306
to_port = 3306
protocol = "tcp"
cidr_blocks = [
data.terraform_remote_state.vpc.outputs.m-1a_cidr,
data.terraform_remote_state.vpc.outputs.m-1b_cidr,
data.terraform_remote_state.vpc.outputs.p-1b_cidr,
data.terraform_remote_state.vpc.outputs.p-1a_cidr,
]
}
ingress {
from_port = 8800
to_port = 8808
protocol = "tcp"
cidr_blocks = [
data.terraform_remote_state.vpc.outputs.m-1a_cidr,
data.terraform_remote_state.vpc.outputs.m-1b_cidr,
data.terraform_remote_state.vpc.outputs.p-1b_cidr, …Run Code Online (Sandbox Code Playgroud) 您能帮我使用 terraform 实现以下场景吗?我需要在字符串值中的每个特殊字符前加上 // 前缀。
示例:mysplchr="test O'riel*abc"这必须更改为"test O//'riel//*abc"
谢谢
terraform terraform-provider-azure terraform-provider-aws terraform-provider-gcp terraform0.12+
我正在尝试使用 Terraform 部署 ECS 任务定义。这是我的ECS任务定义资源代码:
resource "aws_ecs_task_definition" "my_TD" {
family = "my_container"
container_definitions = <<DEFINITION
[{
"name": "my_container",
"image": "${format("%s:qa", var.my_ecr_arn)}",
"portMappings": [
{
"containerPort": 80,
"hostPort": 80
}
],
"memory": 300,
"networkMode": "awsvpc",
"environment": [
{
"name": "PORT",
"value": "80"
},
{
"name": "Token",
"value": "xxxxxxxx"
}
]
}
]
DEFINITION
requires_compatibilities = ["EC2"]
network_mode = "awsvpc"
cpu = "256"
memory = "512"
task_role_arn = var.ecs_role
execution_role_arn = var.ecs_role
}
Run Code Online (Sandbox Code Playgroud)
环境变量在这里被硬编码。因此,我尝试从 terraform 输入中获取这些环境变量。所以,我修改为:
variable "my_env_variables"{
default = [
{ …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-ecs terraform terragrunt terraform-provider-aws
我的目标是创建resource "aws_dynamodb_table"具有复合主键的 terraform,如AWS 文档中所述。
根据Terraform 文档,它只允许hash_key有一个属性名称。我怎样才能拥有一个hash_key由多个属性组成的?
我正在使用 Terraform 创建私有子网:
resource "aws_subnet" "private" {
count = length(data.aws_availability_zones.available.names)
vpc_id = aws_vpc.main_vpc.id
cidr_block = cidrsubnet(var.vpc_cidr, 8, count.index + 10)
availability_zone = element(data.aws_availability_zones.available.names, count.index)
map_public_ip_on_launch = false
tags = {
Name = "${var.client_code}-${var.environment}-private-${element(data.aws_availability_zones.available.names, count.index)}"
}
}
Run Code Online (Sandbox Code Playgroud)
后来我尝试使用以下命令创建 SSM 参数:
resource "aws_ssm_parameter" "private_subnets_ids" {
name = "/${var.client_code}-${var.environment}/backend/SUBNET_IDS"
type = "StringList"
value = aws_subnet.private.*.id
}
Run Code Online (Sandbox Code Playgroud)
由于子网资源正在创建三个子网,因此会引发以下错误:
4: value = aws_subnet.private.*.id
|----------------
| aws_subnet.private is tuple with 3 elements
Inappropriate value for attribute "value": string required.
Run Code Online (Sandbox Code Playgroud)
我应该如何将这个三元素元组传递给StringList类型参数?
我稍后会更新,但现在...
$ terraform --version
Terraform v0.12.17
+ provider.aws v3.23.0
Run Code Online (Sandbox Code Playgroud)
./aws/credentials我在我的和文件中设置了 AWS 配置文件~/.aws/config,就像这样......
~/.aws/credentials
[default]
aws_access_key_id=****
aws_secret_access_key=****
[myprofile]
aws_access_key_id=****
aws_secret_access_key=****
~/.aws/config
[default]
region=us-east-1
output=json
[profile myprofile]
region=us-east-1
output=json
Run Code Online (Sandbox Code Playgroud)
在我的 Terraform 计划中,我有
provider "aws" {
region = "us-east-1"
profile = "myprofile"
}
terraform {
required_version = ">= 0.12.17, < 0.13"
}
resource "aws_vpc" "vpc" {
cidr_block = "10.123.123.0/24"
tags = {
Name = "test_vpc"
}
}
output "vpc_id" {
value = aws_vpc.vpc.id
}
Run Code Online (Sandbox Code Playgroud)
我有一个创建 VPC 的计划,所以我这样做了
$ export AWS_PROFILE=myprofile …Run Code Online (Sandbox Code Playgroud) 我想为安全组设置入口“Custome ICMP (IPv4)”规则,并且aws_security_group页面不清楚我需要为from_port和to_port值设置什么。它说(类似于to_port)
from_port - (Required) The start port (or ICMP type number if protocol is "icmp" or "icmpv6")
Run Code Online (Sandbox Code Playgroud)
什么是ICMP type number?如果我在 AWS 控制台中手动执行此操作,则端口默认为N/A.
我正在使用 Terragrunt 和 Terraform 版本 0.14.8。
\n我的项目使用 mono 存储库结构,因为项目要求将 Terragrunt 文件和 Terraform 模块打包在一个包中。
\n文件夹结构:
\nproject root:\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 environments\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 prd\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 rds-cluster\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 terragrunt.hcl\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 terragrunt.hcl\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 modules\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 rds-cluster\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 output.tf\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 variables.tf\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 secretsmanager-secret\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 output.tf\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 variables.tf\nRun Code Online (Sandbox Code Playgroud)\n在 prd/terragrunt.hcl 中,我定义了远程状态块和生成提供程序块。
\nremote_state {\n backend = "s3"\n ...\n}\n\ngenerate "provider" {\n path = "provider.tf"\n if_exists = "overwrite_terragrunt"\n\n contents = <<EOF\nterraform {\n required_providers {\n aws …Run Code Online (Sandbox Code Playgroud) 我有一个模块,可以创建具有公共和私有子网的 VPC
module "vpc" {
count = var.vpc_enabled ? 1 : 0
source = "./vpc"
}
Run Code Online (Sandbox Code Playgroud)
作为该模块的输出,我正在提取私有子网
output "private_subnets" {
value = aws_subnet.private.*.id
}
Run Code Online (Sandbox Code Playgroud)
然后我想使用该子网列表作为另一个模块的输入:
module "eks" {
source = "./eks"
name = var.name
private_subnets = var.vpc_enabled ? module.vpc.private_subnets : var.private_subnets_id
}
Run Code Online (Sandbox Code Playgroud)
基本上我想要实现的是,用户可以选择是否要创建新的 VPC 或使用现有 VPC 的子网列表作为输入。
我现在遇到的问题是我在 terraform plan 中遇到以下错误:
on main.tf line 32, in module "eks":
32: private_subnets = var.vpc_enabled ? module.vpc.private_subnets : var.private_subnets_id
|----------------
| module.vpc is tuple with 1 element
This value does not have any …Run Code Online (Sandbox Code Playgroud)