标签: terraform

如何强制执行地形破坏?

terraform destroy -var-file='filename'

你真的要破坏吗?

Terraform 将删除您所有的托管基础​​架构。没有撤消。仅接受“是”以进行确认。

但是,我想更改命令,使其在不问问题的情况下销毁您真的要销毁吗?那么我应该提供什么论据呢?

terraform

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

Terraform:使用共享 VPC 创建 GCP 项目

我现在已经花了很长时间来解决这个问题..所以主机项目已经存在..并且已经设置了所有VPN和网络。我希望通过 Terraform 创建一个新项目,并允许它使用主机项目共享 VPC。

每当我遇到一个问题并最终解决它时,我就会遇到另一个问题。

现在我看到:

google_compute_shared_vpc_service_project.project: googleapi: Error 404: The resource 'projects/intacct-staging-db3b7e7a' was not found, notFound
* google_compute_instance.dokku: 1 error(s) occurred:
Run Code Online (Sandbox Code Playgroud)

也:

 google_compute_instance.dokku: Error loading zone 'europe-west2-a': googleapi: Error 404: Failed to find project intacct-staging, notFound
Run Code Online (Sandbox Code Playgroud)

我最初确信它是排序的,这就是为什么我正在尝试配置depends_on,尝试整理顺序。这似乎还没有解决它。

简单地阅读它,google_compute_shared_vpc_service_project就其而言并不存在google_compute_shared_vpc_service_project。尽管我已添加以下内容google_compute_shared_vpc_service_project

depends_on = ["google_project.project",
    "google_compute_shared_vpc_host_project.host_project",
  ]
Run Code Online (Sandbox Code Playgroud)

也许,因为宿主项目已经存在,我应该使用data它来引用它而不是resource

我的完整 TF 文件在这里:

provider "google" {
 region = "${var.gcp_region}"
 credentials = "${file("./creds/serviceaccount.json")}"
}
resource "random_id" "id" {
 byte_length = 4
 prefix      = "${var.project_name}-" …
Run Code Online (Sandbox Code Playgroud)

cloud google-cloud-platform terraform

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

在 Terraform 0.12 中,如何从 1.1.1.1/32 这样的字符串中删除 IP 前缀?

我得到这个变量:

variable "ip" {
  default = "1.1.1.1/32"
}
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我需要完整的前缀:"1.1.1.1/32"但有时我只需要不带前缀的 IP:"1.1.1.1"

现在 0.12 有这个新函数,我可以这样使用:

trimsuffix(var.ip, "/32")
Run Code Online (Sandbox Code Playgroud)

但我不想像那样对前缀进行硬编码。有没有办法删除正则表达式匹配的子字符串基数,甚至只是截断字符串的最后 3 个字符?我不能使用 substr() 因为它希望我知道完整的字符串长度。

编辑

我正在尝试使用 regex() 来执行此操作,但我不确定 Terraform 是否支持完整的正则表达式。

https://regex101.com/r/EGzxAq/1

我收到错误:

> regex("^.+(?=\/)","11.1.1.1/32")

>
Error: Invalid escape sequence

  on <console-input> line 1:
  (source code not available)

The symbol "/" is not a valid escape sequence selector.
Run Code Online (Sandbox Code Playgroud)

然后当我尝试转义反斜杠时:

> regex("^.+(?=\\/)","11.1.1.1/32")

>
Error: Invalid function argument

  on <console-input> line 1:
  (source code not available)

Invalid value for "pattern" parameter: invalid regexp pattern: …
Run Code Online (Sandbox Code Playgroud)

terraform

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

使用 Terraform 创建 StringLike 条件

我正在尝试为 aws IAM 策略生成一些 terraform。政策中的条件如下所示

"StringLike": {
 "kms:EncryptionContext:aws:cloudtrail:arn": [
 "arn:aws:cloudtrail:*:aws-account-id:trail/*"
 ]
Run Code Online (Sandbox Code Playgroud)

我正在查看以下文档aws_iam_policy_documenthttps://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document,但我不清楚如何在 terraform 中编写此文档。任何帮助将不胜感激。这是我的尝试

condition {
        test = "StringLike"
        variable = "kms:EncryptionContext:aws:cloudtrail:arn"

        values = [
            "arn:aws:cloudtrail:*:aws-account-id:trail/*"
        ]
    }
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform

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

有什么方法可以循环 Terraform 中的所有变量吗?

我想要一个资源块,它可以循环我用变量块定义的每个变量。这可能吗?

例如:假设我在 tfvar 文件中设置 myfirstvar 和 mysecondvar。我正在寻找一种解决方案,该解决方案将采用以下模板并将所有名称、值和描述部署到 Terraform Cloud。

variable "myfirstvar" {
  type        = string
  description = "a var to upload"
}

variable "mysecondvar" {
  type        = string
  description = "another var to upload"
}

resource "tfe_variable" "test" {
  for_each     = var
  key          = currentvar.key
  value        = currentvar.value
  category     = "terraform"
  workspace_id = tfe_workspace.test.id
  description  = currentvar.description
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我能想到的唯一解决方案是将所有 tf​​var 放入单个列表类型变量中,但这不会有来自变量块的附加信息。或者我可以在另一个程序中对变量块进行进一步解析,并且 tfvars 文件收集所有必要的信息。两者都不理想。

terraform

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

如何在 terraform 中附加字符串和变量

如何在 terraform 中连接字符串和变量。我正在使用 terraform 版本 1.7

Name =“Test (Environment_Name)”,其中environment_name 将为测试、阶段和产品。

    resource "fusionauth_tenant" "tanant" {
  name = "Test (Environment_name)"
  email_configuration {
    default_from_name                 = "FusionAuth [Environment_name]"
    verification_email_template_id    = fusionauth_email.verification_template.id
  }
Run Code Online (Sandbox Code Playgroud)

terraform fusionauth

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

Terraform:MacOS:zsh: 执行格式错误:terraform

我第一次安装brew install terraform并且运行良好但后来我尝试安装特定版本,如下所示

wget -P terraform_bin/ https://releases.hashicorp.com/terraform/0.12.0/terraform_0.12.0_linux_amd64.zip
unzip -o terraform_bin/terraform_0.12.0_linux_amd64.zip -d terraform_bin/
mv terraform_bin/terraform /usr/local/bin
rm -rf terraform_bin
terraform version
Run Code Online (Sandbox Code Playgroud)

但现在它在 MacOS 中的安装变得混乱,当尝试运行版本时它失败了

在此输入图像描述

macos zsh oh-my-zsh terraform

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

在 Terraform 中,“${element(aws_subnet.public.*.id, count.index)}”是什么?

谁能解释一下这一行。

subnet_id      = "${element(aws_subnet.public.*.id, count.index)}"
Run Code Online (Sandbox Code Playgroud)

我在 terraform 代码中使用它来创建一个堆栈

amazon-web-services terraform terraform-provider-aws

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

用于创建 AWS SNS 主题订阅的 Terraform 模块

我找不到 terraform 模块来创建 AWS SNS 主题订阅。例如:我使用“terraform-aws-modules/sns/aws”来创建 SNS 主题。有人可以指出我要订阅的源模块吗?

amazon-web-services terraform terraform-provider-aws

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

Bash-获取存储在 terraform 文件中的值

我需要在 bash 脚本中获取存储在 terraform 文件中的值。

cat custom.tfvars
Val1 = {a1 = "12", b2 = "0.5", "count" = 2}
Val2 = {a1 = "14", b2 = "0.5", "count" = 1}
Run Code Online (Sandbox Code Playgroud)

我想编写一个脚本来获取 的值Val1(count)

谢谢。

linux bash shell terraform

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

如何指定实例名称作为 aws_instance 的一部分

如何将实例名称指定为 aws_instance 的一部分,正在启动的实例没有与其关联的显示名称,并且在 EC2 控制台中显示为空。注意:instance_id 正确显示

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance

amazon-web-services terraform terraform-provider-aws

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

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

如何在 terraform 的 file() 中传递变量

需要使用 terraform 创建 cloudfront 公钥,这里公钥是根据环境单独的,并以 {env_name}.pem 形式存储在目录名称 public-key-cf 中。env_name 可以是 dev、stage、prod。

为了实现这一点,使用了以下 terraform 块:

resource "aws_cloudfront_public_key" "documents-signing-key" {
  name        = "cf-public-key"
  comment     = "Public Key"
  encoded_key = file("${path.module}/public-key-cf/"${var.environment}".pem)"
}
Run Code Online (Sandbox Code Playgroud)

我收到错误如下:

This character is not used within the language.
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

谢谢。

variables file terraform terraform-provider-aws

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