Terraform-provider-local: grpc: получено сообщение больше максимального

Созданный на 13 июн. 2019  ·  24Комментарии  ·  Источник: hashicorp/terraform-provider-local

_Эта проблема была первоначально открыта @tebriel как hashicorp/terraform#21709. Он был перенесен сюда в результате разделения провайдера . Исходное тело вопроса ниже._


Терраформ-версия

Terraform v0.12.2
+ provider.archive v1.2.1
+ provider.aws v2.14.0
+ provider.local v1.2.2
+ provider.template v2.1.1

Файлы конфигурации Terraform

// Nothing exceptionally important at this time

Отладочный вывод


https://gist.github.com/tebriel/08f699ce69555a2670884343f9609feb

Вывод сбоя


Без падений

Ожидаемое поведение


Это должно было завершить план

Фактическое поведение

Error: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (9761610 vs. 4194304)

Действия по воспроизведению


план терраформирования в моем проекте среднего размера.

Дополнительный контекст


Работает внутри make, но имеет такой же профиль вне make. Это применимо в версии 0.11.14.

использованная литература

enhancement

Самый полезный комментарий

Пожалуйста, можно привлечь к этому больше внимания?

Все 24 Комментарий

После некоторого исследования и обсуждения в hashicorp/terraform#21709 я переместил это сюда, чтобы представить изменение, добавляющее ограничение на размер файла для этого провайдера (меньше, чем ограничение в 4 МБ, установленное Terraform Core, чтобы пользователи никогда не сталкивались с этой общей ошибкой, даже когда подсчет служебных данных протокола) и задокументировать это ограничение как для источника данных local_file , так и для типа ресурса local_file .

Это все еще открыто? Я хотел бы забрать это, если так.
Не могли бы вы уточнить/подтвердить запрос?

  1. Добавить ограничение на размер файла 4мб у локального провайдера через валидатор
  2. Обновите документы, чтобы отразить ограничение размера

Привет

Вы планируете решить эту проблему? Если да, то когда?

Это все еще открыто? Я хотел бы забрать это, если так.
Не могли бы вы уточнить/подтвердить запрос?

1. Add file size limit of 4mb in the local provider through a validator

2. Update docs to reflect the size limit

Я думаю, что лучшим решением будет поддержка файлов> 4Mb

Да, эта проблема все еще сохраняется.

Да, сегодня я столкнулся с этой проблемой в источнике данных local_file, указывающем на предполагаемый архивный файл AWS Lambda.

Здравствуйте, есть подвижки по этому вопросу или припарковался? Это может стать более серьезной проблемой, если мы используем файл шаблона из Kubernetes и должны хранить файл на диске. Поскольку kubernetes файлы Yaml могут стать довольно большими.
моя работа состоит в том, чтобы разделить файл на 2. Первоначальный размер файла был 2 МБ, теперь у меня есть 2 файла размером чуть меньше 1 МБ каждый, и это работает.
Спасибо

Столкнулся с этим, используя ресурс aws_lambda_function ...

data "local_file" "lambda" {
  filename = "${path.module}/out.zip"
}

resource "aws_s3_bucket_object" "lambda" {
  bucket = var.lambda_bucket
  key    = "${local.name}.zip"
  source = data.local_file.lambda.filename
  etag = filemd5(data.local_file.lambda.filename)
}

resource "aws_lambda_function" "login_api" {
  function_name    = local.name
  role             = aws_iam_role.lambda_role.arn
  handler          = "lambda.handler"
  s3_bucket        = aws_s3_bucket_object.lambda.bucket
  s3_key           = aws_s3_bucket_object.lambda.key
  source_code_hash = filebase64sha256(data.local_file.lambda.filename)

Есть ли соглашение о том, как мы можем двигаться дальше?
Файлы размером более 4 МБ раньше работали только из-за отсутствия проверок безопасности (см. в ядре terraform также будет вариант (Re: «не ошибка, это функция»).

Возможно, мы могли бы справиться с этим локально, разделив файлы на куски по 4 МБ внутри провайдера, но я не уверен, что это создаст собственные проблемы. Я могу продолжить это, но прежде чем тратить время, будет ли это вообще приемлемо @apparentlymart ?

Используя Terraform 0.12.23 и провайдера aws 2.61.0, получаю ту же ошибку Error: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (18182422 vs. 4194304)

Похоже, что основной пакет был обновлен, чтобы разрешить 64 МБ - https://github.com/hashicorp/terraform/pull/20906#

И в соответствии с лямбда-ограничениями можно загружать файлы размером 50 МБ.

Не лучше ли установить проверку безопасности на 50 МБ?

Так же, как FYI для тех, у кого есть эта проблема.

Если вы поместите свой zip-файл в корзину s3, вы не должны столкнуться с этой проблемой. Но не забудьте использовать функцию aws_s3_bucket_object.lambda_zip.content_base64 , а не функцию filebase64(path), тогда у вас не будет этой проблемы (по крайней мере, это было решением для меня).

Другой вариант — использование внешнего источника данных.

например, учитывая имя файла с переменной deployment_package , сгенерируйте хэш base64 со следующим:

data "external" "deployment_package" {
  program = ["/bin/bash", "-c", <<EOS
#!/bin/bash
set -e
SHA=$(openssl dgst -sha256 ${var.deployment_package} | cut -d' ' -f2 | base64)
jq -n --arg sha "$SHA" '{"filebase64sha256": $sha }'
EOS
  ]
}

и используйте его как таковой:

source_code_hash = data.external.deployment_package.result.filebase64sha256

что должно дать вам

+ source_code_hash = "ZjRkOTM4MzBlMDk4ODVkNWZmMDIyMTAwMmNkMDhmMTJhYTUxMDUzZmIzOThkMmE4ODQyOTc2MjcwNThmZmE3Nwo="

+1 эта проблема, она причиняет нам много боли, поскольку мы намеренно хотим встроить файлы большего размера в терраформу.

Я вижу, что https://github.com/hashicorp/terraform/pull/20906 был объединен более года назад, но описанный выше симптом все еще сохраняется.

Можно ли увеличить ограничение на передачу grpc по всему проекту, чтобы позволить нижестоящему сервису, который может принимать такие полезные нагрузки, работать должным образом без обходных путей?

Все еще происходит с Terraform 0.12.24. Любое обходное решение для исправления ошибки ограничения GRPC?

Это все еще происходит с Terraform 0.13.5 при использовании body с API Gateway (v2) с использованием версии 3.14.1 поставщика AWS.

Чтобы внести ясность, в моем случае я использую функцию file :

body = file(var.body)

Размер рассматриваемого файла составляет 1,5 МБ.

Если я удалю объявление body , Terraform запустится успешно.

Обновлять

Я использовал jq для сжатия и уменьшения размера тела до ~ 500 КБ, и ошибки не было. Похоже, порог может быть ниже 4 МБ, возможно, 1 МБ?

У меня все еще есть эта проблема с
Терраформ v0.12.29
провайдер.архив v2.0.0
провайдер.aws v3.15.0
провайдер.template v2.2.0

Требуется filebase64 для поддержки файла > 4 МБ, потому что использование его в сочетании с archive_file — единственный способ сделать его идемпотентным.
Использование local_file между тормозами, которые....

data "archive_file" "this" {
  type        = "zip"
  output_path = "${path.module}/test.zip"

  source {
    filename = "test.crt"
    content  = file("${path.module}/archive/test.crt")
  }

  source {
    filename = "binary-file"
    content  = filebase64("${path.module}/archive/binary-file")
  }

  source {
    filename = "config.yml"
    content  = data.template_file.this.rendered
  }
}

У меня также возникла эта проблема при попытке развернуть функцию Rust в IBM Cloud. Как и в случае с @atamgp , у меня есть data "archive_file" , который не работает с

grpc: received message larger than max (11484267 vs. 4194304)

Но даже если это удастся (или файл .zip будет создан вручную), resource "ibm_function_action" все равно не удастся с

grpc: received message larger than max (7074738 vs. 4194304)
Terraform v0.14.3
+ provider registry.terraform.io/hashicorp/archive v2.0.0
+ provider registry.terraform.io/hashicorp/local v2.0.0
+ provider registry.terraform.io/ibm-cloud/ibm v1.12.0

Столкнулся с той же проблемой с картой конфигурации kubernetes

resource "kubernetes_config_map" "nginx" {
  metadata {
    name      = "geoip"
    namespace = "ingress"
  }

  binary_data = {
    "GeoLite2-Country.mmdb" = filebase64("${path.module}/config/GeoLite2-Country.mmdb")
  }
}
Acquiring state lock. This may take a few moments...

Error: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (5248767 vs. 4194304)
Terraform v0.14.4
+ provider registry.terraform.io/hashicorp/kubernetes v1.13.3

Я столкнулся с той же проблемой - похоже, что есть ограничение на количество символов в коде ресурса.

Использование файла, загруженного в корзину (без его сжатия), устранило мою проблему - я предполагаю, что помог тот факт, что .body из s3 обычно является потоком, в отличие от .rendered (который я использовал ранее), который генерирует больше символов в источнике ресурса.

Это все еще происходит с Terraform 0.13.5 при использовании body с API Gateway (v2) с использованием версии 3.14.1 поставщика AWS.

Чтобы внести ясность, в моем случае я использую функцию file :

body = file(var.body)

Размер рассматриваемого файла составляет 1,5 МБ.

Если я удалю объявление body , Terraform запустится успешно.

Обновлять

Я использовал jq для сжатия и уменьшения размера тела до ~ 500 КБ, и ошибки не было. Похоже, порог может быть ниже 4 МБ, возможно, 1 МБ?

@finferflu - нашли то же самое, мы столкнулись с этим с файлом openapi json размером 1,5 МБ. У меня сложилось впечатление, что это был не фактический дескриптор файла в JSON, который вызывал это, но «тело» REST API теперь содержит это, которое затем включается в состояние - и, вероятно, много escape-символов и другие элементы в состоянии - поэтому файл состояния превышает 4 МБ. Чтобы избежать локального файла для чванства, мы загрузили на S3 и использовали объект данных s3 в TF, и возникла та же проблема — так что это сильный показатель для поддержки этого.

Все еще возникает эта проблема с v0.15.4 и облаком terraform. Мы импортировали некоторую инфраструктуру при использовании облака terraform, а затем попробовали план, но не можем получить файл состояния:


│ Ошибка: ошибка плагина

│ с okta_group.user_type_non_service_accounts,
│ на странице groups.tf 174, в ресурсе "okta_group" "user_type_non_service_accounts":
│ 174: ресурс "okta_group" "user_type_non_service_accounts" {

│ Плагин вернул непредвиденную ошибку от плагина.(*GRPCProvider).UpgradeResourceState: ошибка rpc: code = ResourceExhausted desc = grpc: получено сообщение больше максимального (6280527 против 4194304)

Мой файл весит около 2,4 МБ, и я сталкиваюсь с этой проблемой даже сегодня.

resource "local_file" "parse-template" {
  content =  templatefile(local.template-name, {
    var1 = value1
    var2 = value2
  }) 
  filename = "${local.script-name}"
}

какие-нибудь обходные пути для этого, пожалуйста?

Мы столкнулись с этой ошибкой при использовании файлов swagger JSON и шлюза API.
Мы временно исправили эту проблему, сжав файл JSON swagger, чтобы уменьшить размер файлов, чего было достаточно. размер swagger увеличился с 1,4 МБ до 950 КБ.

Это не настоящий обходной путь, но, возможно, он поможет кому-то, кто также близок к пределу.
Как ни странно, ошибка сохранялась, хотя мы не использовали данные/ресурсы local.template_file или local.file (вместо этого мы использовали функцию templatefile).

Пожалуйста, можно привлечь к этому больше внимания?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги