标签: terraform-provider-aws

Terraform:添加单个规则时,所有安全组规则都会被销毁并替换

地形信息:

  • 地形 v0.12.18
  • 提供商.aws v2.43.0
  • 提供者.模板 v2.1.2

我定义了一个安全组:

如果我运行terraform planterraform 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 terraform-provider-aws

4
推荐指数
1
解决办法
3906
查看次数

使用 terraform 转义字符串中的特殊字符

您能帮我使用 terraform 实现以下场景吗?我需要在字符串值中的每个特殊字符前加上 // 前缀。

示例:mysplchr="test O'riel*abc"这必须更改为"test O//'riel//*abc"

谢谢

terraform terraform-provider-azure terraform-provider-aws terraform-provider-gcp terraform0.12+

4
推荐指数
1
解决办法
1万
查看次数

从 Terraform 输入变量中获取 ECS 任务定义环境变量

我正在尝试使用 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

4
推荐指数
1
解决办法
2万
查看次数

如何在terraform dynamodb中指定复合主键(hashkey)

我的目标是创建resource "aws_dynamodb_table"具有复合主键的 terraform,如AWS 文档中所述。

根据Terraform 文档,它只允许hash_key有一个属性名称。我怎样才能拥有一个hash_key由多个属性组成的?

database amazon-dynamodb terraform terraform-provider-aws

4
推荐指数
1
解决办法
5121
查看次数

如何使用 Terraform 在 AWS SSM 参数中存储三元素元组?

我正在使用 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类型参数?

amazon-web-services terraform terraform-provider-aws

4
推荐指数
1
解决办法
4786
查看次数

Terraform 不使用提供的 AWS 配置文件?

我稍后会更新,但现在...

$ 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)

terraform terraform-provider-aws

4
推荐指数
1
解决办法
8110
查看次数

icmp 协议入口规则 aws_security_group 资源的 from_port 和 to_port 值?

我想为安全组设置入口“Custome ICMP (IPv4)”规则,并且aws_security_group页面不清楚我需要为from_portto_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.

terraform terraform-provider-aws

4
推荐指数
1
解决办法
1万
查看次数

使用 terragrunt 生成提供者块会导致与模块中的 require 提供者块发生冲突

我正在使用 Terragrunt 和 Terraform 版本 0.14.8。

\n

我的项目使用 mono 存储库结构,因为项目要求将 Terragrunt 文件和 Terraform 模块打包在一个包中。

\n

文件夹结构:

\n
project 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\n
Run Code Online (Sandbox Code Playgroud)\n

在 prd/terragrunt.hcl 中,我定义了远程状态块和生成提供程序块。

\n
remote_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)

terraform terragrunt terraform-provider-aws terraform0.12+

4
推荐指数
1
解决办法
1万
查看次数

在 aws_ecs_service 的 terraform 中,我们如何设置服务集自动缩放

在 Terrafrom 中创建 ecs 服务时,我们如何定义 Auto Scaling 服务。我没有看到资源 aws_ecs_service 有这个选项。

在此输入图像描述

amazon-web-services terraform terraform-provider-aws

4
推荐指数
1
解决办法
3040
查看次数

提取子网列表会导致错误 - 元组包含 1 个元素

我有一个模块,可以创建具有公共和私有子网的 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)

amazon-web-services terraform terraform-provider-aws

4
推荐指数
1
解决办法
7962
查看次数