标签: terraform

terraform :尚未声明名为“AMI”的输入变量。可以使用变量“AMI”{} 块声明此变量

我是 terraform 的新手。我正在尝试 terrafrom

我在 var.tfvars 中有这个

variable "AWS_REGION" {    
default = "me-south-1"
}
variable "AMI" {
    type = "map"
    
    default ={
        me-south-1 = "ami-01b735b798*******"
        us-east-1 = "ami-0c2a1acae666******"
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过以下方式在 VPC 中创建一个 ec2

resource "aws_instance" "terraform-web" {
ami = "${lookup(var.AMI, var.AWS_REGION)}"
instance_type = "t3.micro"
Run Code Online (Sandbox Code Playgroud)

这给了我上述错误。

有人能帮我解决这个问题吗?

amazon-web-services terraform

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

Terraform Kubernetes 供应商“local-exec” kubectl apply -f -<<EOF 在 Windows 上不起作用

我正在尝试 通过 Terraform 的 null_resource创建/应用这个 kubectl .yaml 文件https://github.com/Azure/aad-pod-identity/blob/master/deploy/infra/deployment.yaml到 AKS 以安装 Azure AD Pod 标识。它需要部署 Azure 网关入口控制器。将 Windows 10 与 VS Code 结合使用

主要.tf:

data "template_file" "aad_pod" {
  template = "${file("${path.module}/templates/aad_pod.yaml")}"
}

resource "null_resource" "aad_pod_deploy" {
  triggers = {
    manifest_sha1 = "${sha1("${data.template_file.aad_pod.rendered}")}"
  }

  provisioner "local-exec" {
    command = "kubectl apply -f -<<EOF\n${data.template_file.aad_pod.rendered}\nEOF"
  }
}
Run Code Online (Sandbox Code Playgroud)

在 terraform apply 之后我有这个错误:

Error: Error running command 'kubectl apply -f -<<EOF
'cutted listing of yaml file'
EOF': exit status 1. Output: << was unexpected …
Run Code Online (Sandbox Code Playgroud)

yaml kubernetes terraform kubectl

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

terraform 中的 Slug 版本无效

我正在尝试使用 terraform 创建一个 kubernetes 集群,但它向我显示了一个错误,我在不同的场合更改了版本的值,但没有奏效。

resource "digitalocean_kubernetes_cluster" "lox" {
  name    = "lox"
  region  = "nyc1"
  version = "1.13.4-do.0"

  node_pool {
    name       = "worker-pool"
    size       = "s-1vcpu-2gb"
    node_count = 2
  }
Run Code Online (Sandbox Code Playgroud)

这是错误:

Error: Error creating Kubernetes cluster: POST https://api.digitalocean.com/v2/kubernetes/clusters: 422 validation error: invalid version slug

  on 01-cluster.tf line 1, in resource "digitalocean_kubernetes_cluster" "lox":
   1: resource "digitalocean_kubernetes_cluster" "lox" {
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

kubernetes terraform devops

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

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
查看次数

将 terraform 输出从一个文件传递到另一个文件

我有以下结构:

modules
 |_ test1
 |    |_vpc.tf
 |_test2
      |_subnet.tf
Run Code Online (Sandbox Code Playgroud)

我在 test1/vpc.tf 中创建了一个 vpc

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}
Run Code Online (Sandbox Code Playgroud)

我在输出中得到 vpc id,如:

output "vpc_id" {
  value = aws_vpc.main.id
}
Run Code Online (Sandbox Code Playgroud)

如何将此 ID 传递给 test2/subnet.tf 文件?我在网上搜索,似乎无法找到答案。

terraform terraform0.12+

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

升级到 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 gcp 资源 iam 绑定中的变量添加项目编号

下面是我的 terraform 资源。我们如何从 terraform gcp 资源 iam 绑定中的变量添加项目编号,因为如果我将为其他帐户运行相同的 terraform,我必须手动更改它。

resource "google_project_iam_binding" "project" {
  project = var.projectid
  role    = "roles/container.admin"

  members = [
    "serviceAccount:service-1016545346555@gcp-sa-cloudbuild.iam.gserviceaccount.com",
  ]
}
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-gcp

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

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
查看次数