terraform - 基于 terraform 中 count.index 的属性差异
问题描述
我正在使用 Hashicorp terraform 在 AWS 上创建一个 MySQL 集群。我创建了一个名为的模块mysql
,并希望将创建的第一个实例标记为master
. 但是,根据 terraform 文档:
模块目前不支持 count 参数。
我该如何解决这个问题?目前,我的文件中有这些:
$ cat project/main.tf
module "mysql_cluster" {
source = "./modules/mysql"
cluster_role = "${count.index == "0" ? "master" : "slave"}"
}
$ cat project/modules/mysql/main.tf
..
resource "aws_instance" "mysql" {
ami = "ami-123456"
instance_type = "t2.xlarge"
key_name = "rsa_2048"
tags {
Role = "${var.cluster_role}"
}
count = 3
}
这会引发错误:
$ project git:(master) ✗ terraform plan
Error: module "mysql_cluster": count variables are only valid within resources
我variables.tf
在 mysql 模块和根模块的文件中声明了必要的变量。我该如何解决这个问题?提前感谢您的帮助!
解决方案
您count
在module
资源中的方式会推断您希望创建 3 个模块,而不是创建模块中的 3 个资源。您可以从module
资源中规定计数,但使用的任何逻辑都count.index
需要位于模块内。
主文件
module "mysql_cluster" {
source = "./modules/mysql"
instance_count = 3
}
mysql.tf
resource "aws_instance" "mysql" {
count = "${var.instance_count}"
ami = "ami-123456"
instance_type = "t2.xlarge"
key_name = "rsa_2048"
tags {
Role = "${count.index == "0" ? "master" : "slave"}"
}
}
推荐阅读
- asp.net-core - 如何在 ASP.NET Core 中使用 Swashbuckle 为 Swagger UI 进行 OAuth2 授权
- javascript - 如何调用所有者对象的函数
- machine-learning - 正确使用 keras.layers.Concatenate
- python - “密集”类型的对象没有 len()
- artificial-intelligence - 如何在边缘实现安全关键型 AI 计算集群?
- jenkins - 无法从代码分析中排除包
- amazon-web-services - AWS ECS 服务错误:必须启用任务长 arn 格式才能使用 ECS 托管标签启动服务任务
- regex - Powershell 在特定字符串之前添加行
- vue.js - ChartJS和VueJS中条形图中每个条的颜色不同
- snackbar - 基本 Snackbar 示例未显示在 Material Design Components for Web