标签: terraform-provider-aws

Terraform - 如何创建可选数据块

我创建了一些数据块来查找合适的 AMI。我有 4 个数据块来查找基于 4 个操作系统的 4 个 AMI。例子,

data "aws_ami" "centos" {
    owners = ["123456789"]
    most_recent = true
    filter {
        name = "name"
        values = ["CentOS*${var.os-version}*x86_64"]
    }
}
data "aws_ami" "suse" {
    owners = ["amazon"]
    most_recent = true
    filter {
        name = "name"
        values = ["suse-sles-${var.os-version}-sp*-v????????-hvm-ssd-x86_64"]
    }
}
Run Code Online (Sandbox Code Playgroud)

我像下面这样称呼他们ami_id=data.${os_name}.image-id

所以我想要的是只运行已经被调用的数据块。如果用户选择“suse”,则仅运行 suse 数据块。不是所有的人。现在这是一个问题,因为用户根据操作系统选择版本。例如,16.04 仅适用于 ubuntu,不适用于其他任何版本,因此其他数据块会抛出如下异常,

Error: Your query returned no results. Please change your search criteria and try again.

  on main.tf line 79, in data "aws_ami" "suse":
  79: data …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-aws

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

Terraform 跳过 null for_each

我正在为 AMI 设置标签。我有 ubuntu 和 EKS AMI,其中 EKS AMI 需要设置 k8s 版本、containerd 等,其他操作系统不需要这些。我已将 EKS 特定的所有变量声明为默认为 null,假设在运行 for_each 时它们会跳过,但会出错。这是代码和错误。

locals {

  tags = {
    docker_version = var.docker_version
    kubernetes = var.k8s_version
    cni_plugin_version = var.cni_plugin_version
    containerd_version = var.containerd_version
    target = var.target
    source_ami_id = var.source_ami_id
    Release = var.ami_release-version
    Description = var.ami_description
    Name = var.ami_name
    Creator = var.creator
  }

data "aws_ami" "ami_image" {
  most_recent      = true
  owners           = ["xxxxxxxx"]
  name_regex = var.ami_regex
}

output "ami_id" {
  value = data.aws_ami.ami_image.id
}
output "ami_arn" {
  value = …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform terraform-provider-aws

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

设置 S3 策略时出错:MalformedPolicy:策略语法无效

我正在尝试在 Terraform 中设置 S3 存储桶策略。我在模块中编写了以下代码core/main.tf

\n
resource "aws_s3_bucket_policy" "access_to_bucket" {\n\n  bucket = aws_s3_bucket.some_bucket.id\n\n  policy = jsonencode({\n    Version = "2012-10-17"\n    Statement = [\n      {\n        Action    = ["s3:GetObject", "s3:GetObjectAcl", "s3:ListBucket"]\n        Effect    = "Allow"\n        Principal = "${var.some_variable_name}"\n        Resource = [\n          "${aws_s3_bucket.some_bucket.arn}",\n          "${aws_s3_bucket.some_bucket.arn}/*"\n        ]\n      },\n    ]\n  })\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

然后在本地模块中实例化,该模块使用 localstack 在本地运行。

\n

这是生成的计划:

\n
Terraform will perform the following actions:\n\n  # module.local.aws_s3_bucket_policy.access_to_bucket will be created\n  + resource "aws_s3_bucket_policy" "access_to_bucket" {\n      + bucket = "some_bucket"\n      + id     = (known after apply)\n      + policy …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services terraform terraform-provider-aws

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

如何将“–kubelet-extra-args”传递给 Terraform aws_eks_node_group 创建的 AWS EKS 节点组?

我正在按照https://docs.aws.amazon.com/eks/latest/userguide/cni-increase-ip-addresses.html创建 EKS 托管节点组的示例进行操作

配置要求我/etc/eks/bootstrap.sh通过--kubelet-extra-args参数将附加参数传递给脚本。

我的 EKS 工作节点是通过 Terraform 资源配置的aws_eks_node_group

我找不到任何配置资源的选项来允许我传递参数--kubelet-extra-args

我是看错地方还是没有办法实现这一点?

amazon-web-services kubernetes terraform terraform-provider-aws amazon-eks

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

Terraform 错误:属性“requires_compatibility”的值不合适:需要一组字符串

terraform 验证后收到以下错误消息:

#################################################### #############

错误:资源“aws_ecs_task_definition”中 .terraform/modules/backend_deployment/task_definition.tf 第 4 行的属性值类型不正确:

需要兼容性=“FARGATE”

属性“requires_compatibility”的值不合适:需要一组字符串。

#################################################### #############

这是我的任务定义:

resource "aws_ecs_task_definition" "task_definition" {
  family = join("-", [local.cluster_values.backend_name, local.cluster_values.environment, local.cluster_values.random_id])
  network_mode = "awsvpc"
  requires_compatibilities = "FARGATE"
  cpu = 256
  memory = 512
  container_definitions = data.template_file.task_definition_template.rendered
  task_role_arn = local.cluster_values.task_role
}
Run Code Online (Sandbox Code Playgroud)

Terraform-Doku 说道:

require_compatibility - (可选)任务所需的启动类型集。有效值为 EC2 和 FARGATE。

非常感谢您的帮助!

terraform aws-fargate terraform-provider-aws

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

Terraform 属性“route”的值不合适

对 terraform 相对较新,目前正在尝试在 AWS 中构建云基础设施。\n当我使用资源aws_route_table ( https://registry.terraform.io/providers/ ) 文档中的官方示例(略有更改)时,出现错误hashcorp/aws/latest/docs/resources/route_table

\n
resource "aws_route_table" "prod-route-table" {\n  vpc_id = aws_vpc.prod-vpc.id\n\n  route = [{\n      # Route all Traffic to the internet gateway\n      cidr_block = "0.0.0.0/0"\n      gateway_id = aws_internet_gateway.gw.id\n  },{\n      ipv6_cidr_block = "::/0"\n      gateway_id = aws_internet_gateway.gw.id\n  }]\n  \n}\n
Run Code Online (Sandbox Code Playgroud)\n

我收到以下错误消息

\n
Error: Incorrect attribute value type\n\xe2\x94\x82 Inappropriate value for attribute "route": element 0: attributes "carrier_gateway_id",\n\xe2\x94\x82 "destination_prefix_list_id", "egress_only_gateway_id", "instance_id", "ipv6_cidr_block",\n\xe2\x94\x82 "local_gateway_id", "nat_gateway_id", "network_interface_id", "transit_gateway_id", "vpc_endpoint_id",\n\xe2\x94\x82 and "vpc_peering_connection_id" are required.\n
Run Code Online (Sandbox Code Playgroud)\n

添加所有这些属性可以解决该错误,但这会极大地破坏代码。\n以不同方式编写它(请参阅下文)不会导致任何错误,terraform AWS 文档是否不正确,因为它们清楚地说明了第一种编写方式?

\n …

amazon-web-services terraform terraform-provider-aws

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

使用 Terraform 的 aws 子网的子网范围无效

当我尝试使用 terraform 创建子网时,不断收到以下错误。使用 aws 控制台创建子网没有问题。有人可以帮助我吗?

\n

Error: error creating subnet: InvalidSubnet.Range: The CIDR '10.2.0.128/26' is invalid. \xe2\x94\x82 status code: 400

\n

Error: error creating subnet: InvalidSubnet.Range: The CIDR '10.2.0.64/26' is invalid. \xe2\x94\x82 status code: 400

\n

Error: error creating subnet: InvalidSubnet.Range: The CIDR '10.2.0.0/26' is invalid. \xe2\x94\x82 status code: 400

\n

我对 VPC 和子网使用以下 CIDR 范围

\n
variable "cidr_block" {\ndefault       = "10.1.0.0/21"\ndescription   = "VPC CIDR Block"\ntype          = string\n}\n\nvariable "public_subnet_cidr_blocks" {\ndefault     = ["10.1.0.0/26","10.2.0.0/26","10.1.0.64/26","10.2.0.64/26","10.1.0.128/26","10.2.0.128/26"]\ntype        = list\ndescription = "List of public subnet CIDR …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-vpc terraform terraform-provider-aws

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

给定的键不标识此集合值中的元素:terraform

我正在尝试使用 terraform 部署 lambda 函数,代码是用 python 编写的。这是执行该操作的 terraform 代码。

data archive_file UpdateSeqNumInLedgerSummary {
  count       = (var.environment_id == var.prd_environment) ? 1 : 0
  ..
  ..
  ..
  #
}

resource aws_lambda_function update_seqnum_in_indexedledgersummary {
  count            = (var.environment_id == var.prd_environment) ? 1 : 0
  ..
  ..
  ..
  #
}
Run Code Online (Sandbox Code Playgroud)

在部署期间,我还尝试使用aws_lambda_inspiration调用 lambda 函数。这就是我正在做的

data aws_lambda_invocation update_seqnum_invocation {
  count         = (var.environment_id == var.prd_environment) ? 1 : 0
  function_name = aws_lambda_function.update_seqnum_in_indexedledgersummary[count.index].function_name
  input = <<JSON
  {}
  JSON
}
Run Code Online (Sandbox Code Playgroud)

但在部署期间我收到以下错误

Error: Invalid index

  on seqnum-update.tf line 124, …
Run Code Online (Sandbox Code Playgroud)

python terraform terraform-provider-aws

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

基于默认组在 AWS Elasticache 中创建自定义参数组

我正在尝试在 AWS Elasticache 中创建自定义参数组。

我想使用默认参数组作为基础(名为 default.redis5.0.cluster.on 的组,因为这里有我需要的其他所有内容,但只有一个我想更改的属性),请参阅https:// docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/ParameterGroups.Redis.html有关默认参数组的更多详细信息

我的基本假设是,我需要将默认参数组值复制到 Terraform 资源,然后只修改我需要更改的唯一参数。然而,这会产生大量参数,而且似乎不是最简单的方法。

如果我需要在default.redis5.0.cluster.on参数组中复制参数,那么我需要将这些参数放在 Terraform 中。有没有办法将默认资源组导入为 Terraform 配置?

amazon-web-services amazon-elasticache terraform terraform-provider-aws

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

AWS S3 存储桶的 Terraform 文件不断收到错误:提供程序配置无效

编辑:我现在已经修改了问题以显示整个 main.tf 文件。

\n

我有一个 Terraform 文件,该文件应该创建一个 AWS S3 存储桶,但每次运行时我不断收到的错误之一terraform plan是:

\n
\xe2\x94\x82 Error: Invalid provider configuration\n\xe2\x94\x82 Provider "registry.terraform.io/hashicorp/aws" requires explicit configuration. Add a provider block to the root module and configure the provider's required arguments as described in the provider documentation.\n
Run Code Online (Sandbox Code Playgroud)\n

main.tf 文件:

\n
terraform {\n    backend  "s3" {\n    region         = "us-east-1"\n    bucket         = "bucketname"\n    key            = "path/terraform.tfstate" \n    dynamodb_table = "tf-state-lock" \n    access_key = "<access_key>"\n    secret_key = "<secret_key"\n    }\n\n    required_providers {\n      aws = {\n        version …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services terraform terraform-provider-aws

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