标签: terraform

如何创建通用的Elastic beantalk模块?

我正在尝试为弹性beantalk资源创建可重用的terraform模块。我一直在努力弄清楚如何传递应用程序环境变量。我想做这样的事情:

./api.tf

module "eb" {
  source = "./eb"

  name    = "api"
  vpc_id  = "${var.vpc_id}"
  ...

  environment = {
    VAR1  = "${var.var1}"
    VAR2  = "${var.var2}"
    VAR3  = "${var.var3}"
    ...
  }  
}
Run Code Online (Sandbox Code Playgroud)

./eb/eb.tf

variable "name"         { }
variable "vpc_id"       { }
variable "environment"  { type = "map" }

resource "aws_elastic_beanstalk_environment" "api" {
  name  = "${var.name}"
  ...

  setting {
    namespace   = "aws:ec2:vpc"
    name        = "VPCId"
    value       = "${var.vpc_id}"
  }

  # application environment variables

  # Here's where I'm stuck:
  # I would like to …
Run Code Online (Sandbox Code Playgroud)

terraform

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

如何确定 terraform 执行优先级

在terraform中创建rds和elastic缓存后,我想调整优先级,以便设置ec2。

这对 terraform 可行吗?

准确地说,我在 ec2 上运行 docker。我想将弹性缓存的端点,由 terraform 创建的 RDS 传递给具有环境变量的 docker。

感谢您阅读我的问题。

amazon-ec2 amazon-web-services terraform

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

Packer和Terraform集成的工作流程示例

我正在尝试在VMWare Hypervisor中为虚拟机创建一个实验室,以便在RHEL中安装集群; 我已经看到Packer和Terraform非常有趣,但是我找不到关于他们工作流程的清晰和/或详细的样本,特别是如何在Packer中创建图像然后让Terraform使用它.我已经看到Packer具有构建功能,但即使是某些类型的部署,我也不明白这些是否与Terraform重叠; 我已经读过可以通过另一个HashiCorp产品Atlas实现某种类型的自动化,但我不想使用它,至少在这个软件的研究和试用阶段.所以我想做的是使用Packer(RHEL base以及其他功能)创建与VMWare兼容的虚拟机映像,将它们传递给在我的esxi中创建vm的Terraform工件.

希望能找到指导.

esxi packer vsphere terraform devops

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

Terraform aws_cognito_identity_pool :客户端 ID 和提供程序名称应该是什么?

错误:“cognito_identity_providers.0.client_id 必须仅包含字母数字字符和下划线”

此问题来自 aws_cognito_identity_pool 资源上的 client_id 和 provider_name。我们从哪里得到这些值。Terraform 不遵循 AWS 命名。我已经尝试过 Pool id 和 Pool ARN。但那些不起作用我也试过应用程序客户端ID

下面文档中提供的示例不清楚

cognito_identity_providers {
    client_id               = "6lhlkkfbfb4q5kpp90urffae"
    provider_name           = "cognito-idp.us-east-1.amazonaws.com/us-east-1_Tv0493apJ"
    server_side_token_check = false
  }
Run Code Online (Sandbox Code Playgroud)

amazon-cognito terraform

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

Terraform-具有相同aws_instance资源的多个子网

我试图部署多个EC2实例,每个实例使用相同的aws_instance资源块在不同的子网中。

当我将count参数设置为多个服务器时,它将在同一子网中全部建立它们。

有没有办法通过Terraform做到这一点?

在下面,您将找到我的Terraform块:

resource "aws_instance" "ec2-instance" {
  ami                    = "${var.ec2_ami}"
  instance_type          = "${var.instance_type}"
  key_name               = "${var.key_name}"
  vpc_security_group_ids = ["${var.security_group}"]

  subnet_id = "${var.subnet_id}"
  count     = "${var.count}"

  root_block_device {
    volume_size = "${var.root_volume_size}"
    volume_type = "${var.root_volume_type}"
  }

  tags {
    Name = "${var.app_name}"
  }
}
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform

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

AWS S3 生命周期配置

我想设置 S3 存储桶的生命周期规则,以便存储桶中的每个文件在生成后 7 天将被删除。

如果我设置生命周期规则如下(下面是terraform代码,类似于控制台设置,所以我这里只用它),从今天起7天后,“test”桶中的所有文件是否会被删除,或者每个文件都将被删除因为它们是在不同的日期创建的,所以在不同的日期删除?我希望它们在不同的日期被删除,而不是一起被删除。

顺便说一句,我想我不需要配置:永久删除以前的版本,因为我的 s3 没有启用版本。如果我错了,请纠正我。

resource "aws_s3_bucket" "s3" {
  bucket        = "test"
  lifecycle_rule {
    id      = "remove_after_7d"
    enabled = true
    expiration {
      days = 7
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

amazon-s3 terraform terraform-provider-aws

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

aws_lb 的动态子网映射

我正在尝试使用 Terraform 创建一个网络负载平衡器,重要的是它与防止被破坏的弹性 IP 相关联。

我有如下代码:

resource "aws_lb" "balancer" {
  name = "${var.name}-nlb"

  internal           = "${var.internal}"
  load_balancer_type = "network"
  subnets            = ["${data.aws_subnet_ids.selected.ids}"]

  subnet_mapping {
    subnet_id     = "someid"
    allocation_id = "someid"
  }

  subnet_mapping {
    subnet_id     = "someid"
    allocation_id = "someid"
  }

  subnet_mapping {
    subnet_id     = "someid"
    allocation_id = "someid"
  }

  tags = "${merge(var.tags,
    map("Terraform", "true"),
    map("Environment", var.environment))}"
}
Run Code Online (Sandbox Code Playgroud)

我所追求的是subnet_mapping动态地制作块,因为这段代码位于一个模块中,我想根据传入的子网数量创建映射数量。要么是,要么是传入预定义的块。

有没有办法做到这一点?对我来说重要的是相关的弹性 IP 需要坚持下去。

amazon-web-services terraform terraform-provider-aws

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

在Terraform中使用`execute`插值声明一个变量

我想将一个变量的子字符串声明为另一个变量。我测试了使用terraform控制台获取子字符串。

> echo 'element(split (".", "10.250.3.0/24"), 2)' | terraform console
> 3
Run Code Online (Sandbox Code Playgroud)

我的子网是10.250.3.0/24,我希望我的虚拟机在此子网掩码10.250.3.6中获得私有IP地址。我希望通过查看子网地址来自动分配该地址。我尝试过的

测试文件

variable subnet {
  type = "string"
  default = "10.250.3.0/24"
  description = "subnet mask myTestVM will live"
}

variable myTestVM_subnet {
  type = "string"
  default = "10.250." ${element(split(".", var.trusted_zone_onpremises_subnet), 2)} ".6"
}
Run Code Online (Sandbox Code Playgroud)

然后我通过测试

terraform console
>Failed to load root config module: Error parsing /home/anum/test/test.tf: At 9:25: illegal char
Run Code Online (Sandbox Code Playgroud)

我想这只是简单的语法问题。但不知道是什么!

terraform

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

如果没有提供其值,如何忽略Terraform中的参数?

我正在使用"google_sql_database_instance"资源来创建仅具有私有IP的云实例,并从变量文件或命令行参数中获取_private_network_的值,或者根本不提供任何值.

所有我想要实现的是,创建只有私有IP实例private_network提供,包括_private_network_参数如果提供了它的价值.这里的问题是这个变量不接受空字符串(""),因为它验证了下面的正则表达式.
"projects/((?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)))/global/networks/((?:[a-z](?:[-a-z0-9]*[a-z0-9])?))$".

我如何创建一个可配置的模块(仅在提供private_network时创建私有IP实例,否则完全忽略该参数)并且不强制要求_private_network_变量的值?

google-cloud-sql terraform terraform-provider-gcp

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

KMS加密后无法从S3下载文件

使用terraform,我能够创建启用KMS加密的S3存储桶。但是,当我尝试从启用了S3 KMS的存储桶中下载任何文件时,它无法下载Access Denied

错误日志:

download failed: s3://services-1234567890-cicd-storage/jars/jdbc-0.211.jar to utilities/jdbc-0.211.jar An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
Run Code Online (Sandbox Code Playgroud)

主文件

resource "aws_s3_bucket" "s3_bucket_two" {
  bucket = "dev-analytics-data"
#  bucket = "services-${lookup(var.aws_account_id, terraform.workspace)}-cicd-storage"
  acl    = "${var.acl}"
  versioning {
    enabled = "${var.enable_versioning}"
  }
  server_side_encryption_configuration {
    rule {
      apply_server_side_encryption_by_default {
        kms_master_key_id = "${data.terraform_remote_state.kms_s3.key_arn}"
        sse_algorithm     = "aws:kms"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

使用的IAM政策:-

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::12345678910:role/iam_role_devops_engineer",
                    "arn:aws:iam:: 12345678910:role/EMR_AutoScaling_DefaultRole",
                    "arn:aws:iam:: 12345678910:role/EMR_DefaultRole",
                    "arn:aws:iam:: 12345678910:user/iam_user_cng_jenkins",
                    "arn:aws:iam:: …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services aws-cli terraform aws-kms

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