标签: terraform-provider-aws

在 terraform 中使用 for_each 时缺少资源实例键

我正在 terraform 中使用 for_each 创建多个 s3 存储桶。这是我正在使用的代码

\n
resource "aws_s3_bucket" "s3_private" {\n  for_each = var.git_repo_branch_env\n  bucket   = each.value.override_domain_name == "" ?  each.value.sitename_prefix == "" ? each.value.domain_name : join(".", [each.value.sitename_prefix, each.value.domain_name]) : each.value.sitename_prefix == ""  ? each.value.override_domain_name : join(".", [each.value.sitename_prefix, each.value.override_domain_name])\n  force_destroy = true\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我想为创建的每个存储桶设置 ACL 属性,这是我尝试使用的代码

\n
resource "aws_s3_bucket_acl" "s3_private_acl" {\n  bucket = aws_s3_bucket.s3_private.bucket\n  acl    = "private"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我收到以下错误消息

\n
\n

\xe2\x94\x82 错误:缺少资源实例密钥 \xe2\x94\x82 \xe2\x94\x82 位于\n../../modules/cloudfront-edge-auth-acp/main.tf 第 149 行,位于resources\n"aws_s3_bucket_acl" "s3_private_acl": \xe2\x94\x82 149: bucket =\naws_s3_bucket.s3_private.bucket \xe2\x94\x82 \xe2\x94\x82 因为 aws_s3_bucket.s3_private\n 设置了 …

terraform terraform-provider-aws

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

Terraform 模块 s3 生命周期规则不起作用

我有一个 s3 生命周期规则,应该使用生命周期规则在 n 天后删除失败的分段上传。我想用lookup而不是try

resource "aws_s3_bucket_lifecycle_configuration" "default" {

  count    = length(var.lifecycle_rule) != 0 ? 1 : 0
  bucket   = aws_s3_bucket.bucket.bucket
  dynamic "rule" {
    for_each = try(jsondecode(var.lifecycle_rule), var.lifecycle_rule)

    content {
      id     = lookup(rule.value, "id", "default")
      status = lookup(rule.value, "status", "Enabled")


      dynamic "abort_incomplete_multipart_upload" {
        for_each = lookup(rule.value, "abort_incomplete_multipart_upload", null) != null ? [rule.value.abort_incomplete_multipart_upload] : []
        content {
          days_after_initiation = abort_incomplete_multipart_upload.value.days_after_initiation
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在子模块中使用此模块资源时,它不起作用

module "test" {

  source  = "./s3"

  bucket_name = "test"
  lifecycle_rule = [ …
Run Code Online (Sandbox Code Playgroud)

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

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

Terraform 提供程序问题:registry.terraform.io/hashicorp/s3

我目前有一段代码,我一直在安静地使用它,该代码调用自定义 S3 模块。今天,我尝试运行相同的代码,但开始收到有关提供程序的错误。

\n
\n

\xe2\x95\xb7 \xe2\x94\x82 错误: 无法查询可用的提供程序包 \xe2\x94\x82 \xe2\x94\x82 无法\n检索提供程序 hashicorp/s3 的可用版本列表:\n提供程序注册表registry.terraform.io 没有名为\n\xe2\x94\x82 的提供程序registry.terraform.io/hashicorp/s3 \xe2\x94\x82 \xe2\x94\x82 所有模块都应指定\n其 required_providers,以便外部消费者在使用模块时将获得\n正确的提供者。要查看 \xe2\x94\x82 当前依赖于 hashicorp/s3 的模块,请运行以下命令: \xe2\x94\x82
\nterraformproviders

\n
\n

进行一些挖掘似乎 terraform 正在寻找模块registry.terraform.io/hashicorp/s3,该模块不存在。

\n

到目前为止,我已经尝试了以下方法:

\n
    \n
  • 验证 S3 资源代码符合 Hashicorp 今年升级到 4.x 的标准。另外,我已经使用它几个月了,没有任何问题。
  • \n
  • 删除 .terraform 目录并重新运行 terraform init (没有成功,同样的错误)
  • \n
  • 删除 .terraform 目录和 .terraform.hcl 锁定并运行 terraform init -upgrade (未成功)
  • \n
  • 我尝试更新我的提供商的文件以尝试强制升级(未成功)
  • \n
  • 我尝试将提供程序更改为 >= 当前版本以获取最新版本,但没有成功
  • \n
\n

进一步阅读,它指的是 terraform 模块的缓存问题。我尝试运行terraformproviderslock并收到此错误。

\n
\n

错误:无法检索用于锁定 \xe2\x94\x82 \xe2\x94\x82 的提供程序 …

amazon-web-services terraform terraform-provider-aws

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

如何从 terraform 中的 aws_iam_user 获取 aws 账户 ID?

我正在尝试使用 terraform 将以下策略添加到 iam 用户。如何在 upload_user_user 的策略中添加帐户 ID?


resource "aws_iam_user" "product_upload_user" {
  name = "cc-${terraform.workspace}-product-upload-user"
}

resource "aws_iam_user_policy" "allow_upload" {
  user   = aws_iam_user.product_upload_user.name
  policy = data.aws_iam_policy_document.allow_upload.json
}

data "aws_iam_policy_document" "allow_upload" {

  statement {
    sid       = "STSToken"
    effect    = "Allow"
    actions   = ["sts:GetFederationToken"]
    # resources = ["arn:aws:sts::${aws_iam_user.product_upload_user.<account_id>}:federated-user/S3UploadWebToken"]
  }
}
Run Code Online (Sandbox Code Playgroud)

尝试实施本教程中的策略:https://next-s3-upload.codingvalue.com/setup

amazon-web-services amazon-iam terraform terraform-provider-aws

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

如何将现有的vpc导入到此模块

您好,我正在尝试使用 terraform 模块导入现有资源 terraform-aws-modules/vpc/aws

\n

这是我的模块定义

\n
module "vpc" {\n  source = "terraform-aws-modules/vpc/aws"\n\n  name = "eks-dev"\n  cidr = "10.0.0.0/16"\n\n  azs             = ["us-east-1b", "us-east-1a"]\n  public_subnets = ["10.0.2.0/24", "10.0.1.0/24"]\n\n  enable_nat_gateway = false\n  enable_vpn_gateway = false\n\n  tags = {\n    Terraform = "true"\n    Environment = "dev"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

当我执行计划时

\n
 # module.vpc.module.vpc.aws_vpc.this[0] will be created\n  + resource "aws_vpc" "this" {\n      + arn                                  = (known after apply)\n      + cidr_block                           = "10.0.0.0/16"\n      + default_network_acl_id               = (known after apply)\n      + default_route_table_id               = (known after apply)\n      + default_security_group_id …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform terraform-provider-aws

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

CRON 失败表达

我正在构建一个 Cloudwatch 触发器,以在工作周(周一至周五)的 9 点至 17 点(上午 9 点至下午 5 点)之间每小时触发一次

Terraform 向我抛出此错误:

ValidationException: Parameter ScheduleExpression is not valid.
Run Code Online (Sandbox Code Playgroud)

这是我的时间表表达式:schedule_expression = "cron(0 9-17 * * MON-FRI *)"

有谁知道为什么无效?

cron amazon-web-services terraform terraform-provider-aws

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

Terraform ec2 实例类型有条件吗?

我想根据 .tfvars 文件的条件创建 Spot 实例。否则我想要一个常规的 ec2 实例。我知道有一个三元条件,但不确定如何正确使用它。

spot = var.spot_instance ? instance_market_options {
    market_type = "spot"
  } : 
Run Code Online (Sandbox Code Playgroud)
resource "aws_launch_template" "foo" {
  name = "foo"
  iam_instance_profile {
    name = "test"
  }
  image_id = "ami-test"
  instance_market_options {
    market_type = "spot"
  }
  instance_type = "t2.micro"
}
Run Code Online (Sandbox Code Playgroud)

或者可能是这个?

instance_market_options = var.spot_instance ? {
    market_type = "spot" 
  } : 
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 amazon-web-services terraform terraform-provider-aws

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

在 Terraform 中,“${element(aws_subnet.public.*.id, count.index)}”是什么?

谁能解释一下这一行。

subnet_id      = "${element(aws_subnet.public.*.id, count.index)}"
Run Code Online (Sandbox Code Playgroud)

我在 terraform 代码中使用它来创建一个堆栈

amazon-web-services terraform terraform-provider-aws

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

用于创建 AWS SNS 主题订阅的 Terraform 模块

我找不到 terraform 模块来创建 AWS SNS 主题订阅。例如:我使用“terraform-aws-modules/sns/aws”来创建 SNS 主题。有人可以指出我要订阅的源模块吗?

amazon-web-services terraform terraform-provider-aws

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

如何指定实例名称作为 aws_instance 的一部分

如何将实例名称指定为 aws_instance 的一部分,正在启动的实例没有与其关联的显示名称,并且在 EC2 控制台中显示为空。注意:instance_id 正确显示

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance

amazon-web-services terraform terraform-provider-aws

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

如何在 terraform 的 file() 中传递变量

需要使用 terraform 创建 cloudfront 公钥,这里公钥是根据环境单独的,并以 {env_name}.pem 形式存储在目录名称 public-key-cf 中。env_name 可以是 dev、stage、prod。

为了实现这一点,使用了以下 terraform 块:

resource "aws_cloudfront_public_key" "documents-signing-key" {
  name        = "cf-public-key"
  comment     = "Public Key"
  encoded_key = file("${path.module}/public-key-cf/"${var.environment}".pem)"
}
Run Code Online (Sandbox Code Playgroud)

我收到错误如下:

This character is not used within the language.
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

谢谢。

variables file terraform terraform-provider-aws

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