标签: terraform-provider-aws

Terraform:使用 for_each 创建多个实例

我很想在 Terraform 的 count/for_each 函数方面得到一些帮助。

目标是将多个 json 文件(当前两个)读入映射列表,并使用特定命名约定创建特定数量的 aws_instances。

配置

cat test_service_1.json
{
      "instance_name": "front",
      "instance_count": "3",
      "instance_type": "t2.micro",
      "subnet_type": "private",
      "elb": "yes",
      "data_volume": ["no", "0"]
}

cat test_service_2.json
{
      "instance_name": "back",
      "instance_count": "3",
      "instance_type": "t2.micro",
      "subnet_type": "private",
      "elb": "yes",
      "data_volume": ["no", "0"]
}

cat main.tf
locals {
  services = [jsondecode(file("${path.module}/test_service_1.json")),
  jsondecode(file("${path.module}/test_service_2.json"))]
}

resource "aws_instance" "test_instance" {
  ami           = "amzn-ami-hvm-2018.03.0.20200206.0-x86_64-gp2"
  instance_type = "t2.micro"
  tags = merge(
    map("Name", "prod-app-?"),
    map("env", "prod")
  )
}
Run Code Online (Sandbox Code Playgroud)

最终我希望代码遍历两个 json 文件并创建:

prod-front-1
prod-front-2
prod-front-3
prod-back-1
prod-back-2 …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-aws

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

如何在 terraform 中使用 AWS HTTP API(不是 REST API)?

亚马逊最近为他们的 api 网关产品发布了HTTP API,我想使用 Terraform 来启动一些。我看到Terraform具有文档aws_apigatewayv2_api资源,这将创造网关本身,但我找不到路,阶段,或任何其他类型的资源,我会需要我的网关文档。

Terraform 还没有完全支持 HTTP API,还是我在某处遗漏了一些文档?

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

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

Terraform EC2 网络损坏

我正在使用 Terraform 0.12.26 并且我想构建一个 AWS Ubuntu 机器实例。

当我运行时terraform apply,一切看起来都正确……但我无法通过 ssh 连接到新的 EC2 机器。我的家庭防火墙允许 ssh 无处不在,我可以 ssh 到任何其他互联网资源。

如果我在同一个区域/az 中手动安装 EC2 实例,ssh 工作正常……这个问题似乎仅限于 Terraform。

$ terraform apply
...
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

aws_key_pair.mykeypair: Creating...
aws_vpc.main: Creating...
aws_key_pair.mykeypair: Creation complete after 2s [id=mykeypair-pub]
aws_vpc.main: Still creating... [10s elapsed]
aws_vpc.main: Creation complete after 14s [id=vpc-0396212cf58236e68]
aws_subnet.first_subnet: Creating...
aws_security_group.ingress-policy-example: Creating...
aws_subnet.first_subnet: …
Run Code Online (Sandbox Code Playgroud)

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

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

Terraform JSON 生成

我正在尝试使用 terraform创建一个AWS 仪表板来显示 S3 指标。我正在考虑遍历存储在列表变量中的所有 S3 存储桶并生成仪表板 json。

for 循环能够添加指标,但我无法删除尾随逗号,这会导致错误的 json。

  1. 有没有一种简单的方法可以使用这种方法来修复这个 json?
  2. 有没有更好的方法来进行json处理?
  3. 我应该使用 terraform 进行此处理吗?

代码片段:-

dashboard_body = <<EOF
 {
  "start":"-P6M",
   "widgets": [
       {
          "type":"metric",
          "x":0,
          "y":0,
          "width":12,
          "height":6,
          "properties":{
             "metrics":[
%{ for bucket in var.buckets }
[
                   "AWS/S3",
                   "BucketSizeBytes",
                   "StorageType",
                   "StandardStorage",
                    "BucketName",
                   "${bucket}"
]
%{ endfor }
             ],
             "period":86400,
             "stat":"Average",
             "region":"us-east-1",
             "title":"Storage usage"
          }
       }
   ]
 }
 EOF
Run Code Online (Sandbox Code Playgroud)

解决方法:- 我最终在“metrics”数组的末尾硬编码了一个额外的聚合。无论如何我都需要总数,这是一个简单的解决方法。@kharandziuk 是理想的实现方式,但即使如此,您也可能需要使用此解决方法。

最终代码:-

{
  "start":"-P6M",
   "widgets": [
       {
          "type":"metric",
          "x":0,
          "y":0,
          "width":12,
          "height":6,
          "properties":{ …
Run Code Online (Sandbox Code Playgroud)

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

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

升级到 0.13 后如何修复 Terraform 不受支持的属性“ses_smtp_password”?

升级后,我在运行 a 时收到如下消息terraform plan

Error: Invalid resource instance data in state

  on iam_server_backup.tf line 4:
   4: resource "aws_iam_access_key" "backup" {

Instance aws_iam_access_key.backup data could not be decoded from
the state: unsupported attribute "ses_smtp_password".
Run Code Online (Sandbox Code Playgroud)

我修复它的方法是删除状态 ( terraform state rm aws_iam_access_key.backup)。但是,这在我运行时创建了新的访问密钥terraform apply,这很耗时,因为我必须更改所有应用程序中的所有访问密钥。有没有更好的方法来解决这个问题?

terraform terraform-provider-aws

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

我可以将变量传递给使用 terraform 和 user_data 创建的 AWS EC2 实例吗?或者更新一个已经创建的资源

我是使用 AWS 学习 terraform 的新手,据我所知,我可以创建一个 EC2 实例并向其传递一些终端命令(通过“user_data”)以安装软件等……

我想知道我是否可以安装 Docker、下载存储库、构建映像并进行部署。

但是如果我有一个全栈应用程序,并且我有:

Instance_1:后端

Instance_2:前端

我如何捕获 Instance_1 的 IP(通过“输出”)并将其传递给存储在 Instance_2 上的前端应用程序的源代码,以使前端能够连接到 Instance_1 上的后端?。

我知道我可以通过 github 下载源代码并通过 Docker 构建它

如果我创建一个 EC2 实例

resource "aws_instance" "Mi_Primer_Servidor"{

  #Verificar el 'id' de la ami y las configuraciones con AWS
  ami="ami-056cb9ae6e2df09e8"

  #Seleccionamos el tipo de maquina virtual
  instance_type = "t2.micro"

  #Asignamos una zona de disponibilidad (OPCIONAL)
  availability_zone = "us-west-2a"

  #Se recomienda crear previamente la llave en AWS y descargar el archivo
  #O usar una llave ya existente
  key_name …
Run Code Online (Sandbox Code Playgroud)

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

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

terraform 中的 appAutoScaling 属性与 autoscaling 属性有什么区别?

我正在尝试使用 terraform 为 Aurora 扩展 RDS 集群。

我正在设置一个带有 3 个服务器的 RDS 实例 - 1 个写入器和 2 个只读副本。这是我的要求

  • 当任何服务器出现故障时,添加一个新服务器,以便副本始终至少有 3 个服务器。

  • 当任何主机的 CPU 使用率超过 50% 时,将新服务器添加到集群。服务器的最大数量为 4。

  1. 是否可以创建一个策略,以便当 3 个服务器中的任何一个出现故障时,然后为该 RDS 实例创建一个新服务器?如果是,如何监控服务器故障?

  2. 我是否需要使用 appAutoScaling 或使用 autoScaling 或两者兼而有之?这是与我的用例匹配的链接:https : //registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/appautoscaling_policy

terraform terraform-provider-aws

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

如何在 Terraform 中获取 user_data 日志

我正在使用 Terraform 配置我的 Infracture,我正在使用 xyz.sh bash 脚本,该脚本包含我在 GPU 机器上的深度学习模型训练。

我的问题是,如何在没有 ssh 进入机器的情况下获取 xyz.sh bash 脚本的日志/完成时间?如果不可能,那么如果我将 ssh 进入机器,我如何检查脚本是否仍在运行或已完成

terraform terraform-provider-aws terraform0.12+

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

使用 Terraform 构建 AWS Codebuild 中的多个环境变量

我正在使用 Terraform 配置 AWS CodeBuild。在环境部分,我配置了以下内容:

  environment {
    compute_type                = "BUILD_GENERAL1_SMALL"
    image                       = "aws/codebuild/standard:3.0"
    type                        = "LINUX_CONTAINER"
    image_pull_credentials_type = "CODEBUILD"

    environment_variable {
      name  = "SOME_KEY1"
      value = "SOME_VALUE1"
    }

    environment_variable {
      name  = "SOME_KEY2"
      value = "SOME_VALUE2"
    }

  }
Run Code Online (Sandbox Code Playgroud)

我的 Codebuild 项目中有 20 多个环境变量需要配置。

是否可以创建一个列表并定义一个 environment_variable 参数来配置所有环境变量?

amazon-web-services terraform aws-codebuild terraform-provider-aws

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

Terraform 抛出无效的子网范围错误

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

Error: error creating subnet: InvalidSubnet.Range: The CIDR '192.168.1.0/24' is invalid.
    status code: 400
Run Code Online (Sandbox Code Playgroud)

创建 VPC 的代码:

resource "aws_vpc" "vpc_worker" {
  provider             = aws.region-worker
  cidr_block           = "198.168.0.0/16"
  enable_dns_support   = true
  enable_dns_hostnames = true
  tags = {
    Name = "master-vpc-jenkins"
  }
}
Run Code Online (Sandbox Code Playgroud)

创建子网的代码:

#Create subnet in us-west-2
resource "aws_subnet" "subnet_1_worker" {
  provider   = aws.region-worker
  vpc_id     = aws_vpc.vpc_worker.id
  cidr_block = "192.168.1.0/24"
}
Run Code Online (Sandbox Code Playgroud)

地形版本:0.12.29

提前致谢。

amazon-web-services terraform terraform-provider-aws terraform0.12+

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