标签: terraform

在 Terraform(而不是 S3)中重命名 s3 存储桶会导致创建然后销毁?

我想稍微重构我的 Terraform 脚本。

前:

resource "aws_s3_bucket" "abc" {
  bucket = "my-bucket"
  acl    = "private"
  region = "${var.aws_region}"

  tags = {
    Name = "My bucket"
  }

  versioning {
    enabled = true
    mfa_delete = false
  }
}
Run Code Online (Sandbox Code Playgroud)

后:

resource "aws_s3_bucket" "def" {
  bucket = "my-bucket"
  acl    = "private"
  region = "${var.aws_region}"

  tags = {
    Name = "My bucket"
  }

  versioning {
    enabled = true
    mfa_delete = false
  }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,只有Terraform 中的名称发生了变化 ( abc-> def)。

但是,这会导致在terraform plan. …

amazon-s3 amazon-web-services terraform

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

Terraform GCP 无法为 Windows 实例运行元数据命令以创建用户

尝试创建可用于连接移动某些文件的用户,当我尝试在使用元数据资源创建实例时创建用户时,已成功创建但未执行元数据命令。

`resource "google_compute_instance" "win-dev-instance" {
 project = "my_pro_1"
 zone = "eu-west2-b"
 name = "win-dev-instance"
 machine_type = "f1-micro"
 boot_disk {
   initialize_params {
     image = "windows-server-2016-r2-dc-v20191210"
   }
 }
 network_interface {
   network = "default"
   access_config {
   }
 }
 metadata {
    windows-startup-script-cmd = "net user /add devuser PASSWORD & net localgroup adminstrators devuser /add"
  }
}`
Run Code Online (Sandbox Code Playgroud)

powershell google-cloud-platform terraform terraform-provider-gcp

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

使用 Python 更新 terraform (.tf) 文件

我正在尝试使用 python 更新 terraform 模板,尽管我在尝试查找模块时遇到了一些问题(例如 PyYAML 来更新 yml 文件)。

我的目标是更新 git 存储库中存在的 terraform 文件,并创建一个拉取请求,合并后将触发管道以实现更改。

示例 .tf 文件:

variable "variable_1" {}
variable "variable_2" {}

locals {
  temp_locals = 0
}

resource "aws_iam_role" "MY_AWS_ACCOUNT" {
  name = "MY_AWS_ACCOUNT"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Condition": {
        "Bool": {
          "aws:MultiFactorAuthPresent": "true"
        }
      },
      "Principal": {
        "AWS": [
          "arn:aws:iam::<AWS_ACCOUNT_ID>:user/user.name1"
        ]
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
}

resource "aws_iam_role_policy_attachment" "aws_iam_role_policy_attachment" {
}
Run Code Online (Sandbox Code Playgroud)

想在这个文件中添加 user.name2 的 arn。

python terraform terraform-provider-aws

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

Terraform azurerm_virtual_machine_extension,使用 CustomScriptExtension 运行本地 PowerShell 脚本

如何在 terraform azurerm_virtual_machine_extension 中运行本地(不存储到 blob 存储帐户)PowerShell 脚本

文件夹有

  1. 主文件
  2. 安装.ps1

    资源“azurerm_virtual_machine_extension”“软件”{名称=“安装软件”resource_group_name=azurerm_resource_group.azrg.name virtual_machine_id=azurerm_virtual_machine.vm.idpublisher=“Microsoft.Compute”type=“CustomScriptExtension”type_handler_version=“1.9”

      settings = <<SETTINGS
        { 
          "commandToExecute": "powershell -ExecutionPolicy Unrestricted -File \"install.ps1\""
        } 
        SETTINGS
    } 
    
    Run Code Online (Sandbox Code Playgroud)

    但失败了

    [
            {
                "code": "ComponentStatus/StdOut/succeeded",
                "level": "Info",
                "displayStatus": "Provisioning succeeded",
                "message": "Windows PowerShell \r\nCopyright (C) Microsoft Corporation. All rights reserved.\r\n\r\n"
            },
            {
                "code": "ComponentStatus/StdErr/succeeded",
                "level": "Info",
                "displayStatus": "Provisioning succeeded",
                "message": "The argument 'install.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the -File parameter.\r\n" …
    Run Code Online (Sandbox Code Playgroud)

powershell terraform

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

想要通过 Terraform 部署 Google Cloud Run 服务

我想使用 terraform 部署一个谷歌云运行服务。当我尝试通过“端口”块进行部署以定义容器端口时,出现错误,我必须从模板标记传递容器端口,但无法这样做。这是我的 .tf 文件 -

resource "google_cloud_run_service" "default" {
  name     = "cloudrun-srv"
  location = "us-central1"

  template {
    spec {
      containers {
        image = "us.gcr.io/xxxxxx/xxxx.app"

        port {
          container_port = 19006
        }
      }
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}

data "google_iam_policy" "noauth" {
  binding {
    role = "roles/run.invoker"
    members = [
      "allUsers",
    ]
  }
}

resource "google_cloud_run_service_iam_policy" "noauth" {
  location    = google_cloud_run_service.default.location
  project     = google_cloud_run_service.default.project
  service     = google_cloud_run_service.default.name

  policy_data = data.google_iam_policy.noauth.policy_data
}

output "url" { …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform terraform terraform-provider-gcp google-cloud-run

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

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

允许通过 SSH 访问使用 Terraform 配置的 GCP 虚拟机实例

我正在尝试使用 Terraform 在 GCP 上创建 VM 实例。确实创建了实例,但我似乎无法通过 SSH 访问这些实例。我的tf文件:

# Cloud Provider
provider "google" {
  version = "3.5.0"
  credentials = file("./terraform-service-account.json")
  project = "terraform-279210"
  region  = "us-central1"
  zone    = "us-central1-c"
}
# Virtual Private Network
resource "google_compute_network" "vpc_network" {
  name = "terraform-network"
}
# VM Instance
resource "google_compute_instance" "demo-vm-instance" {
  name         = "demo-vm-instance"
  machine_type = "f1-micro"
  tags         = ["demo-vm-instance"]
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  metadata = {
    ssh-keys = "demouser:${file("./demouser.pub")}"
  }
  network_interface {
    network …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform terraform terraform-provider-gcp

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

带引号和不带引号的变量样式有什么区别?

terraform 中的以下 2 种样式之间有什么区别,它们相同吗?

vpc_id      = aws_vpc.default.id
Run Code Online (Sandbox Code Playgroud)

对比

vpc_id      = "${aws_vpc.default.id}"
Run Code Online (Sandbox Code Playgroud)

terraform

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

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