terraform выдает ошибку: неподдерживаемый аргумент в модуле при запуске terraform plan?

#amazon-web-services #syntax-error #terraform #terraform-provider-aws #terraform-modules

#amazon-web-services #синтаксическая ошибка #terraform #terraform-provider-aws #terraform-модули

Вопрос:

Я получаю ошибку: неподдерживаемый аргумент, когда я запускаю terraform plan в версии 12.24.

 Error: Unsupported argument
  on .terraform/modules/app/main.tf line 261, in resource "aws_db_instance" "db_instance":
 261:   timeouts = {
An argument named "timeouts" is not expected here. Did you mean to define a
block of type "timeouts"?
  

Это код в файле tf:

 timeouts = {
    create = "${var.db_instance_create_timeout}"
    update = "${var.db_instance_update_timeout}"
    delete = "${var.db_instance_delete_timeout}"
  }
  

Я не уверен, как исправить эту ошибку.

  • вышеуказанная ошибка была исправлена путем удаления «=» после тайм-аутов.

Я также получаю больше ошибок, требующих решения:

 Error: Unsupported argument

  on .terraform/modules/rds/main.tf line 150, in resource "aws_db_parameter_group" "db_parameter_group":
 150:   parameter = concat(var.parameters, local.parameters[local.parameter_lookup])

An argument named "parameter" is not expected here. Did you mean to define a
block of type "parameter"?
  

Код в файле tf:

   parameter = concat(var.parameters, local.parameters[local.parameter_lookup])
  

как это исправить?

Комментарии:

1. В сообщении об ошибке утверждается, что вы должны использовать блок вместо аргумента для timeouts , и документация соглашается: registry.terraform.io/providers/hashicorp/aws/latest/docs /. … Вы пробовали это?

2. terraform.io/docs/configuration/resources.html … после тайм-аутов не должно быть знака равенства …. тайм-ауты {

3. Я сделал, и это сработало.. Спасибо!

4. Я добавил еще одну проблему, с которой я столкнулся в вопросе.. нужна помощь в решении этой проблемы тоже!

5. Это снова та же проблема. Вы добавили ненужный = параметр, сделав его аргументом, а не блоком, как следует из сообщения об ошибке.

Ответ №1:

Я копирую решение, которое сработало для меня, с github, благодаря члену hashicorp bflad :

В Terraform 0.12 (или выше) анализатор языка конфигурации строже относится к различию между аргументами и блоками конфигурации. Эта ошибка:

 An argument named "XXX" is not expected here. Did you mean to
define a block of type "XXX"?
  

Обычно означает, что = (знак равенства) необходимо удалить из назначения аргумента, чтобы он правильно анализировался как блок конфигурации, например

 root_block_device {
  

Это различие в синтаксисе HCL может показаться тривиальным, но под капотом эта более строгая проверка типов позволила обеспечить согласованность с синтаксисом JSON. Более подробную информацию об этом изменении можно найти в руководстве по обновлению Terraform 0.12. Кстати, в этом руководстве указывается на полезную команду обновления terraform 0.12, которая должна автоматически устранять подобные проблемы в ваших конфигурациях Terraform при обновлении с Terraform 0.11. 👍

Комментарии:

1. При менее строгом синтаксическом анализе можно было бы выполнить «root_block_device = «$ {var.root_block_device}». Это больше не кажется возможным. Есть ли другой способ назначения блоков конфигурации?

2. Это было сцепление, спасибо за предоставление этого ответа!

Ответ №2:

Ошибка

Аргумент с именем «secret_environment_variables» здесь не ожидается. Вы имели в виду определить блок типа «secret_environment_variables»?

Проблема

main.tf

 resource "google_cloudfunctions_function" "this" {
 secret_environment_variables = var.secret_environment_variables
}
  

variables.tf

 variable "secret_environment_variables" {
  type        = any
  default     = {}
  description = "Secret environment variables configuration."
}
  

Решение

 resource "google_cloudfunctions_function" "this" {
  secret_environment_variables {
    key     = var.secret_environment_variables_key
    secret  = var.secret_environment_variables_secret
    version = var.secret_environment_variables_version
  }
}
  
 variable "secret_environment_variables_key" {
  type        = string
  default     = null
  nullable    = true
  description = "Name of the environment variable."
}
variable "secret_environment_variables_secret" {
  type        = string
  default     = null
  nullable    = true
  description = "ID of the secret in secret manager (not the full resource name)."
}
variable "secret_environment_variables_version" {
  type        = string
  default     = null
  nullable    = true
  description = "Version of the secret (version number or the string `latest`). It is recommended to use a numeric version for secret environment variables as any updates to the secret value is not reflected until new clones start."
}