amazon-web-services - Terraform 错误:ClientException:指定卷参数时,只能使用一种卷配置类型
问题描述
我使用 terraform 创建多个任务定义,其中一个任务定义有多个卷,但是当我尝试从此错误创建时,是否可以通过 terraform 在任务中创建多个卷?因为通过 aws 是可能的。但是 terraform 显示了这个错误。
错误:ClientException:指定卷参数时,只能使用一种卷配置类型
我搜索了整个互联网以找到这个问题并没有找到答案,因为我已经在 terraform 文档中使用了与此相等的动态卷。
terraform {
required_version = ">= 0.13.0"
required_providers {
aws = "~> 3.0"
}
}
variable "task_definition_names" {
type = any
default = [
{
task_definition_name = "jenkins"
task_definition_file = "jenkins-task-definition.json"
shared_memory_size = 64
cpu = 0
memory_reservation = 3900
entrypoint = ""
ecr_repository_name = "jenkins:lts"
dns = "jenkins.com.br"
hosted_zone = ""
allowed_volumes = true
volume = [
{
name = "efs-jenkins"
host_path = "/var/jenkins_home"
efs_volume_configuration = [{
file_system_id = "fs-"
root_directory = "/"
transit_encryption = "ENABLED"
authorization_config = [{
access_point_id = "fsap-"
iam = "ENABLED"
}]
}]
},
{
name = "docker-sock"
host_path = "/var/run/docker.sock"
},
{
name = "docker-bin"
host_path = "/usr/bin/docker"
}
]
},
{
task_definition_name = "staging-api"
task_definition_file = "staging-api-task-definition.json"
shared_memory_size = 64
cpu = 0
memory_reservation = 900
entrypoint = ""
ecr_repository_name = "staging-api"
allowed_volumes = false
volume = []
}
]
}
resource "aws_ecs_task_definition" "main" {
count = length(var.task_definition_names)
family = var.task_definition_names[count.index].task_definition_name
container_definitions = templatefile("${path.module}/templates/${var.task_definition_names[count.index].task_definition_file}", var.task_definition_names[count.index])
dynamic "volume" {
for_each = var.task_definition_names[count.index].volume
content {
host_path = lookup(volume.value, "host_path", null)
name = volume.value.name
dynamic "efs_volume_configuration" {
for_each = lookup(volume.value, "efs_volume_configuration", [])
content {
file_system_id = lookup(efs_volume_configuration.value, "file_system_id", null)
root_directory = lookup(efs_volume_configuration.value, "root_directory", null)
transit_encryption = lookup(efs_volume_configuration.value, "transit_encryption", null)
transit_encryption_port = lookup(efs_volume_configuration.value, "transit_encryption_port", null)
dynamic "authorization_config" {
for_each = lookup(efs_volume_configuration.value, "authorization_config", [])
content {
access_point_id = lookup(authorization_config.value, "access_point_id", null)
iam = lookup(authorization_config.value, "iam", null)
}
}
}
}
}
}
}
此脚本用于创建多个任务定义。
解决方案
我在使用 awscli 时遇到了同样的问题,但是删除了对配置host
和host_path
配置中的任何引用为我解决了这个问题。
推荐阅读
- node.js - 我放入哈巴狗模板的 json 数据将 '<' 放在字符串的开头,将 '>' 放在结尾。为什么?我该如何摆脱它?
- python - 在不重新索引或丢失索引的情况下在列上连接不同形状的数据框
- laravel - 更新和销毁方法在 laravel eloquent 模型中不起作用?
- react-native - React Native - 用滚动动画底部标签栏
- java - Android Webview EvaluateJavascript 有时不返回响应
- google-apps-script - 除非已安装的触发器已经存在,否则如何创建“创建触发器”附加菜单选项?
- excel-2016 - 在 Excel 工作表中查找单词列表
- python - 为什么我不能应用 .remove() 方法在 python 中列出?
- python - 如何在不使用的情况下将模块安装到特定的 Jupyter 内核!还是终端?
- arrays - 我可以在 bash 数组内的大括号(排列)中添加一个新值吗?