count是能够在 Terraform 中有条件地供应资源的一个很好的元论点。根据我以前的经验,我们做了类似的事情my_var = "1"并使用它以编程方式控制资源创建count。
因为count在这种情况下接受一个 string "1",但也可以解释一个number类型(例如1),我想知道:
a) Terraformcount在幕后做什么;它首先将字符串解析为数字吗?
b) 它还可以接受其他数据类型,例如bool?
我希望有一个其中.tfvars有 a my_var = true,然后将其传递到count受影响资源的元参数中,例如count = var.my_var。这可能吗?
我还恳请一些信息,这些信息通常涉及如何在 Terraform 中解释数据类型的“真实性”。如果您有文档或博客文章可以分享,我们将不胜感激!
编辑:我现在已经修改了问题以显示整个 main.tf 文件。
\n我有一个 Terraform 文件,该文件应该创建一个 AWS S3 存储桶,但每次运行时我不断收到的错误之一terraform plan是:
\xe2\x94\x82 Error: Invalid provider configuration\n\xe2\x94\x82 Provider "registry.terraform.io/hashicorp/aws" requires explicit configuration. Add a provider block to the root module and configure the provider's required arguments as described in the provider documentation.\nRun Code Online (Sandbox Code Playgroud)\nmain.tf 文件:
\nterraform {\n backend "s3" {\n region = "us-east-1"\n bucket = "bucketname"\n key = "path/terraform.tfstate" \n dynamodb_table = "tf-state-lock" \n access_key = "<access_key>"\n secret_key = "<secret_key"\n }\n\n required_providers {\n aws = {\n version …Run Code Online (Sandbox Code Playgroud) amazon-s3 amazon-web-services terraform terraform-provider-aws
我正在尝试使用 terraform 部署 kubernetes ingress。\n如此处所述链接和我自己的变体:
\nresource "kubernetes_ingress" "node" {\n metadata {\n name = "node"\n }\n spec {\n ingress_class_name = "nginx"\n rule {\n host = "backend.io"\n http {\n path {\n path = "/"\n backend {\n service_name = kubernetes_service.node.metadata.0.name\n service_port = 3000\n }\n }\n }\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n错误:
\n\xe2\x95\xb7\n\xe2\x94\x82 Error: Failed to create Ingress \'default/node\' because: the server could not find the requested resource (post ingresses.extensions)\n\xe2\x94\x82 \n\xe2\x94\x82 with kubernetes_ingress.node,\n\xe2\x94\x82 on node.tf line 86, in resource "kubernetes_ingress" "node":\n\xe2\x94\x82 …Run Code Online (Sandbox Code Playgroud) 需要在 Google 云存储桶中创建多个文件夹。我知道可以创建存储桶,但不确定如何在同一个存储桶中创建多个文件夹。
我认为下面的代码适用于存储桶中的一个文件夹。
resource "google_storage_bucket" "storage_bucket" {
name = "my-test-bucket"
location = "us-east4"
project = "my-project"
}
resource "google_storage_bucket_object" "my_folder" {
name = "fold/"
bucket = "${google_storage_bucket.storage_bucket.name}"
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何对多个文件夹执行此操作?
google-cloud-storage google-cloud-platform terraform terraform-provider-gcp
我正在编写一个用于创建 Azure MySQL 的 Terraform 脚本。在选择 sku_name 部分时,我找不到如何选择这些名称。我发现这个链接描述了定价等级。有什么地方可以在单个链接或页面上获取 sku_name 及其详细信息的列表吗?
值得注意的是,sku_name 的形式如下:
sku_name -(必需)指定此 MySQL 服务器的 SKU 名称。SKU 的名称遵循层 + 系列 + 核心模式(例如 B_Gen4_1、GP_Gen5_8)。
但是,我们从哪里获得选项列表呢?
我有带有 Name=product 标签的 Lambda。
我想使用 Terraform 获取它们,查看aws_lambda_function,我只能通过 function_name 获取单个 lambda
data "aws_lambda_function" "existing" {
function_name = var.function_name
}
Run Code Online (Sandbox Code Playgroud) 我是 AWS 新手,我正在尝试通过 Terraform 为 ECS 集群提供容量提供程序。我的计划目前执行没有错误,我可以看到容量提供程序创建了我的实例,但这些实例没有注册到集群中,即使可以在 Web 控制台的集群编辑页面中看到提供程序。
这是我的集群配置:
resource "aws_ecs_cluster" "cluster" {
name = "main"
depends_on = [
null_resource.iam_wait
]
}
data "aws_ami" "amazon_linux_2" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["amzn2-ami-ecs-hvm-*-x86_64-ebs"]
}
}
resource "aws_launch_configuration" "cluster" {
name = "cluster-${aws_ecs_cluster.cluster.name}"
image_id = data.aws_ami.amazon_linux_2.image_id
instance_type = "t2.small"
security_groups = [module.vpc.default_security_group_id]
iam_instance_profile = aws_iam_instance_profile.cluster.name
}
resource "aws_autoscaling_group" "cluster" {
name = aws_ecs_cluster.cluster.name
launch_configuration = aws_launch_configuration.cluster.name
vpc_zone_identifier = module.vpc.private_subnets
min_size = 3
max_size …Run Code Online (Sandbox Code Playgroud) 我在 terraform 模块中定义了自定义资源:
resource "aws_alb_target_group" "whatever"
{
....
}
Run Code Online (Sandbox Code Playgroud)
事实证明whatever这个名字不好,我需要更新它。
经典的方法是登录到每个环境并执行terraform state mv,但是我有很多环境,并且没有自动化执行此类操作。
如何在不手动移动状态的情况下更改资源名称(仅通过编辑 terraform 模块和应用计划)?
我试图测试运行我公司的 terraform 模块。
\n然后运行 terraform apply 出现以下错误。
\n\xe2\x95\xb7\n\xe2\x94\x82 Error: Missing required argument\n\xe2\x94\x82\n\xe2\x94\x82 The argument "domain" is required, but was not set.\n\nRun Code Online (Sandbox Code Playgroud)\n我搜索了所有项目文件夹,包括文件夹中的文件.terraform,但找不到该变量。
我如何知道哪个 terraform 脚本给出了该错误?
\n我使用 Terraform 配置 EC2 实例。它还有一个启动脚本。我有 vars.tf,我在其中指定了所有变量。在我的 bash.sh 脚本中,它应该从 vars.tf 中获取一个变量
是否可以从 bash 脚本引用 vars.tf 中的变量?以下是我的用例。
bash
#!/bin/bash
docker login -u username -p token docker.io
Run Code Online (Sandbox Code Playgroud)
变量.tf
variable "username" {
default = "myuser"
}
variable "token" {
default = "mytoken"
}
Run Code Online (Sandbox Code Playgroud)
我的 bash 脚本应该从 vars.tf 中选择变量
如果这不可能,有什么解决方法吗?
terraform ×10
amazon-ecs ×1
amazon-s3 ×1
azure ×1
bash ×1
devops ×1
if-statement ×1
kubernetes ×1
mysql ×1
syntax ×1