我已经开始使用Terraform,并且完全相信它——太棒了!在创建了AWS VPC、子网、NACL、SGs、路由表等方面的整个开发环境之后,我决定最好将其转化为可重用的模块
所以现在我把它变成了模块,带有变量等等。现在我的开发模板只接受变量,并将它们作为模块的输入。我的结论是:
terraform {
backend "s3" {
bucket = "redacted"
key = "dev/vpc/terraform.tfstate"
region = "eu
我对terraform是新手,已经玩了一段时间了。在我尝试执行的场景中,我尝试为我的每个部署创建一个堆栈。我能够创造我需要的资源。然而,当我想要部署一个新的堆栈时,它正试图破坏已经存在的堆栈。我曾尝试将生命周期密钥与“防止销毁”一起使用,但这会引发一个错误,表示无法删除资源
the plan would destroy this resource, but it currently has lifecycle.prevent_destroy set to true. To avoid this
我当前在test.tfvars文件中有此映射:
ssm = {
names = ["Terraform-1","Terraform-2","Terraform-3"]
values = ["tf-1","tf-2","tf-3"]
}
我想做的是:
resource "aws_ssm_parameter" "parameter_store" {
count = 3
name = "$${element(var.ssm[names],count.index)}"
ty
在运行terraform destroy时,我遇到一个错误,其中我的输出是template\u文件资源的结果,其内容取决于被销毁的资源
data "template_file" "ansible_inventory" {
template = "${ ...interpolated string that uses values from the ec2 resources in the next line (e.g. ip addresses etc)... }"
depends_on
我正在运行Jenkins作业来创建Azure实例,该实例将运行terraform脚本来执行此任务。terraform脚本将首先创建NIC,然后再创建VM。有时在Azure环境中创建NIC花费的时间太长,并且在NIC完全创建之前执行VM创建步骤。是否有任何方法可以使脚本只有当NIC创建完成后,才应转到下一步。有人能帮忙吗?您需要做的是将NIC定义为Terraform中VM的显式依赖项。有些奇怪的情况下,你必须这样做。因此,在VM上,您只需要添加depends-on属性和资源。如果资源是在terra
我遇到了以下错误:
属性“vpc\u区域\u标识符”的值不正确:元素0:需要字符串。
变量应为字符串列表,因此元素0应为字符串
代码如下:
专有网络模块:
resource "aws_subnet" "terraform-pub-sn" {
count = "${length(data.aws_availability_zones.all.names)}"
vpc_id = "${aws_vpc.terraform-v
我将通过Terraform管理数十个应用程序的CDN配置。我有一组.tf文件,保存所有配置中常见的所有默认常量设置,然后每个应用程序都有自己的.tfvars文件来保存其唯一设置
如果我运行类似于terraform apply--var file=app1.tfvars--var file=app2.tfvars--var file=app3.tfvars的程序,那么只使用传入的最后一个文件
即使这确实有效,但当我将其扩展到更多站点时,它将变得难以管理
将多个.tfvars文件合并到一组共同的.t
我有一个KVM主机。我正在使用Terraform使用KVM provider创建一些虚拟服务器。以下是地形文件的相关部分:
provider "libvirt" {
uri = "qemu+ssh://root@192.168.60.7"
}
resource "libvirt_volume" "ubuntu-qcow2" {
count = 1
name = "ubuntu-qcow2-${count.index+1}"
pool = "default"
source =
标签: Terraform
Ibm Cloud
ibm-cloud-infrastructureibm-cloud-schematicsterraform-provider-ibm
我使用IBMCloudSchematics生成并应用计划在IBMCloud中创建资源。Terraform模板存在于github存储库中,其URL在IBMCloudSchematics的工作区中提供。如何将其作为IBM云私有目录中的软件提供给用户使用?您可以添加基于地形的。该软件名为产品。它的定义可以在压缩磁带存档文件(tgz)中提供,也可以通过Git存储库提供。使用Schematics和Schematics工作区执行设置(包括初始验证)。有关详细信息,请参阅IBM Cloud Schematic
标签: Terraform
terraform-provider-azureterraform-template-file
将多个模板文件分配给用户_数据变量。
由于某些架构模式,我们不希望将此模板合并到单个文件中
我是新加入terraform的,所以在这方面很努力
data "template_file" "userdata_lin1" {
template = <<EOF
#!/bin/bash
crontab cronjobfileremote
EOF
}
data "template_file" "userdata_lin2" {
template = <<EOF
#!/bi
我正在为S3创建一个策略文档
data "aws_iam_policy_document" "policy_doc" {
statement {
actions = [
"s3:*"
]
principals {
identifiers = ["*"]
type = "AWS"
}
resources = [
aws_s3_bucket.bucket.arn,
aws_s3_bu
奇怪的问题。我是否可以使用resource+字符串的resource属性来构造名称,而不是使用变量:
例如:
resource "azurerm_network_security_group" "nsgvmss" {
name = **"NSG - azurerm_resource_virtual_machine_scale_set.vmss.name"**
location = azurerm_resource_group.rgapp.location
resource
标签: Terraform
google-cloud-pubsubdatadogterraform0.12+
我正在尝试为google pub sub创建一个监视器,结果发现一个“无效查询”错误。这是当我查看另一个工作监视器的源代码时的查询文本,所以我不明白为什么它不工作
错误:Error:创建监视器时出错:400错误请求:{“errors”:[“为参数'query'提供的值无效”]}
地形:
resource "datadog_monitor" "bad_stuff_sub_monitor" {
name = "${va
我有许多web应用程序,它们将创建自己的应用程序洞察资源。在main.tf文件中,当我编写web应用程序的配置时,我希望引用创建的AI资源,并使用其instrumentation_键在app_设置块中进行设置,如下所示:
app_settings = {
"APPINSIGHTS_INSTRUMENTATIONKEY" = azurerm_application_insights.webapp1.instrumentation_key
}
我想尝试使用for
我正在尝试导入此现有Azure SQL Analytics解决方案,其资源ID为:
/订阅/abcfe54c-ae03-45f1-b2e2-d37f04b2fdef/resourcegroups/e1us-dev-rg-01/providers/Microsoft.OperationsManagement/solutions/AzureSQLAnalytics(cts-e1us-dev-la-01)
使用
我得到以下输出:
cts-e1us-dev-la-01: The term 'cts-e1
我正在重构Terraform脚本,以减少重复,并利用0.13中新的条件模块语法。我们支持两种不同的部署平台,Docker和Openshift,因此我们目前有两套模块,用于大约60个服务,因此我们最终得到了约120个.tf文件
我试图将每个服务整合为一个.tf文件,Docker和Kubernetes/Openshift模块位于同一个文件中。我们有一些脚本,可以在运行时为每个提供程序注入主驱动程序。只有Docker模块,一切都很好,但现在我添加了Kubernetes/Openshift模块,我遇到了
我想知道是否有人能提出一个技巧来做到这一点。假设我有一个terraform代码,用于检索多个AMI的最新版本
data "aws_ami" "amzn" {
most_recent = true
owners = ["amazon"]
filters...
}
data "aws_ami" "centos" {
most_recent = true
owners
我希望在使用tfsec的IaC代码扫描中实施以下策略:
自定义检查:GCP防火墙规则允许Telnet端口(23)上的所有流量。
以下是我的自定义签入.json格式:
{
“支票”:
[
{
“代码”:“CUS003”,
“说明”:“自定义检查:GCP防火墙规则允许Telnet端口(23)上的所有流量”,
“必需类型”:
[
“资源”
],
“所需标签”:
[
“谷歌计算防火墙”
],
“严重性”:“警告”,
“匹配规范”:
{
“名称”:“CUS003\u匹配规格\u名称”,
“行动”:“和”,
正在运行包含以下内容的terraform文件:
terraform {
required_providers {
hcloud = {
source = "hetznercloud/hcloud"
version = "1.26.0"
}
}
}
variable "hc_token" {
default = "secret"
}
variable "
我使用CI系统编译terraform提供程序并将它们捆绑到映像中,但每次运行terraform init时,我都会遇到以下错误/失败
│ Error: Failed to install provider
│
│ Error while installing rancher/rancher2 v1.13.0: the current package for
│ registry.terraform.io/rancher/rancher2 1.13.0 doesn't match any of
标签: Terraform
azure-powershellterraform-provider-azure
Terraform不提供将Azure recovery Services Vault更改为使用LocallyRedundant存储复制类型的选项。因此,我决定在资源配置完成后使用PowerShell模块进行设置。该命令似乎是正确的,在手动调用时有效,但在将其放入provisioner时无效。有什么想法吗
地形版本:0.15
Azurerm版本:2.40.0
resource "azurerm_recovery_services_vault" "RSV"{
我正在尝试构建一个简单的模块,该模块将gcp项目作为输入并输出默认的\u服务\u帐户
如何从根目录下的main.tf调用它
module "default_service_accounts" {
source = "./default_service_accounts"
for_each = module.projects.enterprise_projects
project_name = each.key
project_id = ea
TerraformAPI是如何向自动缩放配置的每个实例添加route53记录的
我还需要在实例终止后销毁A记录
我的代码部署脚本使用DNS名称 使用自动缩放时,Terraform控制整个自动缩放过程,但不管理自动缩放系统生成的实例。因此,由于创建和销毁实例而需要采取的任何行动都必须由自动缩放本身触发,而不是由地形触发
提供了一种触发操作的方法,以响应自动缩放组中实例状态的更改
原则上,可以使用自动伸缩生命周期挂钩来触发正在运行的Terraform,但自动、无人值守的Terraform运行并不常见
我有一个名为subnets的远程状态属性,它存储在:data.terraform\u remote\u state.alb.subnets中
根据部署的内容,此属性存在或不存在
当我尝试创建ECS群集时,它需要输入我要使用的子网组:
data.terraform\u remote\u state.alb.子网
或
var.vpc_子网(vpc的子网)
不幸的是,由于插值的工作方式,需要将其拼凑在一起:
"${split(",", length(var.vpc_subnets) == 0 ? jo
我正在尝试在Terraform模板中创建输出
output "port" {
value = "${kubernetes_service.postgres_service.spec}"
}
将产生
ports = {
cluster_ip = 10.245.175.57
external_ips = []
external_name =
load_balancer_ip =
load_balancer_source_ranges = []
port = [map[n
我一定非常愚蠢,但我不知道如何在Terraform中进行简单的字符串连接
我有以下数据null\u data\u source:
data "null_data_source" "api_gw_url" {
inputs = {
main_api_gw = "app.api.${var.env_name == "prod" ? "" : var.env_name}mydomain.com"
}
}
因此,当env_name=“prod”我想要输出app.api.my
我正在尝试使用Terraform创建一个具有角色/logging.logWriterIAM角色的基本服务帐户。下面是我如何配置的:
resource "google_service_account" "log_user" {
account_id = "log-user"
display_name = "Logging User"
}
data "google_iam_policy" "log_policy" {
binding {
role = "roles/logg
我使用terraform模块设计了一个AWS代码管道模块,我使用代码管道模块设计了多个实际的代码管道。我使用模块作为设计模式,因为所有的代码管道看起来都很相似,只是有些代码管道需要批准阶段,有些不需要。如何设计codepipeline模块批准阶段,以便根据不同的需要创建实际的codepipeline
我尝试使用count=0或1来控制该阶段,但它不起作用,因为该阶段不是资源级别。有什么棘手的方法或解决办法吗
我觉得这个链接问了类似的问题,但我不知道答案是什么:
这是我的代码管道地形模块:
re
我有一些共享的terraform模块,目前被许多基于terraform 0.11的项目使用。我希望逐步将项目迁移到0.12,并尝试保持模块与0.11和0.12的兼容性。
我在列表属性方面遇到了问题,列表属性已从括号语法更改
在terraform 0.11中,单个表达式周围需要括号,以便向语言解释器提示需要列表解释:
# Example for older versions of Terraform; not valid for v0.12
example = ["${var.any_list}"
例如:
我想使用变量创建2个vnet,并在一个vnet中创建2个子网一个vnet和3个子网。根据您的要求,下面的示例代码:
variable "vnet_address_space" {
default = "10.0.0.0/16"
}
variable "subnet_prefix" {
default = [
"10.0.1.0/24",
"10.0.2.0/24"
]
}
resource "azurerm_resource_gr
我使用以下地形代码创建了一对vm+vapp:
resource "vcd_vapp" demo_vapp {
name = "demo"
power_on = true
}
resource "vcd_vapp_vm" demo {
vapp_name = "${vcd_vapp.demo_vapp.name}"
name = "demo"
catalog_name = "${var.template_catalog}"
template_n
我已经编写了一个terraform模块来创建一个Lambda,我很难弄清楚如何在预构建的ZIP文件上计算源代码散列。这将在管道中进行,因此每次都会生成ZIP文件,并且在我到达地形步骤之前可能会有所不同。
我正在用gulp(这是一个NodeJS应用程序)构建ZIP文件,并假设它是在目录中预构建的
build/myLambda.zip
基本上我想这样做。文件名是一个terraform变量,我希望源代码散列计算必须引用该文件
module my_lambda {
filename = "${var
我使用Terraform管理谷歌云平台的所有基础设施。起初,我在Macos上工作和初始化时忘记了。插件是根据“darwin_amd64”安装的
但我必须把它转换成“linux_amd64”
我将所有的“.tf”文件放在linux上进行测试。我删除了“.terraform.tfstate”和“.terraform”文件。我又做了一次“terraform init”
每当我运行“terraform plan”命令时,它都会自动尝试重建整个基础设施。但他说有这样一个来源,他给出了一个错误。当我尝试复制
我正在使用terraform在localstack中创建RDS距离。我使用的是一个非常简单的示例,它使用了RDS/terraform文档中的代码示例。这就是它看起来的样子。如果我不包括这一点,其他资源(如SQS/SNS/S3)就可以创建良好的
resource "aws_db_instance" "test-rds" {
allocated_storage = 5
storage_type = "gp2"
engine = "post
我正在尝试使用terraform创建AKS,在服务原则块中,我们需要传递客户id和客户机密。Terraform能够读取环境变量,并在它们前面加上TF_VAR_name时将它们作为源
Terraform还提到,对于,我们可以将客户机相关变量导出为ARM\u client\u name。所以我的问题是如何使用这些ARM变量来配置我的AKS
现在我就是这样做的
- export ARM_CLIENT_ID=$AZ_USERNAME
- export ARM_CLIENT_SECRET=$AZ
我想不出如何循环遍历下面映射的值之和
variable "images" {
default = {
"rhel-8-factory-os-ready" = {
"availability_zone" = "eu-fra-1ah"
"flavor" = 4
"instance_count" = 2
"image_name" = "rhel-8-factory-os-ready"
},
"rhel-7-factor
我在以下位置有这个terraform.tfvars文件:
root
|_prod
|_eu-west-2
|_dev
|_terraform.tfvars
|_cognito
|_terragrunt.hcl
它具有以下价值:
terragrunt = {
terraform {
extra_arguments "custom_vars" {
commands = [
"apply",
标签: Terraform
terraform-provider-awsaws-cloudwatch-log-insights
我不知道如何使用terraform部署来自Cloudwatch日志洞察的查询。这是否得到支持?如果没有,它在路上吗
具体而言,请参考以下查询语法:
FIELDS @message
| PARSE @message "[*] *" as loggingType, loggingMessage
| FILTER loggingType = "ERROR"
| DISPLAY loggingMessage
如本文所述:
如何使用资源创建Cloudwatch日志筛选器?找到了答案。显然,您无法部署“保
我是terraform的新手,尝试在字符串中添加变量,
假设,id=“abcde”,host=~${id}+“id”,应该返回abcdeid
在terraform中实现这一点的最佳方法是什么?您可以直接将它们连接起来或使用。例如:
variable "id" {
default = "abcde"
}
output "output1" {
value = "${var.id}id"
}
output &q
标签: Terraform
terraform-template-fileterraform-provider-cloudflare
我正在实施Cloudflare Terraform脚本,在为区域设置消除块重复数据时遇到问题:
resource "cloudflare_zone_settings_override" "my-domain-settings-1" {
zone_id = cloudflare_zone.my_domain1.id
settings {
# very_long_list_of_settings
}
}
resource "cl
我有这张地图:
tags = {
"Name" = "sdfsdfsdf"
"ZZZZ" = "ABC-DE"
"sdfsEEEdfsdfE" = "sdfsdfsdQQQf"
}
我想从那张地图生成一张新地图,但所有的键和值都是小写的
我原以为我可以在当地人的内部为每个人做这件事,但看起来这不受支持?我想为此创建一个新地图(通过本地人)
这是无效的语法,但我想执
我想用本地exec生成ssh密钥,然后读取文件的内容
resource "null_resource" "generate-ssh-keys-pair" {
provisioner "local-exec" {
command = <<EOT
ssh-keygen -t rsa -b 4096 -C "test" -P "" -f "testkey&q
我有一组我想在Terraform中创建的资源,一些是使用resource本地创建的,另一些是通过调用module创建的。我需要几套那样的一套看起来像
module "my_secret_one" {
source = "rhythmictech/secretsmanager-random-secret/aws"
version = "1.2.0"
length = 16
name
我正在创建一个内联策略,并希望动态附加一个资源
以下是我的政策:
resource "aws_iam_policy" "lambda_secret_policy" {
name = "${var.name}-lambda-role"
description = "grants lambda access to secret manager"
assume_role_policy = <<
我想问,为什么当我们在google\u compute\u url\u map中更新host\u规则时,terraform plan/apply的输出显示host\u规则被重新创建?
我知道主机规则不会在流程的任何步骤中删除,但很难看到差异的变化
以下是示例配置:
resource "google_compute_url_map" "urlmap-test-1" {
name = "gclb-echoserver-1&q
我有一个null_资源,它有一个本地exec块,使用googleaccess令牌生成一个curl。
因为这是在销毁期间执行的,所以我不得不将其定义为触发器变量
每次我执行terraformapply时,都必须替换null_资源,因为谷歌访问令牌一直在变化
resource "null_resource" "env_to_group" {
for_each = local.map_env_group
triggers = {
env
标签: Terraform
terraform-provider-awsterraform-template-file
我对地形是新手。有人能解释一下吗
为什么需要将.tfstate文件保存在本地或远程存储中
terraform应用时,始终使用新的基础结构刷新状态文件
提前感谢。状态文件跟踪Terraform正在管理的资源,无论是创建的还是导入的。Terraform的刷新只检测托管资源中的漂移,不会检测您是否在状态文件之外创建了新资源
如果您失去了状态,您将最终得到不由Terraform管理的孤立资源。如果出于某种原因,您对此没有意见,或者您有其他方式与其他团队成员/CI共享状态并进行备份,那么您就没事了
当然,
我有一个脚本,需要在配置实例并连接卷后运行该脚本:
resource "aws_instance" "controller" {
...
provisioner "remote-exec" {
connection {
type = "ssh"
user = "centos"
}
inline = [
"download and run script to verify environment"
]
Azure中的资源提供程序(例如Microsoft.Storage、Microsoft.Network)需要启用才能创建这些资源。我找不到相关的地形资源来注册这些?地形能使它们成为可能吗
注意:在terraform中刚刚开始
谢谢。据我所知,地形中似乎没有羽毛来启用Azure资源。Terraform只是为您提供了如何管理Azure资源的特性。您需要请求订阅的经理为您启用它。或者您可以在Azure中使用正确的权限自己启用它,我认为您需要所有者权限。是的,这就是我目前使用Azure cli所做的。我
当我运行“terraform plan”时,我得到了这个错误
错误:设置新vSphere SOAP客户端时出错:拨号后tcp:i/o超时
在模块/control\u plane\u resources/main.tf第2行的提供程序“vsphere”中:
2:提供程序“vsphere”{您能提供完整的代码示例吗?
上一页 1 2 ...
4 5 6 7 8 9 10 ...
下一页 最后一页 共 63 页