标签: terraform-provider-aws

如何在 Terraform 中按标签获取所有 AWS Lambda

我有带有 Name=product 标签的 Lambda。

我想使用 Terraform 获取它们,查看aws_lambda_function,我只能通过 function_name 获取单个 lambda

data "aws_lambda_function" "existing" {
   function_name = var.function_name
}
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform devops terraform-provider-aws

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

如何在 terraform apply 中移动 terraform 资源

我在 terraform 模块中定义了自定义资源:

resource "aws_alb_target_group" "whatever" 
{
   ....
}
Run Code Online (Sandbox Code Playgroud)

事实证明whatever这个名字不好,我需要更新它。

经典的方法是登录到每个环境并执行terraform state mv,但是我有很多环境,并且没有自动化执行此类操作。

如何在不手动移动状态的情况下更改资源名称(仅通过编辑 terraform 模块和应用计划)?

amazon-web-services terraform terraform-provider-aws

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

修改 Lambda 函数配置时出错:Lambda 和 VPC 的 ValidationException

我正在使用 AWS 模块在 terraform 中构建 lambda,我的代码如下:

\n
module "lambda_function" {\n\n# * Lambda module configs\n  source  = "terraform-aws-modules/lambda/aws"\n  version = "3.0.0"\n\n  # * Lambda Configs\n  function_name = "${var.function_name}-${var.env}"\n  description   = "My Project"\n  handler       = local.constants.lambda.HANDLER\n  runtime       = local.constants.lambda.VERSION\n  memory_size                       = 128\n  cloudwatch_logs_retention_in_days = 14\n  source_path               = "./function/"\n  timeout                   = local.constants.lambda.TIMEOUT\n  create_async_event_config = true\n  maximum_retry_attempts    = local.constants.lambda.RETRIES_ATTEMPT\n    \n  layers = [\n    data.aws_lambda_layer_version.layer_requests.arn\n  ]\n\n  environment_variables = {\n    AWS_ACCOUNT        = var.env\n    SLACK_HOOK_CHANNEL = var.SLACK_HOOK_CHANNEL\n  }\n\n  tags = {\n    Name = "${var.function_name}-${var.env}"\n  }\n\n  trusted_entities = …
Run Code Online (Sandbox Code Playgroud)

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

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

带模块的 Terraform 计数方法

我正在使用 terraform 并通过模块配置资源。在某些环境中我想创建一个模块,在其他环境中则不想,最好的方法是什么?尝试使用计数方法:

module "module_name" {
  create                   = var.create_module
  source                   = "../../modules/module" 
}
Run Code Online (Sandbox Code Playgroud)

模块内部当然包含检查是否创建资源的资源:

resource "some resource" "main" {
  count = var.create  == true ? 1 : 0
Run Code Online (Sandbox Code Playgroud)

由于我在模块内使用 count,我在模型中的所有资源(数十个)上收到以下错误:

Because some_resource.main has "count" set, its attributes must
be accessed on specific instances.

For example, to correlate with indices of a referring resource, use:
    some_resource.main[count.index]
Run Code Online (Sandbox Code Playgroud)

有没有办法在模块或根内部使用 count,而不重构 [count.index] 的整个代码(谁知道可能会导致许多其他问题)?

terraform terraform-provider-aws

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

这里不需要 serverlessv2_scaling_configuration 类型的 Terraform 块

我正在尝试使用 Terraform 配置 AWS Aurora Postgres Serverless v2。我在这里阅读了文档,它说,它只需要这些参数:

\n
    \n
  • engine_mode设置"provisioned"
  • \n
  • serverlessv2_scaling_configuration在集群中
  • \n
  • resource "aws_rds_cluster_instance"instance_class设置为"db.serverless"
  • \n
\n

但我返回了这个错误

\n
\xe2\x95\xb7\n\xe2\x94\x82 Error: Unsupported block type\n\xe2\x94\x82 \n\xe2\x94\x82   on ../../modules/postgres_serverless_v2/main.tf line 70, in resource "aws_rds_cluster" "pg":\n\xe2\x94\x82   70:   serverlessv2_scaling_configuration {\n\xe2\x94\x82 \n\xe2\x94\x82 Blocks of type "serverlessv2_scaling_configuration" are not expected here.\n
Run Code Online (Sandbox Code Playgroud)\n

当我尝试寻找解决方案时,我不太确定下一步该做什么,但每个人似乎对此都没有问题。

\n

下面是我的代码片段:

\n
resource "aws_rds_cluster" "pg" {\n  cluster_identifier      = "${var.namespace}-${var.env_name}-${var.name}-pg-v2"\n  engine                  = "aurora-postgresql"\n  engine_version          = null\n  engine_mode             = "provisioned"  # still using serverless. requirement …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform terraform-provider-aws aws-aurora-serverless

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

terraform aws:ecs 未部署最新的任务定义

我的地形部署遇到了一个小问题。

新的任务定义是在部署期间创建的。然后我也在网络控制台中看到了这一点。ecs 现在应该实际使用这个新任务定义并更新它。相反,会再次部署最新的修订版。

我的期望是,如果我创建一个新的任务定义并将 arn 从该定义传递到 ecs,它将被部署。

不幸的是,我不知道从这里该去哪里。

我使用以下配置创建了一个 ecs 服务:

resource "aws_ecs_service" "service" {
  name                               = "${var.appPrefix}-api-service-${var.envPrefix}"
  cluster                            = var.ecsClusterId
  task_definition                    = aws_ecs_task_definition.ecsTaskDefinition.arn
  platform_version                   = "1.3.0"
  desired_count                      = 1
  deployment_minimum_healthy_percent = 50
  deployment_maximum_percent         = 200
  launch_type                        = "FARGATE"
  scheduling_strategy                = "REPLICA"
  wait_for_steady_state              = true
  force_new_deployment               = true

  network_configuration {
    security_groups  = [var.ecsSecurityGroupId]
    subnets          = [var.privateSubnet1Id, var.privateSubnet2Id]
    assign_public_ip = false
  }

  load_balancer {
    target_group_arn = var.targetGroupId
    container_name   = var.containerName
    container_port   = var.httpPort
  }

  lifecycle {
    ignore_changes = [task_definition, desired_count]
  } …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-ecs terraform aws-fargate terraform-provider-aws

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

如何使用 Terraform 附加多个 AWS SQS 策略

我确实有 SQS 的默认策略,如下所示。参考了文档 - https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sqs_queue_policy

如果需要 sns 订阅,我想将该策略附加到默认策略之上。

默认策略如下

  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sqs:SendMessage*"
      ],
      "Resource": [
        "${aws_sqs_queue.queue.arn}"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

附加政策如下

{
      "Sid": "topic-subscription-arn-test",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SQS:SendMessage",
      "Resource": ["${aws_sqs_queue.queue.arn}"],
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn-test"
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

我刚刚尝试过,但政策被覆盖了。有什么想法可以使用 Terraform 附加策略吗?提前致谢。正在寻找这种方法的某种想法吗?可能有超过 2 个策略,因此我正在尝试附加这些策略。

amazon-sqs amazon-web-services terraform terraform-provider-aws

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

Terraform 生命周期“此处不能使用变量”

当我尝试运行“Terraform init”时出现错误,我在这里缺少什么?

\n
\xe2\x94\x82 Error: Variables not allowed\n\xe2\x94\x82 \n\xe2\x94\x82   on ../../resources/s3-bucket/main.tf line 12, in resource "aws_s3_bucket" "s3-bucket":\n\xe2\x94\x82   12:     prevent_destroy = var.prevent_destroy\n\xe2\x94\x82 \n\xe2\x94\x82 Variables may not be used here.\n\xe2\x95\xb5\n\n\xe2\x95\xb7\n\xe2\x94\x82 Error: Unsuitable value type\n\xe2\x94\x82 \n\xe2\x94\x82   on ../../resources/s3-bucket/main.tf line 12, in resource "aws_s3_bucket" "s3-bucket":\n\xe2\x94\x82   12:     prevent_destroy = var.prevent_destroy\n\xe2\x94\x82 \n\xe2\x94\x82 Unsuitable value: value must be known\n
Run Code Online (Sandbox Code Playgroud)\n

资源:

\n
    resource "aws_s3_bucket" "s3-bucket" {\n      bucket                  = var.bucket_name\n      tags = {\n        Name        = var.tags_name\n        Environment = var.tags_environment\n      }\n      versioning { enabled = var.versioning }\n      lifecycle {\n …
Run Code Online (Sandbox Code Playgroud)

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

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

如何使用 Terraform 获取现有 VPC 的所有 CIDR 并将它们作为入站规则添加到安全组?

我有一个现有的 VPC,它有 4 个 CIDR,我需要检索这些 CIDR 并将它们作为入站规则添加到安全性中。有没有办法在 Terraform 中做到这一点?我没有找到一种方法来做到这一点 Terraform

data "aws_vpc" "example_vpc" {
  id = "vpc-xxxxx" # Replace with the ID of your VPC
}

output "vpc_cidr_block" {
  value = "${data.aws_vpc.example_vpc.cidr_block}"
}
Run Code Online (Sandbox Code Playgroud)

我已尝试上面的代码片段,但输出值仅给出主要 CIDR。

Terraform 版本:v0.14.5

terraform terraform-provider-aws

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

是否有任何资源可以使用 terraform 连接 AWS RDS 上的计算资源

我已经在 VPC 中创建了 EC2、RDS,并希望将计算资源连接到它。搜索相同的但找不到。是否有任何资源或参数可以在 terraform 上连接它。

在此输入图像描述

amazon-rds terraform terraform-provider-aws

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