Terraform-provider-local: grpc: pesan yang diterima lebih besar dari maks

Dibuat pada 13 Jun 2019  ·  24Komentar  ·  Sumber: hashicorp/terraform-provider-local

_Masalah ini awalnya dibuka oleh @tebriel sebagai hashicorp/terraform#21709. Itu dimigrasikan ke sini sebagai akibat dari pemisahan penyedia . Isi asli masalah ada di bawah._


Versi Terraform

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

File Konfigurasi Terraform

// Nothing exceptionally important at this time

Keluaran Debug


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

Keluaran Kerusakan


Tidak ada kecelakaan

Perilaku yang Diharapkan


Seharusnya sudah menyelesaikan rencananya

Perilaku Sebenarnya

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

Langkah-langkah untuk Reproduksi


rencana terraform pada proyek berukuran sedang saya.

Konteks Tambahan


Berjalan di dalam make, tetapi memiliki profil yang sama di luar make. Ini berlaku baik di 0.11.14.

Referensi

enhancement

Komentar yang paling membantu

Bisakah ini mendapat perhatian lebih?

Semua 24 komentar

Setelah beberapa penyelidikan dan diskusi di hashicorp/terraform#21709, saya memindahkan ini ke sini untuk mewakili perubahan untuk menambahkan batas ukuran file ke penyedia ini (lebih kecil dari batas 4MB yang diberlakukan oleh Terraform Core sehingga pengguna tidak akan pernah mencapai kesalahan umum itu bahkan ketika menghitung overhead protokol) dan untuk mendokumentasikan batas itu untuk sumber data local_file dan jenis sumber daya local_file .

Apakah ini masih terbuka? Saya ingin mengambil ini jika demikian.
Bisakah Anda mengklarifikasi/mengkonfirmasi permintaan tersebut?

  1. Tambahkan batas ukuran file 4mb di penyedia lokal melalui validator
  2. Perbarui dokumen untuk mencerminkan batas ukuran

Halo

Apakah Anda berencana untuk memperbaiki masalah ini? Jika demikian, kapan?

Apakah ini masih terbuka? Saya ingin mengambil ini jika demikian.
Bisakah Anda mengklarifikasi/mengkonfirmasi permintaan tersebut?

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

2. Update docs to reflect the size limit

Saya pikir perbaikan terbaik adalah dengan mendukung file> 4Mb

Ya, masalah ini masih berlanjut.

Ya, saya mengalami masalah ini hari ini di sumber data local_file yang menunjuk ke file arsip AWS Lambda yang prospektif.

Halo, apakah ada kemajuan dalam masalah ini atau sudah diparkir? Ini bisa menjadi masalah yang lebih besar jika kita menggunakan file template dari Kubernetes dan harus menyimpan file ke disk. Sejak kubernetes file Yaml bisa menjadi sangat besar.
pekerjaan saya adalah membagi file menjadi 2. Ukuran file awal adalah 2Mb, sekarang saya memiliki 2 file yang masing-masing kurang dari 1Mb dan itu berhasil.
Terima kasih

Mengalami ini dengan menggunakan sumber daya 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)

Apakah ada kesepakatan tentang bagaimana kita bisa bergerak maju?
File lebih dari 4mb hanya berfungsi sebelumnya karena kurangnya pemeriksaan keamanan (Lihat https://github.com/hashicorp/terraform/issues/21709#issuecomment-501497885) sehingga kesalahannya valid dan tidak terdengar seperti mengubah batas di inti terraform akan menjadi opsi (Re: "bukan bug, itu fitur").

Kami mungkin dapat menanganinya secara lokal dengan membagi file menjadi potongan 4mb di dalam penyedia, tetapi saya tidak yakin apakah itu akan menimbulkan masalah tersendiri. Saya dapat mengejar itu tetapi sebelum saya membuang waktu, apakah itu dapat diterima @apparentlymart ?

Menggunakan Terraform 0.12.23 dan aws provider 2.61.0, Mendapatkan kesalahan yang sama Error: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (18182422 vs. 4194304)

Sepertinya paket inti telah diperbarui untuk memungkinkan 64MB - https://github.com/hashicorp/terraform/pull/20906#

Dan menurut batasan lambda docs, file 50MB dapat diunggah.

Bukankah lebih baik untuk mengatur pemeriksaan keamanan ke 50MB?

Sebagai FYI bagi siapa saja yang mengalami masalah ini.

Jika Anda memasukkan file zip Anda ke dalam ember s3, Anda seharusnya tidak menghadapi masalah ini. Tetapi ingat untuk menggunakan fungsi aws_s3_bucket_object.lambda_zip.content_base64 daripada fungsi filebase64(path), maka Anda tidak akan mengalami masalah ini (atau setidaknya itu adalah perbaikan untuk saya).

Pilihan lainnya adalah menggunakan sumber data eksternal.

misalnya, diberi nama file dengan variabel deployment_package , hasilkan hash base64 dengan yang berikut:

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
  ]
}

dan gunakan seperti itu:

source_code_hash = data.external.deployment_package.result.filebase64sha256

yang seharusnya memberi Anda

+ source_code_hash = "ZjRkOTM4MzBlMDk4ODVkNWZmMDIyMTAwMmNkMDhmMTJhYTUxMDUzZmIzOThkMmE4ODQyOTc2MjcwNThmZmE3Nwo="

Memberi +1 pada masalah ini, ini membuat kami sangat kesakitan karena kami sengaja ingin memasukkan file yang lebih besar ke dalam terraform.

Saya melihat bahwa https://github.com/hashicorp/terraform/pull/20906 telah digabungkan lebih dari setahun yang lalu, tetapi gejala yang dijelaskan di atas masih ada.

Bisakah batas transfer grpc ditingkatkan di seluruh proyek untuk memungkinkan layanan hilir yang dapat menerima muatan seperti itu bekerja dengan baik tanpa solusi?

Masih terjadi dengan Terraform 0.12.24. Adakah solusi untuk memperbaiki kesalahan batas GRPC?

Ini masih terjadi dengan Terraform 0.13.5, saat menggunakan body dengan API Gateway (v2) , menggunakan versi 3.14.1 dari penyedia AWS.

Untuk menambah kejelasan, saya menggunakan fungsi file dalam kasus saya:

body = file(var.body)

File yang dimaksud berukuran 1,5MB.

Jika saya menghapus deklarasi body , Terraform berjalan dengan sukses.

Memperbarui

Saya telah menggunakan jq untuk mengompres dan memperkecil ukuran badan menjadi ~500KB, dan tidak ada kesalahan. Sepertinya ambang batas mungkin lebih rendah dari 4MB, 1MB, mungkin?

Saya masih memiliki masalah ini dengan
Terraform v0.12.29
provider.archive v2.0.0
provider.aws v3.15.0
provider.template v2.2.0

Perlu filebase64 untuk mendukung file > 4mb karena menggunakannya dalam kombinasi dengan archive_file adalah satu-satunya cara untuk membuatnya idempoten.
Menggunakan local_file di antara rem yang....

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
  }
}

Saya juga mengalami masalah ini saat mencoba menerapkan fungsi Rust ke IBM Cloud. Demikian pula dengan @atamgp , saya memiliki data "archive_file" yang gagal dengan

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

Tetapi bahkan jika ini berhasil (atau file .zip dibuat secara manual), resource "ibm_function_action" akan tetap gagal dengan

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

Menghadapi masalah yang sama dengan peta konfigurasi 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

Saya mengalami masalah yang sama - sepertinya ada batasan jumlah karakter dalam kode sumber daya.

Menggunakan file yang diunggah ke bucket (tanpa mengompresnya) memperbaiki masalah saya - Saya berasumsi, bahwa yang membantu adalah fakta, bahwa .body dari s3 biasanya merupakan aliran, berlawanan dengan .rendered (yang saya gunakan sebelumnya), yang menghasilkan lebih banyak karakter dalam sumber sumber daya.

Ini masih terjadi dengan Terraform 0.13.5, saat menggunakan body dengan API Gateway (v2) , menggunakan versi 3.14.1 dari penyedia AWS.

Untuk menambah kejelasan, saya menggunakan fungsi file dalam kasus saya:

body = file(var.body)

File yang dimaksud berukuran 1,5MB.

Jika saya menghapus deklarasi body , Terraform berjalan dengan sukses.

Memperbarui

Saya telah menggunakan jq untuk mengompres dan memperkecil ukuran badan menjadi ~500KB, dan tidak ada kesalahan. Sepertinya ambang batas mungkin lebih rendah dari 4MB, 1MB, mungkin?

@finferflu - telah menemukan hal yang sama, kami mengalami ini dengan file openapi json 1,5mb. Saya mendapat kesan bahwa bukan pegangan file sebenarnya pada JSON yang menyebabkan ini, tetapi "tubuh" dari REST API sekarang berisi ini yang kemudian dimasukkan dalam status - dan mungkin ada banyak karakter pelarian dan item lain di negara bagian - sehingga statefile melebihi 4mb. Untuk menghindari file lokal untuk kesombongan, kami mengunggah ke S3 dan menggunakan objek data s3 di TF dan masalah yang sama terjadi - jadi indikator kuat untuk mendukung ini.

Masih mendapatkan masalah ini dengan v0.15.4 dan cloud terraform. Kami mengimpor beberapa infrastruktur saat menggunakan cloud terraform dan kemudian mencoba rencana, tetapi tidak dapat mengeluarkan file status:

╷.
Kesalahan: Kesalahan plugin
│.
dengan okta_group.user_type_non_service_accounts,
di groups.tf baris 174, di sumber daya "okta_group" "user_type_non_service_accounts":
174: sumber daya "okta_group" "user_type_non_service_accounts" {
│.
Plugin mengembalikan kesalahan tak terduga dari plugin.(*GRPCProvider).UpgradeResourceState: rpc error: code = ResourceExhausted desc = grpc: menerima pesan lebih besar dari maks (6280527 vs. 4194304)

File saya sekitar 2,4 MB dan saya menghadapi masalah ini bahkan hari ini.

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

ada solusi untuk ini tolong?

Kami mengalami kesalahan ini saat menggunakan file JSON angkuh dan gateway API.
Kami sementara memperbaiki masalah ini dengan mengompresi file swagger JSON untuk mengecilkan file yang cukup. ukuran kesombongan berubah dari 1.4Mb menjadi 950Kb.

Ini bukan solusi nyata, tetapi mungkin membantu seseorang yang juga mendekati batas.
Anehnya, kesalahan terus berlanjut meskipun kami tidak menggunakan local.template_file atau local.file data/resource (kami menggunakan fungsi templatefile sebagai gantinya).

Bisakah ini mendapat perhatian lebih?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat