标签: terraform

如何使用 terraform 添加 lambda 环境变量?

我希望我的 lambda 调用 API,这需要一个 API 令牌。我想将 API 令牌放入 lambda 环境变量中。我怎样才能让 terraform 做到这一点?还是我以错误的方式接近这个?

aws-lambda terraform terraform-provider-aws

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

如何在本地变量中存储 Terraform 配置器“local-exec”输出并在“remote-exec”中使用变量值

我正在使用 Terraform proparar。在一种情况下,我需要执行“local-exec”配置并将命令的输出 [这是 IP 地址数组] 用于下一个“远程执行”配置。

而且我无法将“local-exec”临时输出存储在本地变量中以供以后使用。我可以将它存储在本地文件中,但不能存储在中间变量中

count = "${length(data.local_file.instance_ips.content)}" 
Run Code Online (Sandbox Code Playgroud)

这是行不通的。


resource "null_resource" "get-instance-ip-41" {
    provisioner "local-exec" {
         command = "${path.module}\\scripts\\findprivateip.bat  > ${data.template_file.PrivateIpAddress.rendered}"
    }
}


data "template_file" "PrivateIpAddress" {
    template = "/output.log"
}

data "local_file" "instance_ips" {
    filename = "${data.template_file.PrivateIpAddress.rendered}"
    depends_on = ["null_resource.get-instance-ip-41"]
}

output "IP-address" {
    value = "${data.local_file.instance_ips.content}"
}



# ---------------------------------------------------------------------------------------------------------------------
# Update the instnaces by installing newrelic agent using remote-exec
# ---------------------------------------------------------------------------------------------------------------------

resource "null_resource" "copy_file_newrelic_v_29" {

  depends_on = ["null_resource.get-instance-ip-41"]

  count = "${length(data.local_file.instance_ips.content)}"

  triggers = {
    cluster_instance_id …
Run Code Online (Sandbox Code Playgroud)

variables terraform terraform-provider-aws

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

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

错误刷新状态:S3中的状态数据没有预期的内容

当我们尝试运行带有远程状态处理的 terraform 脚本时,我们会遇到以下问题:

错误刷新状态:S3 中的状态数据没有预期的内容。这可能是由于 S3 处理先前状态更新的异常长时间延迟造成的。请等待一两分钟,然后重试。如果此问题仍然存在,并且 S3 和 DynamoDB 都没有遇到中断,您可能需要手动验证远程状态并将存储在 DynamoDB 表中的 Digest 值更新为以下值

terraform terraform-provider-aws

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

如何使 Terraform 提供程序依赖于正在创建的资源

我正在尝试利用 Rancher Terraform 提供程序创建一个新的 RKE 集群,然后使用 Kubernetes 和 Helm Terraform 提供程序来创建/部署资源到创建的集群。我正在使用此https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster_v2#kube_config属性来创建具有新集群的 kube 配置的本地文件。Helm 和 Kubernetes 提供程序需要提供程序配置中的 kube 配置:https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs。有什么方法可以让提供程序配置等待创建本地文件?

kubernetes terraform rancher rke terraform-provider-kubernetes

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

是否可以在Terraform中执行CloudFormation文件?

一个团队已经将一个cloudformation模板编写为一个.yml提供一堆资源的文件.

是否可以通过在Terraform中执行来利用此文件?还是必须重写?

我是terraform的新手,刚入门.

如果我使用AWS CLI,我会执行这样的命令,

aws cloudformation create-stack --stack-name my-new-stack --template-body file://mystack.yml --parameters ParameterKey = AmiId

我想在我的terraform配置中包含相当于此命令的内容.

如果有可能,你可以给我一个例子,我真的很感激.

谢谢!

amazon-web-services aws-cloudformation terraform

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

无法在AWS Codebuild中运行`source`

我正在使用AWS CodeBuild和Terraform自动部署基于Lambda的服务.我有一个非常简单的buildscript.yml完成以下内容:

  • 获得依赖关系
  • 运行测试
  • 获取AWS凭据并保存到文件(详细信息如下)
  • 来源于creds文件
  • 运行Terraform

"获取信用档案"这一步骤是我遇到困难的地方.我有一个简单的bash单行程序,它抓取AWS容器信誉curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI,然后按以下格式将它们保存到文件中:

export AWS_ACCESS_KEY_ID=SOMEACCESSKEY
export AWS_SECRET_ACCESS_KEY=MYSECRETKEY
export AWS_SESSION_TOKEN=MYSESSIONTOKEN
Run Code Online (Sandbox Code Playgroud)

当然,显而易见的一步就是简单地source将这些变量添加到我的环境中以供Terraform使用.但是,当我这样做时source /path/to/creds_file.txt,CodeBuild返回:

[Container] 2017/06/28 18:28:26 Running command source /path/to/creds_file.txt
/codebuild/output/tmp/script.sh: 4: /codebuild/output/tmp/script.sh: source: not found
Run Code Online (Sandbox Code Playgroud)

我试图安装source通过,apt但后来我得到一个错误,说source无法找到(是的,我已经运行apt update等).我在CodeBuild的Python 2.7环境中使用标准的Ubuntu映像.如何在Codebuild中为源凭据文件获取Terraform工作凭据.

谢谢!

bash amazon-web-services terraform aws-codebuild

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

将JSON字符串解码为terraform map

我正在使用HTTP数据源从内部服务检索数据.该服务返回JSON数据.

我无法插入返回的JSON数据并在其中查找数据.

例如:

模块A.

data "http" "json_data" {
    url = "http://myservice/jsondata"

    # Optional request headers
    request_headers {
       "Accept" = "application/json"
    }
}

output "json_data_key" {
    value = "${lookup(data.http.json_data.body, "mykey")}"
}
Run Code Online (Sandbox Code Playgroud)

main.tf

provider "aws" {
   region = "${var.region}"
   version = "~> 0.1"
}

module "moduleA" {
   source = "../../../terraform-modules/moduleA"
}

resource "aws_instance" "example" {
    ami = "ami-2757f631"
    instance_type = "${module.moduleA.json_data_key}"
}
Run Code Online (Sandbox Code Playgroud)

查找功能将无法在JSON数据中提取密钥.

有没有办法将JSON数据解码为terraform地图?

terraform

10
推荐指数
4
解决办法
8442
查看次数

如何检查字符串是否包含terraform插值中的子字符串?

如何检查terraform字符串是否包含另一个字符串?

例如,我想特别在名称中使用"tmp"处理terraform工作区(例如,允许在没有快照的情况下删除rds实例),所以像这样:

locals
{
  is_tmp = "${"tmp" in terraform.workspace}"
}
Run Code Online (Sandbox Code Playgroud)

据我所知,substr插值函数没有实现这一点.

terraform

10
推荐指数
4
解决办法
5065
查看次数

将AWS CloudFormation转换为Terraform模板

我想将现有的AWS CloudFormation模板(yaml)自动转换为Terraform模板(hcl)。

任何人都可以建议一些工具,方法等吗?

amazon-web-services aws-cloudformation terraform

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