根据,要使用s3而不是本地terraform.tfstate文件进行状态存储,应大致如下配置后端:
terraform {
backend "s3" {
bucket = "my-bucket-name"
key = "my-key-name"
region = "my-region"
}
}
我是
使用本地(terraform.tfstate)文件
在我的提供的.tf文件中添加了上述代码段
运行(再次)terraforminit
terrafo
我才刚开始人形。幸运的是,我得到了一个资源组的基本azure部署
但有一个“参数”或属性或其他东西,我不知道它是什么意思
在azure资源组的“基本”示例中(尽管问题不限于azure资源组),语法如下所示:
resource "azurerm_resource_group" "test" {
name = "testResourceGroup1"
location = "West US"
tags {
environment = "Production"
}
我定义了以下变量
variable "pg_parameters" {
type = "list"
description = "A list of parameters for configuring the parameter groups."
default = [
{
name = "rds.logical_replication"
value = 1
apply_method = "p
我正在考虑将我们的一些基础架构代码切换到Terraform,因为我们在AWS CloudFormation上遇到了一些障碍
让我举一个我正在努力实现的例子。我有一个ECS集群,它可以运行10多个不同的任务定义。每个任务定义包含几乎相同的配置,因此为了避免代码重复,我正在构建一个可重用的模块
从我收集的信息来看,有3种主要的方法可以构建您的terraform目录
1:
使用这种结构,我必须从env文件夹中获取变量,并将其与-var files=“env/dev.tfvars”一起传递,然后在我的m
变量.tf
variable "env_name" {
default = "some_client"
}
variable "azure_instance_names" {
default = [
"AD01",
"AD01",
]
}
我正在尝试为azure\u instance\u names变量(在本例中为2)中指定的尽可能多的实例创建公共IP,我在命名此资源时遇到问题,我希望通过加入env\u name和azure\u instance\u names变
标签: Terraform
terraform-provider-awsterraform-template-file
我们正在使用terraform在aws云中创建资源。
一旦运行了terraformapply,我们的资源就会在云中创建。
但是,我们希望在稍后的时间点返回并再次检查作为当前地形模板一部分创建的资源的状态
完成这项任务的命令是什么?您能更详细地解释一下目的吗
然而,刚离开你原来的帖子,你很可能想要terraformshow
所有地形命令的列表:
如果您只需在命令行中键入terraform,也可以看到这些命令:)
这里是地形新手。我有一个模块,它在GCP中创建一个实例。我正在使用变量和terraform.tfvars来初始化它们。我成功创建了一个实例,比如instance-1。但是当我修改.tfvars文件以创建第二个实例(除了第一个实例之外)时,它表示必须销毁第一个实例。如何运行模块“添加”实例,而不是“替换实例”?我知道创建的第一个实例是terraform.tfstate。但这并不能解释为什么不能“添加”实例
也许我错了,但我把“模块”(及其配置文件)看作函数——这样我就可以随时用不同的参数调用它们。
terraform中的aws_volume_附件资源需要实例id。。。我的问题是,我想将卷装载到的实例是ECS群集的一部分,我似乎找不到任何聪明的例子将ECS群集中某个实例的实例ID传递给aws_volume_附件,以便装载现有EBS卷
使用ARN不起作用
resource "aws_volume_attachment" "ebs_att" {
device_name = "/dev/sdp"
volume_id = "${aws_ebs_volume.example.id}"
下面是一个为RDS事件创建sns主题的模块
module "rds_event_sns" {
source = "../../../../common/sns/topic"
name = "${var.lambda_filename}-rds-event"
}
下面是common/sns/topic
terraform {
required_version = "0.11.7"
}
variable "name" {}
variable "publishers" {
typ
在移动到0.12之前,我正在将terraform模块转换为0.12兼容。我能够修复所有的转换,除了一些可以通过变量设置的块。该模块将保留0.11一段时间,但该模块的用户已经可以升级到0.12
看这里我的地形0.11碎片
data "aws_ami" "instance" {
most_recent = true
filter = "${var.runner_ami_filter}"
owners = "${var.runner_ami_owners}"
}
variable
详情如下:
工作区-A(基本堆栈):此工作区包含创建AWS的代码:VPC、SGs、路由表、子网和相关关联等
工作区-B(服务-1堆栈):此工作区包含创建AWS:ALB、使用fargate的一些ECS容器以及与此服务相关的一些其他组件的代码
现在,在上述情况下,任何服务(服务-1、2、3等)都将使用Workspace-A创建的VPC/基本堆栈,我们如何使用Workspace-A(VPC、SGs、子网等)的输出作为Workspace-B的变量,以便Workspace-B可以使用这些VPC和其他组件。
我在output.TF文件中的TF模块中声明以下输出:
output "jenkins_username" {
value = "${local.jenkins_username}"
description = "Jenkins admin username"
#sensitive = true
}
output "jenkins_password" {
value = "${local.jenkins_password}"
descripti
我试图在我的main.tf中创建一个隐式模块依赖项,以便在kube模块之后创建jenkins模块
module "jenkins" {
install_jenkins = "${var.install_jenkins}"
env_name = "${var.env_name}"
source = "../../../../modules-terraform/jenkins_module"
sync_var = "${module.kube.cluster_name}
所以作为背景,我正试图在kubernetes集群内部署一个容器化的webapp,该集群由istio ft kiali进行保护和监控。由于我不想手动配置所有配置,所以我使用Terraform来部署和更新集群内的任何配置(如部署服务和POD)
他们的好处是Terraform自动配置了公开应用程序所需的服务,从而避免了很多麻烦,特别是因为这是一个类似大规模部署的试点项目
现在的问题是Terraform不包括Istio作为提供者。有一种方法可以通过在Terraform中编写配置来安装和配置它,Terra
这有点难以描述。为了清晰起见,我简化了一张地图,它看起来像这样:
server_ip_configs = {
mgmt = {
ct = "1"
}
applicationgateway = {
ct = "1"
}
monitor = {
ct = "1"
}
app = {
ct = "3"
}
}
我想做的是迭代映射以创建一个平面列表,其中元素乘以
有了它就有可能
我还成功创建了一个服务ID
resource "ibm_iam_service_id" "serviceID" {
name = "test"
description = "New ServiceID"
}
如何创建API密钥,下载它并使用它在服务ID下运行下一个terraform应用程序?以及最近更新的功能
旧的
这个任务有点棘手,因为插件不返回
有两种选择。一种是使用带有c
是否可以将模块指向另一个本地目录中的特定源文件?我遇到的情况是,我在同一个目录中有多个源文件,但我只想从单个源代码文件创建资源
标签: Terraform
amazon-vpcterraform-provider-awssubnetterraform0.12+
我们一次就提供了一组相当大的服务器(每部署一个环境57台)。我们每个子网得到的IP地址是32,所以每个AWS帐户总共有96个IP,我想有效地利用它
我们使用这个元素(split(“,”,local.ec2_subnet),count.index)在子网之间使用IP轮换
比如说因为或随机终止实例。我们离开时,96个IP中有57个IP,但在子网中分布不均匀。
子网-1a:7
子网-1b:25
子网-1c:25
现在,当我准备下一套时。terraform失败,因为子网中的IP地址不可用。它是轮流分配的
目前我们正在运行Terraform 0.11。我正在寻找一种方法来创建一个可重用的模块,在该模块中,我声明需要多少非根EBS卷以及这些卷的大小,然后将它们连接到EC2实例。附加EBS卷的数量可以是1个,也可以是多个,具体取决于业务需求。我已经看到,每个都可以使用一个for,但在0.11中不可用。关于如何在0.11中实现这一点有什么想法吗?您可以在terraform 0.11中为这些资源使用计数实现一组EBS资源(aws\u EBS\u volume)和EBS附件(aws\u volume\u a
我正在使用Terraform v0.13.5.1,希望管理核心基础设施,如创建文件夹、文件夹上的IAM角色、组织策略、创建项目、创建服务帐户等
问题:
我们无法在组织级别或文件夹级别创建服务帐户,因此如何使用服务帐户管理此infra
谢谢正如您所说,在组织级别创建服务帐户是不可能的。所以解决方案是,第一次创建一个项目,并在该项目下创建一个服务帐户,从那时起Terraform就可以使用该帐户
您可以通过GCP控制台或gcloud命令行执行上述操作。或者,您甚至可以使用Terraform进行初始运行
使用模板提供程序的ec2 launch tempate userdata定义即将替换为templatefile函数,因为它已被弃用
定义本身可以毫无问题地完成,但是在规划过程中出现了一个错误,即用于获取实例元数据等的处理变量未定义,是否有办法避免这种情况
$terraform版本
地形v0.13.5
以下定义适用于处理
export LOCAL_IP=$(ec2metadata-LOCAL-ipv4)
导出全局_IP=$(ec2metadata--public-ipv4)
导出区域=$(cur
我在引用另一个模块中某个模块的输出时遇到问题。第一个模块中的资源是使用for_部署的。第二个模块中的资源正在尝试引用第一个模块中的资源
创建了两个模块
安全组
虚拟机
目的是将安全组分配给VM
以下是安全组的模块
variable "configserver" {
type = map(object({
name = string
location = string
subnet
我试图找出根据输入变量从映射变量中查找多个值的最佳方法。在这种情况下,输入将是vSphere交换机端口组的名称
例如,根据以下信息:
variable "networks" {
type = map
default = {
"port-group-mail.internal" = {
network = "10.0.10.0"
netmask = &q
我有两个服务test1和test2,对于每个服务我必须创建6个vm。这6个vm应该放在同一区域的3个不同区域中创建的3个子网id中
在这个服务中,test1将在私有子网中,test2将在公共子网中。因此,在创建ec2实例时,我必须传递正确的子网id
根模块:
来自子模块-专有网络、子网、ec2
我试图通过创建一个结合了服务名称、priv、公共子网id、实例计数(2)的局部变量来实现同样的目标。但问题是我无法做到这一点,因为我无法创建唯一的密钥组合
locals {
service_subnet
问题是:
我正试图在Digital Ocean上构建一个Docker Swarm集群,由3个“管理器”节点和多个工作节点组成。工作节点的数量与此问题并不特别相关。我正试图将Docker Swarm资源调配功能模块化,这样它就不会专门耦合到digitalocean提供商,而是可以接收一个ip地址列表,以阻止对集群进行资源调配
为了提供主节点,需要将第一个节点置于swarm模式,该模式生成一个连接密钥,其他主节点将使用该密钥连接第一个主节点。“null_资源”用于对主节点执行远程供应器,但是,我不知
我有一个根级别变量,其值在运行时通过tfvar文件设置。使用的tfvar文件和var值可能会有所不同。现在我想在模块内使用这个变量,terraform的方法是将它设置为模块变量,并在创建模块时传递根变量
除此之外,这个模块在我们的基础设施中使用了数百次。重复这个变量100次是唯一的方法吗?模块能否访问根命名空间以获取变量值
我有点想在模块中使用外部数据脚本来获取值,除了,我不知道哪个tfvars文件在运行时有效。不幸的是,Terraform支持的唯一方法是将值作为变量传递到模块中。Terrafo
运行terraform apply时,我得到一个密钥错误。我只是在学习地形。我似乎无法在线找到解决此问题的方法:
machine:terraform$ terraform apply
aws_instance.nginix: Creating...
ami: "" => "ami-d1180894"
associate_public_ip_address: "" => "<computed>
有人知道terraform中是否有一种方法可以将默认设置设置为现有资源的默认设置,并且只在创建新资源时设置它们吗
例如,当我创建一个新实例时,我希望使用最新的AMI,但是对于一个现有实例(应该有所有最新的补丁等),就不需要更新AMI。terraform中的每个资源都有一个新的AMI。您可以将生命周期配置为忽略对资源的某些更改
resource "aws_instance" "my_instance" {
ami = "my_ami"
instance
我有一个tf文件,它调用一组模块:
variable "myvar" {}
module "mod1" {
arg = "${var.myvar}"
paramblah = "sldkfjsldkfj"
source = "...my git repo..."
}
module "mod2" {
arg = "${var.myvar}"
paramblah = "sdifjsdfssldkfjsldkfj"
source = "...my git repo..."
}
当我在配置文件中使用aws\u cloudwatch\u log\u resource\u policy时,它被成功地应用了。我希望在web控制台的IAM->Policys列表中出现一个策略,但没有新策略的迹象
aws\u cloudwatch\u log\u resource\u policy创建了什么样的资源?简短回答:它创建了一个cloudwatch日志资源策略
回答很长:AWS用词不当,因为它实际上根本没有连接到资源,似乎是CloudWatch日志的服务级别访问策略
在AWS文档中我能找
我有一个自定义模块在AWS ECS上创建任务定义,它有一个如下变量:
variable "extra_vars" {
type = "string"
}
在我的main.tf中,我做了如下操作:
module "foo" {
source = "git..."
extra_vars =<<EOF
{
"name": "foo",
"value": "bar"
}
EOF
}
但它失败了
我的问题是:有没有办法定义可选的字符串变量?否则,我可以将
我在terraform中定义了这个AWS安全组:
resource "aws_security_group" "sg" {
name = "${var.name}"
description = "${var.description}"
vpc_id = "${data.terraform_remote_state.vpc.vpc_id}"
ingress {
from_port = 80
to_port = 80
protocol =
当我有一个使用count生成的实例时,我无法使用以下命令查看状态:
地形状态显示实例名称。0
如果我使用:
地形状态显示实例名称[0]
那也不行
如何显示使用count生成的实例的状态?它应该使用方括号。如果你做了terraform state list,你应该可以看到你可以显示的资源。应该能够将此附加到地形状态显示,例如地形状态显示azurerm\u网络接口。web服务器nic[1]可能是引用/转义问题?方括号不是bash中的保留字符吗?回答可能不好,但您是否尝试过在资源地址周围使用单引号?这
运行“terraform apply”以使用aws_eip和provisioner local exec Com创建最小ec2配置并将实例的ip登录到日志文件后,记录的ip与分配给创建实例的ip不同
示例.tf:
provider "aws" {
access_key = ""
secret_key = ""
region = "us-east-1"
}
resource "aws_instance" "example" {
标签: Terraform
terraform-provider-githubterraform-cloud
我正在尝试将现有的github存储库导入terraform。我决定尝试terraform cloud,设置好后,terraform导入s会因401未经授权而失败,即使一切都设置正确
基本上,我有:
provider "github" {
token = "${var.github_token}"
organization = "goreleaser"
}
terraform {
required_version = "~> 0.12.0"
}
variable
我有一个aws的例子被这样挑战
resource "aws_instance" "an_instance" {
count = "${var.instance_count}"
......
}
这很好,但是当我添加这个片段时
resource "aws_ebs_volume" "on_host_1_1" {
availability_zone = "${aws_instance.an_instance[1].availability_zone
我正在使用terraform sagemaker创建笔记本实例。我想在禁用直接互联网访问的私有VPC中启动笔记本实例,而不是亚马逊管理的VPC,但我在terraform aws_sagemaker_notebook_实例中看不到禁用直接互联网访问的选项。请就如何处理这种情况提出建议
谢谢大家! Terraform尚不支持aws_sagemaker_notebook_实例资源的DirectInternetAccess属性。你可以在这里追踪公关
作为一项工作,我使用CloudFormation。如果
我在terraform中有以下代码:
data "file" "policy" {
count = "${length(var.s3_bucket_name)}"
template = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListAllMyBuckets"],
"Resource": ["*"
标签: Terraform
amazon-cloudwatch-metricscloudwatch-alarms
以下地形资源创建AWS cloudwatch警报,但仍处于“数据不足”状态。我相信这是因为我使用的一些维度名称(DevicePath、fstype)可能不正确。我知道名称MountPath和InstanceID是正确的,但无法验证其他两个(DevicePath、fstype)。AWS分别将这些维度称为路径、设备、fstype和主机,但是,无法找到terraform所称的参考
resource "aws_cloudwatch_metric_alarm" "Low_Disk_Space_For_ro
嗨,我正在尝试创建一个Terraform脚本,它将以CSV文件的形式从用户那里获取输入,并创建多个Azure资源。
例如,如果用户希望批量创建:ResourceGroup>Vnet>子网,他将提供CSV格式的输入,如下所示:
resourcegroup,RG_location,RG_tag,domainname,DNS_Zone_tag,virtualnetwork,VNET_location,addressspace
csvrg1,eastus2,Terraform RG,test.s
标签: Terraform
azure-keyvaultterraform-provider-azure
大家好,我面临的问题是,我有一个脚本,其中我正在创建资源组和密钥库,当我单独创建RG和密钥库时,我将凭证从central KV复制到了新的,然后将凭证复制部分添加到脚本中,创建了所有内容,但当我将代码与如果发生凭据复制,则表示RG中的错误密钥库不存在。我在问,在地形中有没有我需要遵循的序列?
Resource.tf
resource "azurerm_resource_group" "main" {
name = "${var.pre
我定义了一个变量tenants,它是一个映射:
variable tenants {
type = map
default = {
tenant1 = {
name = "Tenant1"
},
tenant2 = {
name = "Tenant2"
}
}
}
在根文件中,我调用模块tenant,如下所示:
module "tenant
我有一种userdata.sh(请参见下文)用于启动EC2实例。但是,hcl文件无法解释shell脚本变量
我打算设置tls\u disable=true,但由于hcl似乎无法解释BOUNDARY\u tls\u DISABLED此变量,因此一直跳过此部分。任何帮助都将不胜感激
#!/bin/bash
BOUNDARY_TLS_DISABLED=true
...
cat > /home/ubuntu/boundary-worker.hcl << EOF
listener &
如果我有现有的cloudflare设置(使用web控制台),如何导入/下载现有的cloudflare资源,例如使用terraform的DNS记录?
因此,我可以使用它作为修改/更新它的起点
谢谢。每个地形资源都有一个导入现有数据的示例。例如
$ terraform import cloudflare_record.default ae36f999674d196762efcc5abb06b345/d41d8cd98f00b204e9800998ecf8427e
我想重新使用dns_aaaa_记录中的地址中的字符串,如何重新使用dns_ptr_记录中设置的地址
resource "dns_aaaa_record_set" "app-stage-dns" {
count = length(var.datacenter)
zone = format("%s.", var.dns_zone)
name = "app-stage-${var.datace
我有一个terraform项目,为一个地区建立了一个VPC,用于该地区的所有EKS集群。
成功运行terraform apply后,我有以下输出:
Outputs:
all_worker_mgmt_id = "sg-09992bfxxxx13b782"
azs = tolist([
"us-east-2a",
"us-east-2b",
"us-east-2c",
])
public_subnets =
我目前正在尝试利用for_each函数创建aws_路由资源,并将这些路由与使用count函数构建的许多aws_路由表资源相关联。我想知道是否有一种方法可以让我仍然使用aws_route资源中的for_each函数并引用aws_route_表资源
我的最终目标是创建~5条路由并将其应用于~7条路由表
以下是我的代码供参考:
resource "aws_route_table" "private" {
vpc_id = aws_vpc.vpc.id
c
我有一个字符串,其中有多个子字符串需要替换
字符串:
string1=“我想明天坐飞机”
我需要从地图上取任何需要替换的东西
地图:
map1 = {
"I": "we"
"want": "do not want"
"tomorrow": "today"
}
因此,map1map中的键是string1字符串中需要替换的键,这些值应该是字符串中的新值
变量.tf
tfvars
main.tf
我必须在我的模块块中引用一个查询值,但我不知道如何引用它。因为它是对象列表中的对象列表,所以我不确定如何从列表中选择特定的值
有人能帮我吗
你已经问过了,你得到了答案。
variable "list_views_datasets" {
description = "List of Views in the Datasets"
type = list(object({
dataset_id = s
标签: Terraform
terraform-provider-azureterraform0.12+
我正在尝试使用Terraform创建CosmosDB,并使用子网的列表变量类型,因为我们在一个VNET中有多个子网。但我的错误率越来越低-
var.subnet是包含2个元素的字符串列表
│ 无法在字符串模板中包含给定值:字符串必需
我的variable.tf和main.tf在这里-
# ================
# Variable.tf
# ==============
variable "vnet" {
description = "Provide
1 2 3 4 5 6 ...
下一页 最后一页 共 61 页