Aws-cli: Izinkan penyebaran cloudformation untuk menerima file paramater

Dibuat pada 13 Sep 2017  ·  55Komentar  ·  Sumber: aws/aws-cli

Saat menjalankan perintah cloudformation deploy akan berguna untuk dapat meneruskan parameter sebagai file (ke parameter --parameter-override ), seperti yang dapat dilakukan dengan create-stack dan update-stack.

Juga diminta di sini: https://github.com/awslabs/serverless-application-model/issues/111

closed-for-staleness cloudformation packagdeploy customization feature-request

Komentar yang paling membantu

Jika ada yang mencari solusi, Anda dapat mencoba menggunakan jq , seperti:
aws cloudformation deploy --parameter-overrides $(jq -r '.[] | [.ParameterKey, .ParameterValue] | join("=")' param.json) ...
Pelarian lebih lanjut mungkin diperlukan berdasarkan nilai parameter Anda.

Semua 55 komentar

Melihat kodenya, sepertinya kita hanya membutuhkan sesuatu di sekitar sini

https://github.com/aws/aws-cli/blob/develop/awscli/customizations/cloudformation/deploy.py#L178

yang membaca dalam file JSON, mungkin pemeriksaan kewarasan cepat, lalu meneruskannya ke deploy() .

Menandai sebagai permintaan fitur untuk penyebaran cloudformation.

@sanathkr pikiran?

ditunggu fitur ini 👍

Saya juga ingin fitur untuk tindakan package . Terima kasih! 👍

Melewati file parameter melalui sesuatu seperti --parameters seperti pada perintah CF create-stack dan update-stack (dan idealnya menggunakan sintaks konten file yang sama) akan membuat pengembangan template CF sedikit lebih mudah untuk Aku. Akan senang melihat fitur itu.

+1 untuk fitur ini. Terima kasih!

Selamat pagi!

Kami menutup masalah ini di sini di GitHub, sebagai bagian dari migrasi kami ke UserVoice untuk permintaan fitur yang melibatkan AWS CLI.

Ini akan memungkinkan kami mendapatkan fitur yang paling penting bagi Anda, dengan mempermudah pencarian dan menunjukkan dukungan untuk fitur yang paling Anda pedulikan, tanpa mengurangi percakapan dengan laporan bug.

Sebagai primer UserVoice cepat (jika belum terbiasa): setelah sebuah ide diposting, orang-orang dapat memilih ide tersebut, dan tim produk akan langsung menanggapi saran yang paling populer.

Kami telah mengimpor permintaan fitur yang ada dari GitHub - Cari masalah ini di sana!

Dan jangan khawatir, masalah ini akan tetap ada di GitHub demi anak cucu. Karena ini adalah impor teks saja dari posting asli ke UserVoice, kami akan tetap mengingat komentar dan diskusi yang sudah ada di sini pada masalah GitHub.

GitHub akan tetap menjadi saluran untuk melaporkan bug.

Sekali lagi, masalah ini sekarang dapat ditemukan dengan mencari judul di: https://aws.uservoice.com/forums/598381-aws-command-line-interface

-Tim Alat & SDK AWS

Entri ini secara khusus dapat ditemukan di UserVoice di: https://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168409-allow-cloudformation-deploy-to-accept-a-paramater

+1 untuk fitur ini. Terima kasih!

Berdasarkan umpan balik komunitas, kami telah memutuskan untuk mengembalikan permintaan fitur ke masalah GitHub.

Jika ada yang mencari solusi, Anda dapat mencoba menggunakan jq , seperti:
aws cloudformation deploy --parameter-overrides $(jq -r '.[] | [.ParameterKey, .ParameterValue] | join("=")' param.json) ...
Pelarian lebih lanjut mungkin diperlukan berdasarkan nilai parameter Anda.

Saya juga akan memberi +1 pada fitur ini.

Saya mengganti jq dengan jp jika memungkinkan. JMESPath layak dipelajari.

$ jp \
  --unquoted \
  --filename example-app-params-staging.json  \
  "join(' ', @[].join('=', [ParameterKey, ParameterValue])[])"
HostedZone=example.com KeyName=example-ap-southeast-2 TargetPort=8080 VpcStackName=vpc-example

Mengingat tindakan penerapan AWS CodePipeline CloudFormation memerlukan format file konfigurasi template tertentu , akan lebih baik jika Anda juga dapat mendukung format ini.

+1 untuk ini. Saya mengerti ingin menjaga "aws cloudformation deploy" tetap sederhana, tetapi perintah ini sudah memiliki flag baris perintah individual untuk kemampuan, tag, dan parameter (seperti semua perintah aws cloudformation lainnya), tetapi Anda telah membuatnya berfungsi secara berbeda (hanya menerima daftar string=string pada baris perintah, bukan struktur JSON dalam file). Anda harus membuat semua perintah "aws cloudformation" bekerja secara konsisten (termasuk penggunaan cli-input-json seperti hampir semua perintah aws CLI). jika Anda menginginkan penyederhanaan konstruksi tag untuk "aws cloudformation deploy", Anda harus memperkenalkan flag baris perintah yang berbeda, seperti --tags-overrides atau --parameters-overrides.

👍 atas permintaan fitur, alangkah baiknya jika ini didukung.

Ini akan menjadi fitur yang bagus untuk dimiliki! Ini akan sangat menyederhanakan Idempotensi saat membuat tumpukan cf dengan cli 👍

+1

+1

+1

@ColdFire87 @dan-lind @mnwk dapatkah Anda hanya 👍 edisi pertama, dan berhenti mengirim spam kepada siapa pun yang berlangganan masalah ini? Setiap komentar dengan 👍 adalah ping 20 orang....
(Maaf untuk yang lain, tapi kita harus melawan itu...)

@pierreozoux Maaf tentang itu, saya tidak bermaksud mengganggu orang :)

Apa yang dikatakan @cervantek . Saya hanya ingin menambahkan bahwa saya berharap tiket ini melacak menerapkan semua opsi ini untuk konsistensi dengan create-stack :

          [--template-body <value>]
          [--template-url <value>]
          [--parameters <value>]
          [--capabilities <value>]
          [--tags <value>]

Banyak orang seperti saya akan memiliki kode warisan yang ditulis menggunakan create-stack dan update-stack dan mereka ingin menulis ulang untuk menggunakan deploy . Seharusnya tidak sesulit ini.

+1 ke --parameters mendukung file JSON.

Tim kami baru-baru ini mulai membuat template cloudformation yang cukup besar sehingga memerlukan unggahan ke bucket S3, jadi kami sekarang melakukan transisi dari create-stack dan update-stack ke deploy... parameter file untuk bekerja dengan perintah baru ini. +1 untuk fitur ini

+1 untuk fitur ini

+1

+1

+1

+1

@olivier-schmitt-sonarsource @anshul0915 @lmunro @MiMo42 @markusbecker @benjammin12 dan lain-lain di masa mendatang, tolong 👍 masalah induknya daripada mengirim spam kepada kami yang berlangganan utas dengan komentar jika Anda hanya ingin memberi +1 pada masalah ini. Terima kasih.

👍

solusi lain untuk ini adalah menggunakan file .ini dengan daftar pasangan parameter key=value , dan menyebarkan menggunakan:
aws cloudformation deploy --parameter-overrides $(cat parameters.ini)
hal yang sama dapat dilakukan untuk tag.

solusi lain untuk ini adalah menggunakan file .ini dengan daftar pasangan parameter key=value , dan menyebarkan menggunakan:
aws cloudformation deploy --parameter-overrides $(cat parameters.ini)
hal yang sama dapat dilakukan untuk tag.

Pendekatan ini bagus dan berhasil! Namun demikian, untuk menjaga konsistensi dengan semua perintah lain (yang mendukung input 'json'), sarannya adalah menyimpan parameter dalam format file 'json' dan secara khusus memanipulasi file sebelum menggunakannya sebagai input untuk 'deploy' memerintah. Ini dapat dilakukan dengan perintah 'jq' yang tersedia untuk semua platform yang paling umum .

Konversi dapat dengan mudah dicapai dengan:

cat parameters.json | jq -r '.[] | .ParameterKey + "=" + .ParameterValue'

Selain itu, dapat dikonversi dengan cepat dan digunakan secara langsung sebagai input untuk perintah deploy :

aws cloudformation deploy --template-file ./sample-template.yaml --stack-name sample-stack --parameter-overrides $(cat parameters.json | jq -r '.[] | .ParameterKey + "=" + .ParameterValue')

Semoga membantu!

Untungnya seluruh masalah ini sepenuhnya disingkirkan oleh CDK. Aku sudah pindah.

Saya telah mencoba untuk pindah ke metode penyebaran dari create-stack/update-stack dan telah mendapatkan ini ditambah masalah lain - saya terkejut setelah 3 tahun masih tidak memiliki paritas dengan metode lama tersebut.

Saya mendapatkan masalah menggunakan solusi di atas untuk file tag di mana beberapa tag memiliki spasi dalam nilainya. Saya yakin ini dapat diselesaikan, tetapi masalah saya yang lain lebih mendasar - output dari perintah ini tidak terstruktur, jadi untuk mendapatkan id changeset saya harus mengurai string teks yang tidak terstruktur. Saya menganggap ini sangat cerdik (!) terutama karena metode create-change-set mengembalikan id di json.

Tautan ke masalah pada suara pengguna dalam pesan sebelumnya di utas ini sudah mati - adakah yang tahu di mana masalah ini sedang dilacak atau apakah itu masih sedang dikerjakan?

Teman-teman, harap pertimbangkan untuk menerapkan fitur ini. Menggunakan trik dengan cat atau meneruskan params melalui SSM sebagai solusi - ini adalah komplikasi yang tidak perlu atas fungsi yang sangat mendasar, dan fungsi tersebut didukung oleh hampir semua alternatif lain selain CFN .

Saya menemukan utas ini sambil mencari solusi untuk meneruskan parameter ke create-stack dan update-stack , tetapi saya akan memberikan 👍 saya di sini juga, tetapi menambahkan ke permintaan bahwa kami memiliki opsi untuk diteruskan file yang mengikuti format JSON yang diterima CodePipeline untuk CloudFormation.

Jika Anda adalah pengguna berat CodePipeline untuk menerapkan CloudFormation, biasanya file CloudFormation Anda dalam format CodePipeline dikomit dalam repositori Anda.

Ini berfungsi baik ketika Anda menjalankan CI/CD penuh yang dijalankan melalui pipa, tetapi itu membuat pengembangan lokal yang sangat membosankan. Saya memiliki beberapa skrip yang dapat menerjemahkan CodePipeline JSON ke JSON yang aws cloudformation create-stack dan update-stack terima melalui --parameters file://params.json , dan dengan beberapa pekerjaan tambahan mungkin dapat bekerja di beberapa peretasan orang-orang di atas telah menyebutkan dengan jq dan sejenisnya, tetapi itu hanya terasa seperti peretasan.

Silakan terapkan ini!

Silakan Terapkan ini! Ayo AWS, ini sudah buka hampir 3 tahun.

Hal lain yang sangat mengganggu dan agak terkait dengan topik adalah inkonsistensi antara format untuk memasok parameter CFN melalui CLI .

Saya adalah pengguna deploy saat ini, dan sejauh ini dapat melakukannya menggunakan parameter sebaris melalui trik dengan cat - yaitu --parameter-overrides $(shell cat configs/${LNMS_ENV}.properties) .

Masalah muncul ketika saya memutuskan untuk mengimplementasikan sesuatu yang mirip dengan plan Terraform dengan menggunakan Change Sets CFN. Ternyata aws cloudformation create-change-set mampu mengganti parameter, tetapi mengharapkan mereka untuk dikirim dalam format yang berbeda dari deploy !

Per dokumentasi CLI untuk deploy adalah:

ParameterKey1=ParameterValue1

Per dokumentasi CLI untuk create-stack , update-stack dan create-change-set adalah:

ParameterKey=string,ParameterValue=string

dengan juga opsi untuk memasok JSON.

Saya benar-benar tidak mengerti mengapa mereka berbeda, mengapa deploy tidak akan mendukung format JSON yang sama, dan apa yang harus saya lakukan - menyimpan dua file param yang pada dasarnya sama untuk setiap lingkungan?

Sejujurnya ini desain yang sangat aneh - tidak ada konsistensi, dan motivasi yang tidak dapat dibenarkan untuk menghindari penggunaan file parameter. Kecil (dan bisa dibilang kecil) hal-hal seperti ini sangat mempengaruhi produktivitas.

PS Tidak memperhatikan @ pablods90 mengambil ini, tetapi hanya membuktikan poin bahwa orang terus menciptakan kembali roda karena kurangnya fungsionalitas dasar :(

+1

Petualangan Kapten Konsistensi berlanjut.

Meskipun kita dapat menghindari penggunaan cat untuk menyimpan konfigurasi untuk deploy dalam format yang juga kompatibel dengan update-stack :

[
    {
        "ParameterKey": "ParamEnv",
        "ParameterValue": "prod"
    }
]

CodePipeline dengan jenis tindakan Deploy:CloudFormation menggunakan format file lain untuk diteruskan ke CFN:

{ 
  "Parameters": {
     "ParamEnv": "prod"
  }
}

Tidak ada komentar lebih lanjut ... Benar-benar lelah memukul masalah yang sama berulang-ulang. Ini buruk.

kami akhirnya hanya memiliki skrip shell satu baris untuk memanggil aws cloudformation deploy dipertahankan bersama file untuk CodePipeline, daripada cat atau jq shenanigans.

saya pikir ini adalah salah satu masalah yang tidak akan mereka perbaiki, mungkin karena fokus mereka sekarang adalah cdk?

lagian saya menyerah menunggu dan mencoba menyebarkan shoehorn untuk melakukan apa yang saya pikir harus dilakukan dan akhirnya melakukan apa yang menurut saya telah dilakukan kebanyakan orang - tulis skrip bash "upsert" saya sendiri menggunakan perintah buat dan perbarui stack cli. Panjang 100 baris tetapi setidaknya itu berhasil sekarang!

Hai, saya sangat membutuhkan ini. Saya benar-benar kecewa melihat situasi ini, di mana orang meminta untuk membuat ini selama bertahun-tahun tetapi CloudFormation belum menyediakannya. Ide macam apa yang mendorong tim ini bisa diterima.....

Hei, kami benar-benar minta maaf karena butuh waktu lama untuk menyelesaikan masalah ini.

Bisakah Anda melihat deskripsi PR dan beri tahu kami apa pendapat Anda tentang solusi tersebut.

Juga, sepertinya tidak ada cara mudah (setidaknya pada Windows Command Prompt CLI) untuk menyediakan parameter multi-baris.

Saya berharap dengan penerapan fitur file parameter ini, ini akan menyelamatkan masalah parameter multi-baris.

Terima kasih banyak untuk pekerjaan hebat teman-teman!

Hai, PR ini digabungkan dan dirilis di AWS CLI v.2.0.39.

@vz10 Terima kasih atas pembaruannya.

Btw, apakah Anda tahu apakah implementasi ini (melalui file parameter) memungkinkan parameter multi-baris? Ini adalah salah satu hal yang tidak dapat saya lalui di lingkungan batch Windows yang menjalankan AWS CLI.

Terima kasih atas bantuan Anda sebelumnya!

@ bs-thomas Saya tidak mengujinya dengan parameter multi-baris. Tapi saya percaya jika format JSON mendukungnya, itu akan berfungsi dengan baik.

Akan sangat bagus jika Anda dapat mencobanya dan memberi kami umpan balik.

Terima kasih.

@vz10 Multi-baris memang berfungsi. Namun, itu terlihat sangat jelek dengan \n

Sebenarnya, akan lebih keren jika CLI dapat mendukung format YAML untuk parameter-override CLI ;-)

@bs-thomas sepertinya permintaan fitur lain.

Buat saja dan itu akan menjadi setengah pertempuran untuk membuat parameter-override memahami YAML;)

@vz10 Tentu, saya akan segera melakukannya.

Btw, saya melihat sesuatu yang tidak menyenangkan tentang validator JSON. Itu tidak menerima nilai integer atau boolean. Jadi jika saya memilikinya, itu harus ditentukan sebagai string, kalau tidak saya akan mendapatkan respons ini:

image

Kemudian!

@bs-thomas ya, ini agak aneh tapi itu perilaku yang sama yang diharapkan cloudformation create-stack - semua nilai adalah string dan mem-parsingnya setelahnya dan tidak memiliki tipe parameter boolean

Apakah halaman ini membantu?
0 / 5 - 0 peringkat