标签: terraform-provider-aws

如何在 AWS 中使用 Terraform 为应用程序负载均衡器创建自定义域

我一直在尝试弄清楚如何使用 Terraform 创建具有自定义名称的应用程序负载均衡器。到目前为止我有这个:

\n
resource "aws_alb" "application_load_balancer" {\n  name               = "${var.brand}-be-${var.environment_name}-load-balancer"\n  tags               = local.tags\n  load_balancer_type = "application"\n  subnets            = data.aws_subnets.public_subnets.ids\n\n  # security group\n  security_groups    = [aws_security_group.sg_load_balancer.id]\n}\n\n# Hosted Zone for new-dev.foocorp.com\nresource "aws_route53_zone" "zone_dev" {\n  name    = "new-dev.foocorp.com"\n  comment = "Hosted Zone for new-dev.foocorp.com"\n  records = [ aws_alb.application_load_balancer.dns_name ]\n\n  tags = merge(local.tags, {\n    Name = "new-dev.foocorp.com"\n  })\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是,我得到:

\n
\xe2\x95\xb7\n\xe2\x94\x82 Error: Unsupported argument\n\xe2\x94\x82 \n\xe2\x94\x82   on main.tf line 323, in resource "aws_route53_zone" "zone_dev":\n\xe2\x94\x82  323:   records = [ aws_alb.application_load_balancer.dns_name ]\n\xe2\x94\x82 \n\xe2\x94\x82 An argument …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform terraform-provider-aws aws-application-load-balancer

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

导入密钥对后运行 terraform apply 时,terraform 想要销毁(替换)它,为什么以及这意味着什么?

我有以下地形配置:

resource "aws_key_pair" "default_key_pair" {
  key_name   = "default_key_pair"
  public_key = file("../../public_keys/default_key.pub")
}
Run Code Online (Sandbox Code Playgroud)

然后,我最初运行:

terraform import aws_key_pair.default_key_pair default_key_pair
Run Code Online (Sandbox Code Playgroud)

跟进的是

terraform apply
Run Code Online (Sandbox Code Playgroud)

然后它说

# aws_key_pair.default_key_pair must be replaced
-/+ resource "aws_key_pair" "default_key_pair" {
      ~ arn             = "arn:aws:ec2:place:id:key-pair/default_key_pair" -> (known after apply)
      ~ fingerprint     = "safasldjfjfljasfjasodjflasjfsdljfasdjf" -> (known after apply)
      ~ id              = "default_key_pair" -> (known after apply)
      + key_name_prefix = (known after apply)
      ~ key_pair_id     = "key-somethin-something" -> (known after apply)
      ~ key_type        = "ed25519" -> (known after apply)
      + public_key      = …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform terraform-provider-aws

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

如何在 terraform 中定义“assume_role_policy”?

这是我在 terraform 中的 aws_iam_role 定义

resource "aws_iam_role" "server_role" {
  name = "server-role"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "sts:AssumeEnvironment",
        "sqs:ChangeMessageVisibility",
        "sqs:ReceiveMessage",
        "sqs:SendMessage",
        "s3:GetObject*",
        "s3:ListBucket*",
        "s3:PutBucket*",
        "s3:PutObject*"
      ],
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行时出现此错误terraform plan

错误:应用计划时出错:

发生了 1 个错误:

  • aws_iam_role.server_role:发生 1 个错误:

  • aws_iam_role.server_role:创建 IAM 角色服务器角色时出错:MalformedPolicyDocument:AssumeRole 策略只能指定 STS AssumeRole 操作。状态代码:400,请求 ID:55f1bfaf-a121-11e9-acaf-bb57d635757b

我基本上想让服务器读/写 S3 存储桶和读/写 SQS 队列。

显然,我不能添加这些sqs:*,并s3:*在同一个地方。我怎样才能在 terraform 中做到这一点?

terraform terraform-provider-aws

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

Lambda链接-使用Terraform从另一个Lambda调用Lambda

我试图从另一个调用一个AWS Lambda并执行Lambda链接。这样做的基本原理是,AWS不提供来自同一S3存储桶的多个触发器。

我创建了一个带s3触发器的lambda。第一个lambda的Java代码将侦听S3事件,并包含另一个lambda的调用。第二个lambda将从第一个lambda调用。两种lambda的创建都是通过terraform完成的。

Lambda A具有S3触发器。这将在特定存储桶上的S3事件上调用。Lambda A将进行处理,并使用调用请求来调用LambdaB。来自Lambda A的Lambda B调用Java中的代码是:

public class EventHandler implements RequestHandler<S3Event, String> {
  @Override
  public String handleRequest(S3Event event, Context context) throws RuntimeException {
    InvokeRequest req = new InvokeRequest()
    .withFunctionName("LambdaFunctionB")
    .withPayload(json);
    return "Lambda B invoked"
  }
}
Run Code Online (Sandbox Code Playgroud)

两个lambda都是使用terraform创建的。以下脚本:
Lambda terraform:

module "lambda_function" {
   source = "Git Path"
   absolute_artifact_path = "../lambda.jar"
   lambda_function_name = "LambdaFunctionA"
   lambda_function_description = ""
   lambda_function_runtime = "java8"
   lambda_handler_name = "EventHandler"
   lambda_execution_role_name = "lambda-iam-role"
   lambda_memory = "512"
   dead_letter_target_arn = "error-handling-arn"

}

resource "aws_lambda_permission" "allow_bucket" {
  statement_id  = "statementId" …
Run Code Online (Sandbox Code Playgroud)

aws-lambda terraform terraform-provider-aws

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

如何将安全组附加到 terraform 中的 aws 实例

我正在尝试探索 terraform 在 AWS 中创建自动化基础设施。我不清楚如何将安全组附加到 terraform 中的 aws 实例。

例如,是否有任何属性可以指定安全组,如下所示

resource "aws_instance" "web" {
  ami           = "ami-a1b2c3d4"
  instance_type = "t2.micro"
}
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform terraform-provider-aws

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

有没有办法从 Terraform 脚本创建 WAFv2

我设法使用 Terraform 脚本在 AWS 上构建了一个 WAF(v1) 基础设施组件。自 2019 年 11 月起,AWS 建议改用 WAFv2,但我不知道如何使用 Terraform 编写此脚本。

terraform amazon-waf terraform-provider-aws

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

Terraform - 无法使用 terraform-aws-modules/security-group/aws 定义安全组

我正在尝试此模块中的示例 https://registry.terraform.io/modules/terraform-aws-modules/security-group/aws/3.10.0

主要.tf:

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"

  name = "${var.environment}-project-vpc"
  cidr = "10.0.0.0/16"

  #
  # Important!
  # https://github.com/terraform-aws-modules/terraform-aws-vpc/issues/403
  # Only append or delete from the end of the list
  #
  azs             = ["us-east-2a", "us-east-2b", "us-east-2c"]
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets  = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]

  enable_nat_gateway     = true
  single_nat_gateway     = true
  one_nat_gateway_per_az = false

  enable_dns_hostnames = true
  enable_dns_support   = true

  tags = module.project_config.tags
}


module "bastion_sg" {
  source = "terraform-aws-modules/security-group/aws"

  name        = "bastion-service"
  description = "Security group for …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-aws terraform0.12+ terraform-aws-modules

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

AWS:AWS HTTPS API 网关的资源策略,用于限制对特定 IP 的访问

最近AWS发布了基于HTTPS的API网关(不是REST)。我们使用 Terraform 来管理 AWS 资源,并且我们有一个服务来创建 AWS HTTPS API 网关资源,存在一个安全问题,即我们允许任何 IP/系统调用 API,因此我们计划添加一个策略(资源策略)以限制仅访问特定 IP。对于 REST API 网关来说,实现这一点很容易,因为我们有aws_api_gateway_rest_api_policy资源来通过 Terraform 创建策略并将其附加到网关,但对于 HTTPS API 网关却无法实现同样的效果。我们使用aws_apigatewayv2_api创建 HTTPS 网关资源,但找不到附加策略的资源,或者在创建网关本身时没有指定策略的选项。如果您能了解如何将策略附加到基于 HTTPS 的 API,我们将不胜感激。谢谢。

amazon-web-services terraform aws-api-gateway terraform-provider-aws

0
推荐指数
2
解决办法
3141
查看次数

动态数据政策内容

请帮助理解如何创建这样的东西?

data "aws_iam_policy_document" "assume_role_policy" {
  statement {
    actions = ["sts:AssumeRole"]
    principals {
      type        = "Service"
      identifiers = ["ec2.amazonaws.com"]
    }
  }

  dynamic "statement" {
    for_each     = var.assume_role_identities != [] ? [true] : []
    content {
      actions = ["sts:AssumeRole"]
      principals {
        type        = "AWS"
        identifiers = var.assume_role_identities
      }
    }
  }

  dynamic "statement" {
    for_each     = var.assume_role_services != [] ? [true] : []
    content {
      actions = ["sts:AssumeRole"]
      principals {
        type        = "Service"
        identifiers = var.assume_role_services
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这段代码的问题是,如果我不指定任何应该具有访问权限的角色或服务,则会退出并出现没有主体的错误。是否可以在动态块上设置一些计数条件?或者如何解决它?

问题说明:

问题是,如果我只想传递某个值,它将无法工作,因为它会形成一个空值 …

terraform terraform-provider-aws terraform0.12+

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

在 terraform 销毁期间删除文本文件

我试图hosts在执行时从本地计算机中删除生成的 Ansible 库存文件terraform destroy

当我运行时,terraform apply我用来provisioner "local-exec"创建hosts文件,稍后由部署期间调用的 ansible playbook 使用。

provisioner "local-exec" {
    command = "echo master ansible_host=${element((aws_instance.kubeadm-node.*.public_ip),0)} >> hosts"
  }
Run Code Online (Sandbox Code Playgroud)

hosts当我删除所有资源时是否可以确保文件被删除terraform destroyhosts执行时删除文件的最简单方法是什么terraform destroy

感谢您的帮助,如果我的解释不够清楚,请告诉我。

delete-file terraform terraform-provider-aws

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