标签: terraform

创建 aws_db_subnet_group 与 terraform throw 创建数据库子网组时出错:InvalidParameterValue

我正在使用 terraform 创建 RDS 实例,为此我需要有一个aws_db_subnet_group资源。我可以使用 Amazon 网站创建的 aws_db_subnet_group 创建 RDS,但是当我尝试从 terraform 脚本创建 aws_db_subnet_group 时,我收到错误 InvalidParameterValue。

这是地形脚本:

resource "aws_db_subnet_group" "default" {
  name        = "cse-cr"
  description = "Private subnets for RDS instance"
  subnet_ids  = ["subnet-0c8764fcb28b04c8c", "subnet-0ca53ff9b621e2c89"]
}
Run Code Online (Sandbox Code Playgroud)

这是错误:

 Error: Error applying plan:

1 error(s) occurred:

* aws_db_subnet_group.default: 1 error(s) occurred:

* aws_db_subnet_group.default: Error creating DB Subnet Group: InvalidParameterValue: Some input subnets in :[subnet-0ca53ff9b621e2c89, subnet-0c8764fcb28b04c8c] are invalid.
        status code: 400, request id: 66166ec8-9b79-41d3-bdf7-a5cdb66f5f95

Terraform does not automatically rollback in the face …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform

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

如何使用带有传入变量的 terraform import ?

我正在学习 terraform,并希望使用该工具设置 AWS 基础设施。

我们有 3 个 AWS 环境:沙箱、暂存和生产,并且拥有支持这些环境的现有基础设施。例如,我们为每个环境有 3 个独立的 VPC。

我想terraform import根据我尝试设置的环境来导入这些资源的状态。所以我本质上想这样做,虽然我知道这在语法上不正确,但你明白了。

$ terraform import aws_vpc.my_vpc -var 'environment=sandbox'
Run Code Online (Sandbox Code Playgroud)

因此我的模块设置如下

vpc/main.tf
-----------
provider "aws" {
  region = "us-east-1"
}
resource "aws_vpc" "my_vpc" {
  cidr_block = ""
}

vpc/variables.tf
----------------
variable "environment" {
  type map = map(string)
  default {
    sandbox    = "vpc-1234"
    staging    = "vpc-2345"
    production = "vpc-3456"
  }
}
Run Code Online (Sandbox Code Playgroud)

所以这意味着我本质上想做

$ terraform import aws_vpc.my_vpc vpc-1234
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这个目标?

terraform terraform-provider-aws

12
推荐指数
2
解决办法
2万
查看次数

Terraform 分配地图时何时需要等号 (=) (TF 0.11)

我无法通过任何其他方法解决这个问题,所以我必须在这里问这个......

在 Terraform 0.11 中将地图分配给值时使用等号 (=) 背后的逻辑是什么?

与 =

resource "pseude_resource" "pseudo_name" {
  value = {
    key1 = value1
    key2 = value2
  }
}
Run Code Online (Sandbox Code Playgroud)

没有 =

resource "pseude_resource" "pseudo_name" {
  value {
    key1 = value1
    key2 = value2
  }
}
Run Code Online (Sandbox Code Playgroud)

使用数组 ([]) 时似乎需要使用 =,但使用映射时则不需要。这背后的原因是什么?到底为什么?可以直接省略吗?

terraform

12
推荐指数
2
解决办法
4198
查看次数

我可以使用 terraform 在 aws 中注册域名吗?

我在文档中没有找到任何有用的东西。这可以用 terraform 以某种方式完成吗?

registrar amazon-web-services terraform

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

如何在 VS Code 中配置 terraform 代码的对齐和缩进?

我使用 VS Code 开发 terraform 代码。我当前的 terraform 插件是:

Name: Terraform
Id: hashicorp.terraform
Description: Syntax highlighting, linting, formatting, and validation for Hashicorp's Terraform
Version: 1.4.0
Publisher: HashiCorp
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=HashiCorp.terraform
Run Code Online (Sandbox Code Playgroud)

考虑以下代码:

output "sql_server" {
  description = "A dictionary of objects containing various Azure Sql Server properties per respective location."
  value = {
    for k, instance in azurerm_sql_server.instance : k =>
    {
      resource_group_name = instance.resource_group_name
      fully_qualified_domain_name = instance.fully_qualified_domain_name 
      name = instance.name
      location = instance.location
      is_primary = instance.location == var.primary_location
      admin_login = …
Run Code Online (Sandbox Code Playgroud)

terraform visual-studio-code

12
推荐指数
3
解决办法
3万
查看次数

您可以在 Terraform 中将块作为变量传递,引用资源的嵌套块内容的类型吗?

我正在尝试在 Terraform 中构建 Web ACL 资源 https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/wafv2_web_acl

该资源具有嵌套块规则->操作->块和规则->操作->计数

我想要一个变量,其类型允许我将操作设置为 或 ,count {}以便block{}可以进行以下两种配置:

带块:

resource "aws_wafv2_web_acl" "example" {
  ...

  rule {
   ...

    action {
      block {}
    }

   ...
}
Run Code Online (Sandbox Code Playgroud)

与计数:

resource "aws_wafv2_web_acl" "example" {
  ...

  rule {
   ...

    action {
      count {}
    }

   ...
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我可以通过布尔变量和动态块以非常非声明性的方式实现此结果。

我的问题是,变量的类型可以引用嵌套块的类型,从而可以将嵌套块的内容传递到变量中吗?

我想要实现的目标与此类似(非工作语法):

resource "aws_wafv2_web_acl" "example" {
  ...

  rule {
   ...

    action = var.action_block

   ...
  } 
}
Run Code Online (Sandbox Code Playgroud)
variable "action_block" {
  description = "Action of the rule"
  type         = <whatever type is accepted …
Run Code Online (Sandbox Code Playgroud)

terraform hcl

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

Terraform 无法创建入口(找不到请求的资源 ingresses.extensions)

我在本地使用 minikube。以下是.tf我用来创建 kubernetes 集群的文件:

provider "kubernetes" {
  config_path = "~/.kube/config"
}

resource "kubernetes_namespace" "tfs" {
  metadata {
    name = "tfs" # terraform-sandbox
  }
}

resource "kubernetes_deployment" "golang_webapp" {
  metadata {
    name      = "golang-webapp"
    namespace = "tfs"
    labels = {
      app = "webapp"
    }
  }
  spec {
    replicas = 3
    selector {
      match_labels = {
        app = "webapp"
      }
    }
    template {
      metadata {
        labels = {
          app = "webapp"
        }
      }
      spec {
        container {
          image             = "golang-docker-example" …
Run Code Online (Sandbox Code Playgroud)

kubernetes terraform minikube

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

Status = 403 Code =“AuthorizationFailure” Message =“此请求无权执行此操作”

我正在尝试运行一个部署存储容器的 terraform 部署。初始部署有效(由于尚未到位 IP 过滤),但随后失败。运行 terraform plan 时,我得到以下信息:

Error: retrieving Container "xxxx" (Account "xxxx" / Resource Group "xxx"): containers.Client#GetProperties: Failure responding to request: StatusCode=403 -- Original Error: autorest/azure: Service returned an error. Status=403 Code="AuthorizationFailure" Message="This request is not authorized to perform this operation.\nRequestId:62a85c92-901e-0021-12de-816608000000\nTime:2022-06-17T00:11:56.2063816Z"
Run Code Online (Sandbox Code Playgroud)

根据一些研究和调试,当存储容器没有将托管管道代理的 IP 列入白名单时,就会发生这种情况。

我修改了管道,以便检索代理的 IP 并将其添加为防火墙规则。然后,我添加了不同时间的睡眠(最多 5 分钟),尝试为规则生效留出时间,但它从未起作用。

这是我的管道的片段:

          - task: AzureCLI@2
            inputs:
              azureSubscription: '$(azureSubscription)'
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                 agentIP=$(curl -s https://api.ipify.org/)
                 az storage account network-rule add -g xxx --account-name xxx --ip-address $agentIP
                 sleep 300 …
Run Code Online (Sandbox Code Playgroud)

azure terraform azure-blob-storage azure-devops azure-pipelines

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

尝试创建负载均衡器时,terraform 为 GCP 返回“invalid_grant”,并且我无法以所有者身份查看或编辑 SA 权限

我有一个全新的 GCP 帐户,我是该帐户的唯一所有者,这是一个个人/干净的全新项目。

\n

我专门使用 terraform 管理基础设施,并尝试创建一个 HTTPS 负载均衡器来将请求路由到固定 ip,然后我想将其转发到我有 web 应用程序的存储桶,我过去通过以下方式设置了这种类型的基础设施UI 但不是通过 terraform。

\n

当尝试创建这个基础设施时:

\n
resource "google_compute_global_address" "main" {\n  name = "main"\n}\n\nresource "google_compute_forwarding_rule" "lb" {\n  name                  = "lb"\n  provider              = google-beta\n  region                = "europe-west2"\n  project               = "owlee-software"\n  ip_protocol           = "TCP"\n  load_balancing_scheme = "EXTERNAL_MANAGED"\n  port_range            = "443"\n  target                = google_compute_global_address.main.address\n  network_tier          = "PREMIUM"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这会抛出

\n
\xe2\x94\x82 Response: {\n\xe2\x94\x82   "error": "invalid_grant",\n\xe2\x94\x82   "error_description": "Account has been deleted"\n\xe2\x94\x82 }\n
Run Code Online (Sandbox Code Playgroud)\n

对于全新的服务帐户 - 我已删除该帐户并创建了另一个帐户 - 使用另一个文件,如果我删除此资源,则所有内容都会通过 GCP 帐户中的服务帐户进行实例化。这也是我在该项目中拥有的唯一“谷歌测试版”提供商。

\n

我不确定这是因为资源配置错误还是服务帐户发生了一些问题。

\n

当我尝试检查我刚刚创建并在项目上创建编辑器的服务帐户时,我不能,它显示为灰色,并显示以下文本: …

google-cloud-platform terraform google-iam terraform-provider-gcp gcp-load-balancer

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

Terraform 如何获取 aws_lb 的 IP 地址

如果有一种方法可以在 Terraform 创建 aws_lb 时获取 aws_lb 资源的分配 IP 地址?

AWS 文档 - NLB - 要找到要列入白名单的私有 IP 地址,我们可以找出与 ELB 关联的 IP 地址。

  1. 通过https://console.aws.amazon.com/ec2/打开 Amazon EC2 控制台。
  2. 在导航窗格中,选择网络接口。
  3. 在搜索字段中,输入您的网络负载均衡器的名称。每个负载平衡器子网有一个网络接口。
  4. 在每个网络接口的详细信息选项卡上,从 Primary private IPv4 IP 复制地址

背景

为了能够设置安全组以将 ELB IP 地址列入白名单,因为网络负载均衡器不能没有安全组,因为网络负载均衡器没有安全组

考虑过aws_network_interface但它不会出现错误。

错误:找不到匹配的网络接口

另外我认为 datasource 假设资源已经存在并且不能用于 Terraform 创建的资源。

amazon-elb terraform terraform-provider-aws

11
推荐指数
3
解决办法
6567
查看次数