在应用地形之前是否需要地形销毁?如果没有,那么在更新现有基础设施时,您遵循的工作流程是什么?您如何决定是否需要销毁?在我看来,这是非常不标准的。Terraformdestroy仅在您希望完全擦除基础设施的情况下使用。terraform最大的特点之一是,它可以对您所需的基础设施和现有的基础设施进行智能增量,并且只进行所需的更改。通过执行刷新、计划和应用可以确保地形:
刷新-对您当前的基础架构有最新的了解。如果在terraform脚本之外手动更改了任何内容,这一点非常重要
计划-准备一份列表,供您查
我有一些与不同政策一起创建的角色,我不想将它们联系在一起:
#Role that gets created in in identity account that okta uses to map AD groups to Roles in AWS
resource "aws_iam_role" "create_identity_role" {
count = "${length(var.team_name)}"
name = "${lookup(var.identity_rol
你能帮我理解吗
例如,我对基础结构进行了增量更改,如[A]->[B]->[C],其中[A]可以分别是名为I的一台服务器,[B]可以分别是名为j的第二台服务器,[C]可以分别是名为k的第三台服务器。总共应该有3台服务器。每个状态都可以被描述为 [a]=x,x+[b]=y,y+[c]=z</代码>其中 x,y,z >处于中间状态。
我的问题是
如何组织Terraform中多个模块的增量基础结构更改,而不影响以前的模块
有可能回滚链中间的变化吗? [B] < /代码>并获得 x>代码>状态,或者我
这里的地形问题:我试图在Azure上部署一组实例,并在部署时枚举它们
resource "azurerm_virtual_machine" "kafka" { name
= "kafka${count.index}" #name = "${var.kafka_cluster_prefix}-kafka-${count.index}" location
= "${azurer
我有以下配置:
variable "private_subnets" {
default = ["subnet-A", "subnet-B"]
}
resource "random_shuffle" "az" {
input = ["${var.private_subnets}"]
result_count = 1
}
module "server" {
source = "./modules/aws-ec2"
instance_count = 3
name = "$
我不熟悉Terraform,有没有直接的方法来管理和创建使用Terraform的Google Cloud Composer环境
我查看了GCP支持的组件列表,似乎到目前为止还没有Google Cloud Composer。作为一项工作,我正在考虑创建一个shell脚本,其中包含必需的gcloud composer cli命令,并使用Terraform运行它,这是一种正确的方法吗?请提出备选方案。这是一种选择。可以使用和来运行命令:
resource "null_resource" "compos
我试图在terraform中提供n个VM(假设n=5)
问题是,对于分配给相应VM的每个IP,我首先需要调用一个外部工具(an.exe)。此工具有两个参数:要获取的IP的正则表达式模式和机器名。然后,该工具根据提供的正则表达式,从充当IPAM(IP地址管理解决方案)的Sharepoint Excel文件中读取要使用的单个空闲IP地址。该工具还更新Excel文件,以便在返回的IP旁边标记提供的机器名
对于单个VM来说,这一切都很好,一切都按预期完成,利用了一个外部数据源和一个资源。机器名从输入文件
我正在使用AWS提供商运行Terraform v11.13。是否可以将多个数据模板文件附加到单个资源
例如,您有一个aws_iam_策略资源,但它可以从不同的数据模板文件创建多个iam策略
当它只是一个带有计数索引的单个数据模板文件时,它就可以工作。当文件是静态文件时,它也可以工作,例如在非模板文件中
下面是代码示例
variable "policy_list"{
type = "list"
default = ["s3,"emr","lambda"]
}
resource "
我试图动态创建一个实例ID列表,将其分配给负载平衡器。基于此,我发现我可以使用数据“aws\u实例”来实现。不幸的是,我遇到了以下错误:
Error: Your query returned no results. Please change your search criteria and try again.
这就是我创建EC2资源的方式
resource "aws_instance" "one" {
instance_type = "${var.lc_instance_type}"
我正试图在terraform模板中的本地exec provisioner的帮助下更改webapp的堆栈
# Create azure Webapp 1
resource "azurerm_app_service" "webapp1" {
name = var.webapp1
location = azurerm_resource_group.dev.location
resource_group_name = azurerm_res
已创建用于部署事件网格订阅(订阅现有主题,使用现有存储帐户和资源组)的代码
订阅将消息推送到存储队列。情况很简单。首次正确执行地形图。当我运行“应用”时,出现以下错误:
azurerm_storage_queue.queue: Creating...
azurerm_storage_queue.queue: Creation complete after 1s [id=https://sa1dev.queue.core.windows.net/sq-dev]
azurerm_eventgrid_
我正在尝试为aws_wafv2_web_acl资源创建一个模块,但我不知道如何在动态块中添加多个“排除的规则”块。这可能吗?以下是资源:
resource "aws_wafv2_web_acl" "web-acl" {
name = var.name
description = ""
scope = "REGIONAL"
default_action {
all
当.tfstate保存资源时,如何重命名它?示例如下所示
terraform {
backend "s3" {
bucket = "px-terraform-state"
region = "ap-southeast-1"
key = "network/transaction-logs.tfstate"
encrypt
Terraform Apply的第一次运行给出了“错误:无法启动容器:来自守护进程的错误响应:未找到网络疫苗网络”
第二步:一切正常
我认为Terraform自己管理依赖关系——显然它在这里失败了。我的档案有错吗?或者我可以自己做决定吗
.tf文件:
# Setting up docker network
resource "docker_network" "private_network" {
name = "vaccine-n
我正在使用terraform云工作区。
由于错误,我将错误的地形状态上载到我的工作区。现在我的地形图正在使用它,但我不想使用它,因为那不是我想要的状态
让我用这幅图来解释:我想使用10个月前的状态,而不是我最近得到的新状态:
我想回到我的旧状态,因为在新状态中没有一些资源,然后它们在我的地形计划中被重新创建。
我正试图通过以下方式执行terraform import命令来导入每个单独的资源:
terraform import azurerm_app_service_plan.fem-plan
我正在尝试设置一个别名,以便在中创建AWS实例时快速ssh到新创建的主机中。我通过跑步来做到这一点
# Handy alias to quickly ssh into newly created host
provisioner "local-exec" {
command = "alias sshopenldap='ssh -i ${var.key_path} ubuntu@${aws_instance.ldap_instance.public_dns}'"
}
当我看到此执行的输出
我需要从IP地址列表生成键/值对的映射
输入示例:
ips = [ "1.2.3.4", "2.3.4.5"]
期望输出:
pairs = [ {ip_address="1.2.3.4"}, {ip_address="2.3.4.5"} ]
我的TF输入数据位于openstack\u networking\u port\u v2.vip.*.all\u fixed\u ips.0(任意数量的ip地址),我需要为openstack\u networking\u port\u v2生成允许的\u
我们为terraform开发了两个提供程序插件,但没有指定版本。然后,对于我们自己的控制,我们开始在构建时使用ldflags进行版本设置:
go build -ldflags '-X \"main.VersionString=#{VERSION} (#{REVISION})\"' -o '#{WS}/#{PROJECT_NAME}' main.go"
在守则中:
package main
import(
"github.com/hashicorp/terraform/plugin"
这是我的规则
resource "cloudflare_page_rule" "https-only" {
zone = "${var.domain}"
target = "http://*${var.domain}/*"
priority = 1
actions = {
always_use_https = true,
}
}
文档中说始终使用\u https的默认值为false。我想为该区域的所有http流量启用此规则
当我应用该规
我在Terraform(v0.11.7)中有下一个表达式:
我需要将字符串附加到正确的表达式中,例如:
my_expression = "${zipmap(random_shuffle.x.result, "*" + random_shuffle.x.result)}"
我有什么解决办法吗?
提前感谢实现此目标的一种方法如下:
my_expression = "${zipmap(random_shuffle.x.result,formatlist("*%s",random_shuffle.x.
在base.tf文件中,我有:
data "consul_keys" "project_emails"{
datacenter = "mine1"
key {
name = "notification_list"
path = "project/notification_email_list"
}
}
我想在python代码中使用这些concur变量。
我的想法是将其输出到一个文件中。(所以不仅仅是另一个terraform文件,它使用版本11或12的“${proje
我已经创建了多个子网[私有/公共],通过在Terraform中使用for_,如下所示
resource "aws_subnet" "public" {
for_each = toset(data.aws_availability_zones.azs.names)
vpc_id = aws_vpc.vpc.id
cidr_block = cidrsubnet(var.private_ranges,1 ,index(data.aws_availability_zones.azs.name
我需要使用Terraform在Pagerduty中创建一个升级策略。我想动态创建规则块,然后在这些块中使用规则中的值创建目标块。我不知道如何在目标块内进行第二次调用以使其动态。
我有一个列表中的团队列表
locals {
teams = [
[data.pagerduty_schedule.ce_ooh_schedule.id, data.pagerduty_schedule.pi_office_hours_schedule.id],
[data.pagerduty_sche
标签: Terraform
terraform-provider-awsterraform0.12+
我想创建一个模块,该模块可以接受环境(开发、测试、产品)的输入,并使用适当的标记创建子网的数量(“每个环境的应用”和“数据库”子网)。e、 g Name=dev应用程序
当输入变量更新时,模块应能灵活地添加/删除子网。
我的模板如下所示
variable "environments" {
type = map(object({
app_subnet_cidr = string
db_subnet_cidr = string
}))
default = {
de
我正在尝试使用Terraform在Cisco ACI上创建一个EPG。已创建EPG,但未连接Leaf的接口。
连接Leaf接口的terraform synthax是:
resource "aci_application_epg" "VLAN-616-EPG" {
...
relation_fv_rs_path_att = ["topology/pod-1/paths-103/pathep-[eth1/1]"]
...
}
当我通过ACI web界面或REST AP
我有两个目标组-一个用于端口80,另一个用于端口443。还有两个实例作为NLB的成员,我需要将这两个目标组附加到每个实例。这就是我如何配置的,连接:
// Creates the target-group
resource "aws_lb_target_group" "nlb_target_groups" {
for_each = {
for lx in var.nlb_listeners : "${lx.protocol}:${lx.target_port}" => lx
对于我们在Azure存储帐户中创建的每个新fileshare,我们都会得到一个connect选项
,
如果我们单击connect我们将获得以下选项
是否可以通过terraform,获取这段代码来装载此文件共享?我到处都找不到。在此方面的任何帮助都将不胜感激当然,这是可能的。您只需要将代码复制到脚本中,然后使用VM扩展在VM内执行。一点也不复杂。这是一个例子
但是有一件事需要注意,VM扩展只支持非交互式脚本。例如,Linux的connect代码,命令sudo是一个交互式命令,因此不建议在VM扩展
我目前正在使用一个Kubernetes集群,它运行在由Ansible配置的裸机节点上。有计划转移到云端,我正在阅读关于Terraform和Packer的文章,为这篇文章做准备。撇开数据迁移不谈,我们似乎有一条非常直接的迁移路径:
使用我们现有的Ansible脚本使用Packer构建图像
使用Terraform将构建的映像部署到云
使用当前工具部署Kubernetes资源
太好了。我们现在有了不变的基础设施,使用了最先进的工具
我正在努力寻找的是如何对使用Packer构建的图像进行版本控制。接下来
我试图弄清楚Terraform Cloud,只是想知道如何在我的文件中访问我在工作区中设置的环境变量
// main.tf
// Configure the Google Cloud provider
provider "google" {
credentials = "GOOGLE_CREDENTIALS"
project = "my-project"
region = "australia-
标签: Terraform
azure-keyvaultazure-appserviceazure-rm
我的地形设计依赖于一个预设置的密钥库,其中包含应用程序服务使用的秘密。我已将此密钥库导入远程状态。我看它是进口的。现在,当我运行terraform plan时,它的行为就像它不知道导入的资源一样
这就是我的地形的样子
provider "azurerm" {
version="=2.20.0"
skip_provider_registration="true"
features{}
}
terraform
我知道我需要在.terraformrc文件中定义terraform云凭据,如下所述:
有没有办法不使用.terraformrc文件并在环境变量中设置凭据和令牌
附言:
只是一个附带的问题,我们有Terraform Enterprise或Cloud的StackOverflow标签吗?答案是肯定和否定的
如果问题是使用环境变量验证TFE提供程序,那么答案是肯定的。该更改是为了启用TFE_令牌和TFE_主机名来验证TFE提供程序,作为Terraform CLI配置文件的替代方案。然后,您可以与该提
项目使用远程S3地形状态。我想添加一个.terraform版本文件,以便tfenv可以自动切换到它。但首先我想验证当前存储在远程状态的版本。我认为这是一种方法:
terraform state pull | grep terraform_version
但正如所指出的,它不提供远程版本,只提供本地版本。是否有检索远程terraform版本的命令?您不应该使用状态拉取来获取远程版本。当命令在输出前将状态转换为本地版本时,它将为您提供本地版本
你可以查一下
注意:此命令不能用于检查的地形版本
远程
我正在尝试循环DigitalOcean Droplet中的所有实例,其中有未知数量的实例要添加到DigitalOcean项目中
类似于下面的内容,但不知道如何
resource "digitalocean_droplet" "web" {
count = var.droplet_count
name = "web-${var.name}-${var.region}-${count.index +1}"
size = &
我有一个关于在Terraform中向变量传递多个值的问题。我在任何地方都找不到答案,我也不确定这是否可能。在我们的环境中,当我们创建AWS资源(如VPC)并向其添加标记名(如项目环境VPC,如cvs生产VPC)时。当我尝试使用Terraform创建资源时,我将如何做同样的事情?我尝试了以下方法,但无效:
resource "aws_vpc" "main" {
cidr_block = var.aws_cidr
instance_
标签: Terraform
terraform-provider-awsterraform0.12+
我使用terraform创建了一个AWS Lambda函数。代码更改是从我们的CI服务器自动部署的,提交sha作为环境变量传递(GIT\u commit\u HASH)-因此这会在Terraform范围之外更改Lambda函数(因为人们在询问…)
到目前为止,这个效果很好。但是现在我想更新函数的节点版本,terraform尝试将env var重置为初始值“unknown”
我试图使用ignore_changes块,但无法让terraform忽略其他地方所做的更改
resource "a
环境:
地形v0.10.7
谷歌云平台
用于创建后端、变量等的各种.tf文件
问题:
我可以创建多个vm实例,也可以创建多个附加磁盘(每个实例上的boot_disk工作正常),但我希望能够相应地将这些附加磁盘附加到每个vm,而不必为每个vm单独添加磁盘(如果有意义的话!)
到目前为止,我拥有的代码是(对于构建多个计算实例和多个附加磁盘,它可以正常工作):注意(我已经注释掉了所附的出错的\u磁盘)
如果我单独使用.tf,连接的磁盘工作没有问题
我希望的最终状态是,能够使用count构建多个vm
我想为aws中的its创建rds实例和整个必需的基础设施。我无法理解terraform的安全部分。我想至少在.tfstate中加密敏感数据。e、 g:rds实例的密码/用户名等。存储.tfstate敏感数据的最佳方式是什么?如果不支持,请建议其他方法?谢谢。使用AWS提供商作为示例
建议将.tfstate文件保存到s3存储桶中,并对其设置策略,使其仅指定有权访问此存储桶和相关kms密钥的角色
terraform {
required_version = "~> 0.10"
bac
我们目前使用terraform提供和拆除Softlayer中的基础设施。但是,我们希望每月重新使用硬件进行重新设置,而不是完全拆卸/重新设置。这是否可能使用Terraform?Softlayer或IBM terraform云提供商是否支持操作系统重新加载
谢谢大家!
参考资料:terraform似乎还不支持操作系统重新加载,terraform GitHub问题中已经发布了一个问题。您可以在以下链接中看到它:
您可以查看下面的链接,因为它使用terraform和rest api调用,可能对您的请
我正在terraform中配置远程状态,如:
provider "aws" {
region = "ap-southeast-1"
}
terraform {
backend "s3" {
bucket = "xxx-artifacts"
key = "terraform_state.tfstate"
region = "ap-southeast-1"
}
}
data "terraform_remote_state" "s3_state" {
bac
我目前有3个模块,它们一起部署azure订阅中的所有虚拟网络。我想将其整合为一个模块,维护已部署资源的状态
关于实现这一目标的最佳方法有什么建议吗
Stu除了合并代码(我想您知道),您只需将所有资源移动到新路径。用于将下面的资源移动,例如module.foo.aws\u实例。此移动到module.bar.aws\u实例。此:
terraform state mv module.foo.aws_instance.this module.bar.aws_instance.this
之后,确保地形平
当我试图创建一个公共ip时,我遇到了以下错误
2019-05-27T03:07:44.5185437Z * azurerm_network_interface.tf-ni-erx-sqlcl1[1]: Resource 'azurerm_public_ip.tf-pip-erx-sqlcl1' not found for variable 'azurerm_public_ip.tf-pip-erx-sqlcl1.id'
2019-05-27T03:07:44.5186152Z * azurerm
我试图在bash脚本中使用terraform destroy,以便能够自动从当前状态文件中销毁资源。但我不想在销毁时再次询问用户变量,我希望它自动从当前状态文件中获取变量并销毁它。如何实现这一点?假设您实际上并不关心状态值,因为您只是在销毁存在的内容,并且没有一个变量像通常情况那样依赖于销毁内容,那么您实际上不需要读取状态,只需为这些必需的变量设置一些虚拟值即可
您可以为每个未设置的变量设置虚拟值,这些变量通常会在命令行上提示输入:
用于$(grep-R-I'variable.*{}path/t
标签: Terraform
terraform-provider-azureazure-repos
我的terraform模块回购位置如下:
https://teamabc.visualstudio.com/dummyproject/_git/terraform-modules?path=%2Fcompute&version=GBmaster
source = "git::https://teamabc:lfithww4xpp4eksvoimgzkpi3ugu6xvrkf26mfq3jth3642jgyoa@visualstudio.com/dummyp
(我使用地形0.12.20)
我的代码中有以下代码片段:
locals {
x = merge(values({
for location in local.locations: location => {
for apsvc_name in var.apsvc_names: "${location}-${apsvc_name}" => {
location = location
我正在尝试使用google的导入现有AWS infra配置,但由于AWS提供商身份验证问题,我没有成功。我的AWS凭证已启用MFA,因此我必须使用会话令牌。我找不到允许terraformer使用aws会话令牌参数的选项
以下是terraformer程序的调试日志。有人能帮我做这个吗。下面生成的是空tf文件和状态
Master $ terraformer import aws --resources=vpc --regions=eu-central-1 -c -v
2020/06/02 23:1
我想从Terraform输出的地图列表中获取一个特定的地图元素
例如,如何在properties.json中访问每个映射项的account
并有条件地打印列表作为类型的输出
我尝试了循环和splat表达式,如下所示,但它没有返回准确的值
下面的道具似乎也是一个列表
output "resources_by_name" {
description = "Resource name of all machine type resources from
如何使用一个元组和两个字符串列表为每个对象创建一个要在中使用的对象映射
假设我有一个来自ec2模块的实例ID或实例IP的元组/列表和一个来自ALB模块的目标组ARN的元组/列表,如下所示
instance_ids = ["10.1.1.1", "10.2.2.2"]
target_gropup_arn = ["arn1", "arn2"]
在main.tf中
output "out"
我正在尝试监视一个实例组,并使用一个基于正则表达式的过滤器。查询如下所示
fetch instance_group
| metric 'compute.googleapis.com/instance_group/size'
| filter (resource.instance_group_name =~ 'nat-ecmp-[1|2]')
| group_by 1m, [value_size_mean: mean(value.size)]
| every 1m
现在我正试图在地形上做同样的事
为了解决系统找不到指定路径的问题,必须进行哪些特定配置或语法更改。terraform试图从本地镜像加载提供程序时抛出的错误?
问题
terraform提供程序的本地文件系统镜像在自动化程序中重复使用
控制台打印出系统找不到指定的路径。在第三个模块第三次使用同一提供程序期间,第三个模块尝试在2分钟内下载该模块
在引发此错误之前的几分钟内,从同一本地文件系统镜像请求同一提供程序的前两次成功
当调用程序在每次请求前360秒休眠以避免可能的锁定原因时,问题仍然存在。6分钟的延迟并不能防止出现问题
我正在使用terraform helm provider安装helm软件包
我当前的main.tf文件
provider "helm" {
kubernetes {
config_path = pathexpand(var.kube_config)
}
}
provider "kubernetes" {
config_path = pathexpand(var.kube_config)
}
data "te
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 62 页