标签: terraform

terraform-kubernetes-provider 如何从文件创建机密?

我正在使用 terraform kubernetes-provider,我想将此kubectl命令转换为 TF:

kubectl create secret generic my-secret --from-file mysecret.json
Run Code Online (Sandbox Code Playgroud)

然而,secret资源的data字段似乎只需要一个 TF map

我试过类似的东西

data "template_file" "my-secret" {
  template = "${file("${path.module}/my-secret.json")}"
}

resource "kubernetes_secret" "sgw-config" {
   metadata {
     name = "my-secret"
   }
   type = "Opaque"
   data = "{data.template_file.my-secret.template}"
}
Run Code Online (Sandbox Code Playgroud)

但它抱怨这不是一张地图。所以,我可以做这样的事情:

   data = {
      "my-secret.json" = "{data.template_file.my-secret.template}"
   }
Run Code Online (Sandbox Code Playgroud)

但这将使用名为的顶级字段写入机密,my-secret.json并且当我批量挂载它时,它将无法与其他资源一起使用。

这里的诀窍是什么?

kubernetes terraform terraform-template-file

10
推荐指数
2
解决办法
6772
查看次数

无法代入角色并验证指定的 targetGroupArn

我想使用 terraform ecs_service 创建和部署集群,但我无法这样做。我的terraform applys 总是在 IAM 角色上失败,我不太清楚。具体来说,错误信息是:

InvalidParametersException:无法代入角色并验证指定的 targetGroupArn。请验证传递的 ECS 服务角色是否具有适当的权限。

我发现:

  1. 当我iam_role在 ecs_service 中指定时,ECS 抱怨我需要使用服务相关角色。
  2. 当我iam_role在 ecs_service 中发表评论时,ECS 抱怨所担任的角色无法验证 targetGroupArn。

我的 terraform 跨越了一堆文件。我把感觉像下面的相关部分。尽管我已经看到发布了一些类似的问题,但没有一个为我提供解决上述困境的可行解决方案。

## ALB

resource "aws_alb" "frankly_internal_alb" {
    name = "frankly-internal-alb"
    internal = false
    security_groups = ["${aws_security_group.frankly_internal_alb_sg.id}"]
    subnets = ["${aws_subnet.frankly_public_subnet_a.id}", "${aws_subnet.frankly_public_subnet_b.id}"]
}

resource "aws_alb_listener" "frankly_alb_listener" {
    load_balancer_arn = "${aws_alb.frankly_internal_alb.arn}"

    port = "8080"
    protocol = "HTTP"

    default_action {
        target_group_arn = "${aws_alb_target_group.frankly_internal_target_group.arn}"
        type = "forward"
    }
}

## Target Group

resource …
Run Code Online (Sandbox Code Playgroud)

amazon-ecs amazon-iam terraform terraform-provider-aws

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

Terraform - 如何在对象列表上使用 for_each 循环来创建资源

我有一个包含要创建的子网列表的对象。

variable "subnet-map" {
  default = {
    ec2 = [
      {
        cidr_block        = "10.0.1.0/24"
        availability_zone = "eu-west-1a"
      }
    ],
    lambda = [
      {
        cidr_block        = "10.0.5.0/24"
        availability_zone = "eu-west-1a"
      },
      {
        cidr_block        = "10.0.6.0/24"
        availability_zone = "eu-west-1b"
      },
      {
        cidr_block        = "10.0.7.0/24"
        availability_zone = "eu-west-1c"
      }
    ],
    secrets = [
      {
        cidr_block        = "10.0.8.0/24"
        availability_zone = "eu-west-1a"
      },
      {
        cidr_block        = "10.0.9.0/24"
        availability_zone = "eu-west-1b"
      },
      {
        cidr_block        = "10.0.10.0/24"
        availability_zone = "eu-west-1c"
      }
    ],
    rds = [
      {
        cidr_block …
Run Code Online (Sandbox Code Playgroud)

foreach for-loop amazon-web-services terraform

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

使用 Golang docker SDK - Interactive Container 接受用户输入 os.stdin 到容器

我最后的手段是在这里问。我是 Golang 的新手,我做过简单的程序。

我正在尝试执行以下操作:使用 golang:1 - 运行容器 2 - 接受输入标准输入到容器

我想使用的例子是hashicorp/terraform docker镜像,我想做一个简单的terraform apply 但是我需要等待用户输入

下面是我到目前为止工作的代码......任何尝试下面的确切代码的人都需要更新 AWS 环境变量或将 terraform 测试文件更改为另一个提供程序......或者只是使用不同的 docker 镜像 ;-)

package main

import (
    "fmt"
    "github.com/docker/docker/api/types"
    "github.com/docker/docker/api/types/container"
    "github.com/docker/docker/api/types/mount"
    "github.com/docker/docker/client"
    "github.com/docker/docker/pkg/stdcopy"
    "golang.org/x/net/context"
    "io"
    "os"
)

const workingDir = "/home"


func main() {
    ctx := context.Background()
    cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
    if err != nil {
        panic(err)
    }

    reader, err := cli.ImagePull(ctx, "hashicorp/terraform", types.ImagePullOptions{})
    if err != nil {
        panic(err)
    }
    io.Copy(os.Stdout, reader)

    fmt.Println(os.Args)
    cwd, _ := os.Getwd()

    resp, …
Run Code Online (Sandbox Code Playgroud)

sdk stdin go docker terraform

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

带有 ALB 入口控制器的 Terraform AWS Kubernetes EKS 资源不会创建负载均衡器

我一直在尝试使用 Terraform 在 AWS 上创建一个具有自我管理节点的 EKS 集群,但我无法让我的 Kubernetes Ingress 创建负载均衡器。没有错误,但没有创建负载均衡器,它只是超时。

我确实首先在我的帐户中手动创建了一个负载均衡器,并验证了负载均衡器角色是否存在。AWSElasticLoadBalancingServiceRolePolicy当我的 Terraform 代码运行时访问该策略。

我非常依赖本教程

变量:

aws_region     = "ap-southeast-1"
domain         = "*.mydomain.com"
cluster_name   = "my-tf-eks-cluster"
vpc_id         = "vpc-0d7700e26db6b3e21"
app_subnet_ids = "subnet-03c1e8c57110c92e0, subnet-0413e8bf24cb32595, subnet-047dcce0b810f0fbd"
// gateway subnet IDs
Run Code Online (Sandbox Code Playgroud)

地形代码:

terraform {
}

provider "aws" {
 region  = var.aws_region
 version = "~> 2.8"
}

data "aws_acm_certificate" "default" {
  domain   = var.domain
  statuses = ["ISSUED"]
}

resource "kubernetes_service_account" "alb-ingress" {
  metadata {
    name = "alb-ingress-controller"
    namespace = "kube-system"
    labels = { …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services kubernetes terraform kubernetes-ingress amazon-eks

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

Terraform 有条件地应用生命周期块

您能否有条件地将生命周期块应用于 Terraform 0.12 中的资源。

例如,如果我想根据传递给模块的参数将此块添加到 AWS ASG 资源。

    lifecycle {
      ignore_changes = [
       target_group_arns,
      ]
    }
Run Code Online (Sandbox Code Playgroud)

terraform

10
推荐指数
2
解决办法
3316
查看次数

GCP IAM绑定/成员的“权威”和“权威”是什么意思

我试图在https://www.terraform.io/docs/providers/google/r/google_service_account_iam.html上了解GCP terraform 提供程序之间google_service_account_iam_binding和之间的区别。google_service_account_iam_member

我知道 google_service_account_iam_binding 用于向成员列表授予角色,而 google_service_account_iam_member 用于向单个成员授予角色,但是我不清楚这些定义中“权威”和“非权威”的含义:

google_service_account_iam_binding:给定角色的权威。更新 IAM 策略以向成员列表授予角色。服务帐号的 IAM 策略中的其他角色将被保留。

google_service_account_iam_member:非权威。更新 IAM 策略以向新成员授予角色。保留服务帐户角色的其他成员。

谁能为我详细说明一下?

terraform terraform-provider-gcp

10
推荐指数
2
解决办法
815
查看次数

gitlab-ci:Terraform 没有名为“sh”的命令。您指的是“展示”吗

我正在尝试在 Gitlab CI 上设置 Terrafom 验证。
但是,构建失败并显示错误:“Terraform 没有名为“sh”的命令。您的意思是“show”吗?”

为什么会发生这种情况?怎么解决呢?

我的.gitlab-ci.yml

image: hashicorp/terraform:light

before_script:
  - terraform init

validate:
  script:
    - terraform validate
Run Code Online (Sandbox Code Playgroud)

gitlab-ci terraform

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

aws_instance - 更改卷大小

我正在尝试增加我的 ami 的根卷的大小ami-0d013c5896434b38a- 我正在使用 Terraform 来配置它。

只是为了澄清 - 我只有一个例子。我想确保如果我需要增加磁盘空间,我不必先破坏机器。弹性(EC2)是我相信它可行的理由。

有谁知道这是否可行?是的,我可以简单地进行terraform plan一次预演,但只需仔细检查即可。

amazon-ec2 amazon-web-services terraform

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

为什么我无法将 dependent_on 块添加到具有提供程序配置的模块?

为我的 Terraform 模块编写示例时,出现错误:“模块包含提供程序配置”“无法使用 count、for_each 或 dependent_on 在模块内配置提供程序。”

当我尝试depends_on向模块声明添加一个块以避免在创建部署模块内资源所需的资源组之前尝试运行模块计划时,出现此错误。

如果我不添加该depends_on块,它也会中断,因为它找不到在模块运行以填充所需资源组数据源之前应创建的声明的资源组。

我发现要求删除块providers或删除所有数据源至少让人感到不舒服。

我找不到有关此错误或如何修复它的任何详细信息。

Terraform 代码中引发此错误的特定行。

azure terraform terraform-provider-azure terraform0.12+

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