Menerapkan Resep untuk Tumpukan Chef 11.10 - AWS OpsWorks

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menerapkan Resep untuk Tumpukan Chef 11.10

penting

AWS OpsWorks Stacks Layanan ini mencapai akhir masa pakai pada 26 Mei 2024 dan telah dinonaktifkan untuk pelanggan baru dan yang sudah ada. Kami sangat menyarankan pelanggan untuk memindahkan beban kerja mereka ke solusi lain sesegera mungkin. Jika Anda memiliki pertanyaan tentang migrasi, hubungi AWS Support Tim di AWS re:Post atau melalui AWS Dukungan Premium.

Tumpukan Chef 11.10 memberikan keunggulan berikut dibandingkan tumpukan Chef 11.4:

  • Chef menjalankan menggunakan Ruby 2.0.0, sehingga resep Anda dapat menggunakan sintaks Ruby baru.

  • Resep dapat menggunakan pencarian Chef dan tas data.

    Tumpukan Chef 11.10 dapat menggunakan banyak buku masak komunitas tanpa modifikasi.

  • Anda dapat menggunakan Berkshelf untuk mengelola buku masak.

    Berkshelf menyediakan cara yang jauh lebih fleksibel untuk mengelola buku masak kustom Anda dan menggunakan buku masak komunitas dalam tumpukan.

  • Buku masak harus mendeklarasikan dependensi di. metadata.rb

    Jika buku masak Anda bergantung pada buku masak lain, Anda harus memasukkan ketergantungan itu dalam file buku masak Anda. metadata.rb Misalnya, jika buku masak Anda menyertakan resep dengan pernyataan sepertiinclude_recipe anothercookbook::somerecipe, metadata.rb file buku masak Anda harus menyertakan baris berikut:. depends "anothercookbook"

  • AWS OpsWorks Stacks menginstal klien MySQL pada instance stack hanya jika tumpukan menyertakan lapisan MySQL.

  • AWS OpsWorks Stacks menginstal klien Ganglia pada instance tumpukan hanya jika tumpukan menyertakan lapisan Ganglia.

  • Jika penerapan berjalan bundle install dan penginstalan gagal, penerapan juga gagal.

penting

Jangan gunakan kembali nama buku masak bawaan untuk buku masak khusus atau komunitas. Buku masak khusus yang memiliki nama yang sama dengan buku masak bawaan mungkin gagal. Untuk daftar lengkap buku masak bawaan yang tersedia dengan tumpukan Chef 11.10, 11.4, dan 0.9, lihat repositori opsworks-cookbooks di. GitHub

Buku masak dengan karakter non-ASCII yang berhasil berjalan di tumpukan Chef 0.9 dan 11.4 mungkin gagal pada tumpukan Chef 11.10. Alasannya adalah bahwa tumpukan Chef 11.10 menggunakan Ruby 2.0.0 untuk menjalankan Chef, yang jauh lebih ketat tentang pengkodean daripada Ruby 1.8.7. Untuk memastikan bahwa buku masak tersebut berjalan dengan sukses di tumpukan Chef 11.10, setiap file yang menggunakan karakter non-ASCII harus memiliki komentar di bagian atas yang memberikan petunjuk tentang pengkodean. Misalnya, untuk pengkodean UTF-8, komentarnya adalah. # encoding: UTF-8 Untuk informasi lebih lanjut tentang pengkodean Ruby 2.0.0, lihat Pengkodean.

Instalasi dan Prioritas Buku Masak

Prosedur untuk menginstal buku masak AWS OpsWorks Stacks bekerja agak berbeda untuk tumpukan Chef 11.10 daripada versi Chef sebelumnya. Untuk tumpukan Chef 11.10, setelah AWS OpsWorks Stacks menginstal buku masak bawaan, kustom, dan Berkshelf, ia menggabungkannya ke direktori umum dalam urutan berikut:

  1. Buku masak bawaan.

  2. Buku masak Berkshelf, jika ada.

  3. Buku masak khusus, jika ada.

Ketika AWS OpsWorks Stacks melakukan penggabungan ini, ia menyalin seluruh konten direktori, termasuk resep. Jika ada duplikat, aturan berikut berlaku:

  • Isi buku masak Berkshelf lebih diutamakan daripada buku masak bawaan.

  • Isi buku masak khusus lebih diutamakan daripada buku masak Berkshelf.

Untuk mengilustrasikan bagaimana proses ini bekerja, pertimbangkan skenario berikut, di mana ketiga direktori buku masak menyertakan buku masak bernama: mycookbook

  • Buku masak bawaan - mycookbook termasuk file atribut bernamasomeattributes.rb, file template bernamasometemplate.erb, dan resep bernamasomerecipe.rb.

  • Buku masak Berkshelf — mycookbook termasuk sometemplate.erb dan. somerecipe.rb

  • Buku masak khusus — mycookbook termasuksomerecipe.rb.

Buku masak gabungan berisi yang berikut:

  • someattributes.rbdari buku masak bawaan.

  • sometemplate.erbdari buku masak Berkshelf.

  • somerecipe.rbdari buku masak khusus.

penting

Anda tidak boleh menyesuaikan tumpukan Chef 11.10 Anda dengan menyalin seluruh buku masak bawaan ke repositori Anda dan kemudian memodifikasi bagian buku masak. Melakukannya mengesampingkan seluruh buku masak bawaan, termasuk resep. Jika AWS OpsWorks Stacks memperbarui buku masak itu, tumpukan Anda tidak akan mendapatkan manfaat dari pembaruan tersebut kecuali Anda memperbarui salinan pribadi Anda secara manual. Untuk informasi selengkapnya tentang cara menyesuaikan tumpukan, lihatMenyesuaikan Tumpukan AWS OpsWorks.

Anda dapat menggunakan searchMetode Chef dalam resep Anda untuk meminta data tumpukan. Anda menggunakan sintaks yang sama seperti yang Anda lakukan untuk server Chef, tetapi AWS OpsWorks Stacks memperoleh data dari objek node lokal alih-alih menanyakan server Chef. Data ini meliputi:

Konfigurasi tumpukan dan atribut penyebaran berisi sebagian besar informasi yang biasanya diperoleh resep melalui pencarian, termasuk data seperti nama host dan alamat IP untuk setiap instance online di tumpukan. AWS OpsWorks Stacks memperbarui atribut ini untuk setiap peristiwa siklus hidup, yang memastikan bahwa atribut tersebut secara akurat mencerminkan status tumpukan saat ini. Ini berarti Anda sering dapat menggunakan resep komunitas yang bergantung pada pencarian di tumpukan Anda tanpa modifikasi. Metode pencarian masih mengembalikan data yang sesuai; itu hanya berasal dari konfigurasi tumpukan dan atribut penerapan alih-alih server.

Keterbatasan utama pencarian AWS OpsWorks Stacks adalah hanya menangani data di objek node lokal, konfigurasi tumpukan dan atribut penerapan pada khususnya. Oleh karena itu, jenis data berikut mungkin tidak tersedia melalui penelusuran:

  • Atribut yang didefinisikan secara lokal pada instance lain.

    Jika resep mendefinisikan atribut secara lokal, informasi tersebut tidak dilaporkan kembali ke layanan AWS OpsWorks Stacks, sehingga Anda tidak dapat mengakses data tersebut dari instance lain dengan menggunakan penelusuran.

  • deployAtribut khusus.

    Anda dapat menentukan JSON kustom saat menerapkan aplikasi dan atribut terkait diinstal pada instance tumpukan untuk penerapan tersebut. Namun, jika Anda menerapkan hanya ke instance yang dipilih, atribut diinstal hanya pada instance tersebut. Kueri untuk atribut JSON kustom tersebut akan gagal pada semua instance lainnya. Selain itu, atribut kustom disertakan dalam konfigurasi tumpukan dan penerapan JSON hanya untuk penerapan tertentu. Mereka hanya dapat diakses sampai peristiwa siklus hidup berikutnya menginstal satu set konfigurasi tumpukan dan atribut penerapan baru. Perhatikan bahwa jika Anda menentukan JSON kustom untuk tumpukan, atribut diinstal pada setiap instance untuk setiap peristiwa siklus hidup dan selalu dapat diakses melalui pencarian.

  • Data Ohai dari contoh lain.

    Alat Ohai Chef memperoleh berbagai data sistem pada sebuah instance dan menambahkannya ke objek node. Data ini disimpan secara lokal dan tidak dilaporkan kembali ke layanan AWS OpsWorks Stacks, sehingga pencarian tidak dapat mengakses data Ohai dari instance lain. Namun, beberapa data ini mungkin disertakan dalam konfigurasi tumpukan dan atribut penerapan.

  • Contoh offline.

    Konfigurasi tumpukan dan atribut penerapan berisi data hanya untuk instance online.

Kutipan resep berikut menunjukkan cara mendapatkan alamat IP pribadi dari contoh lapisan PHP dengan menggunakan pencarian.

appserver = search(:node, "role:php-app").first Chef::Log.info("The private IP is '#{appserver[:private_ip]}'")
catatan

Ketika AWS OpsWorks Stacks menambahkan konfigurasi tumpukan dan atribut penyebaran ke objek node, itu benar-benar menciptakan dua set atribut lapisan, masing-masing dengan data yang sama. Satu set ada di layers namespace, yang merupakan cara AWS OpsWorks Stacks menyimpan data. Set lainnya ada di role namespace, yang merupakan cara server Chef menyimpan data yang setara. Tujuan dari role namespace adalah untuk memungkinkan kode pencarian yang diimplementasikan untuk server Chef berjalan pada instance AWS OpsWorks Stacks. Jika Anda menulis kode khusus untuk AWS OpsWorks Stacks, Anda dapat menggunakan salah satu layers:php-app atau role:php-app dalam contoh sebelumnya dan search akan mengembalikan hasil yang sama.

Menggunakan Tas Data

Anda dapat menggunakan data_bag_itemmetode Chef dalam resep Anda untuk meminta informasi dalam tas data. Anda menggunakan sintaks yang sama seperti yang Anda lakukan untuk server Chef, tetapi AWS OpsWorks Stacks memperoleh data dari konfigurasi tumpukan instans dan atribut penerapan. Namun, AWS OpsWorks Stacks saat ini tidak mendukung lingkungan Chef, jadi node.chef_environment selalu kembali_default.

Anda membuat tas data dengan menggunakan JSON kustom untuk menambahkan satu atau beberapa atribut ke [:opsworks][:data_bags] atribut. Contoh berikut menunjukkan format umum untuk membuat tas data di JSON kustom.

catatan

Anda tidak dapat membuat tas data dengan menambahkannya ke repositori buku masak Anda. Anda harus menggunakan JSON khusus.

{ "opsworks": { "data_bags": { "bag_name1": { "item_name1: { "key1" : “value1”, "key2" : “value2”, ... } }, "bag_name2": { "item_name1": { "key1" : “value1”, "key2" : “value2”, ... } }, ... } } }

Anda biasanya menentukan JSON kustom untuk tumpukan, yang menginstal atribut kustom pada setiap instance untuk setiap peristiwa siklus hidup berikutnya. Anda juga dapat menentukan JSON kustom saat menerapkan aplikasi, tetapi atribut tersebut hanya diinstal untuk penerapan tersebut, dan mungkin diinstal hanya untuk satu set instance yang dipilih. Untuk informasi selengkapnya, lihat Menerapkan Aplikasi.

Contoh JSON kustom berikut membuat tas data bernamamyapp. Ini memiliki satu item,mysql, dengan dua pasangan kunci-nilai.

{ "opsworks": { "data_bags": { "myapp": { "mysql": { "username": "default-user", "password": "default-pass" } } } } }

Untuk menggunakan data dalam resep Anda, Anda dapat memanggil data_bag_item dan meneruskannya tas data dan nama nilai, seperti yang ditunjukkan pada kutipan berikut.

mything = data_bag_item("myapp", "mysql") Chef::Log.info("The username is '#{mything['username']}' ")

Untuk memodifikasi data dalam kantong data, cukup ubah JSON kustom, dan itu akan diinstal pada instance tumpukan untuk acara siklus hidup berikutnya.

Menggunakan Berkshelf

Dengan tumpukan Chef 0.9 dan Chef 11.4, Anda hanya dapat menginstal satu repositori buku masak khusus. Dengan tumpukan Chef 11.10, Anda dapat menggunakan Berkshelf untuk mengelola buku masak dan dependensinya, yang memungkinkan Anda menginstal buku masak dari beberapa repositori. (Untuk informasi selengkapnya, lihat Ketergantungan Buku Masak Kemasan Secara Lokal.) Secara khusus, dengan Berkshelf, Anda dapat menginstal buku masak komunitas yang AWS OpsWorks kompatibel dengan Stacks langsung dari repositori mereka alih-alih harus menyalinnya ke repositori buku masak khusus Anda. Versi Berkshelf yang didukung tergantung pada sistem operasi. Untuk informasi selengkapnya, lihat AWS OpsWorks Stacks sistem operasi.

Untuk menggunakan Berkshelf, Anda harus secara eksplisit mengaktifkannya, seperti yang dijelaskan dalam. Memasang Buku Masak Kustom Kemudian, sertakan Berksfile file di direktori root repositori buku masak Anda yang menentukan buku masak mana yang akan diinstal.

Untuk menentukan sumber buku masak eksternal di Berksfile, sertakan atribut sumber di bagian atas file yang menentukan URL repositori default. Berkshelf akan mencari buku masak di URL sumber kecuali Anda secara eksplisit menentukan repositori. Kemudian sertakan baris untuk setiap buku masak yang ingin Anda instal dalam format berikut:

cookbook 'cookbook_name', ['>= cookbook_version'], [cookbook_options]

Bidang berikut cookbook menentukan buku masak tertentu.

  • cookbook_name - (Wajib) Menentukan nama buku masak ini.

    Jika Anda tidak menyertakan bidang lain, Berkshelf menginstal buku masak dari URL sumber yang ditentukan.

  • cookbook_version - (Opsional) Menentukan versi buku masak atau versi.

    Anda dapat menggunakan awalan seperti = atau >= untuk menentukan versi tertentu atau rentang versi yang dapat diterima. Jika Anda tidak menentukan versi, Berkshelf menginstal yang terbaru.

  • cookbook_options — (Opsional) Bidang terakhir adalah hash yang berisi satu atau lebih pasangan kunci-nilai yang menentukan opsi seperti lokasi repositori.

    Misalnya, Anda dapat menyertakan git kunci untuk menunjuk repositori Git tertentu dan tag kunci untuk menunjuk cabang repositori tertentu. Menentukan cabang repositori biasanya merupakan cara terbaik untuk memastikan bahwa Anda menginstal buku masak pilihan Anda.

penting

Jangan mendeklarasikan buku masak dengan menyertakan metadata baris di Berksfile Anda dan mendeklarasikan dependensi buku masak di. metadata.rb Agar ini berfungsi dengan benar, kedua file harus berada di direktori yang sama. Dengan AWS OpsWorks Stacks, Berksfile harus berada di direktori root repositori, tetapi metadata.rb file harus berada di direktori buku masak masing-masing. Anda seharusnya secara eksplisit mendeklarasikan buku masak eksternal di Berksfile.

Berikut ini adalah contoh Berksfile yang menunjukkan cara berbeda untuk menentukan buku masak Untuk informasi selengkapnya tentang cara membuat Berksfile, lihat Berkshelf.

source "https://supermarket.chef.io" cookbook 'apt' cookbook 'bluepill', '>= 2.3.1' cookbook 'ark', git: 'git://github.com/opscode-cookbooks/ark.git' cookbook 'build-essential', '>= 1.4.2', git: 'git://github.com/opscode-cookbooks/build-essential.git', tag: 'v1.4.2'

File ini menginstal buku masak berikut:

  • Versi terbaru apt dari repositori buku masak komunitas.

  • Versi terbaru bluepill dari buku masak komunitas, asalkan versi 2.3.1 atau yang lebih baru.

  • Versi terbaru ark dari dari repositori tertentu.

    URL untuk contoh ini adalah untuk repositori buku masak komunitas publik GitHub, tetapi Anda dapat menginstal buku masak dari repositori lain, termasuk repositori pribadi. Untuk informasi lebih lanjut, lihat Berkshelf.

  • build-essentialBuku masak dari cabang v1.4.2 dari repositori yang ditentukan.

Sebuah repositori buku masak kustom dapat berisi buku masak kustom selain Berksfile. Dalam hal ini, AWS OpsWorks Stacks menginstal kedua set buku masak, yang berarti bahwa sebuah instance dapat memiliki sebanyak tiga repositori buku masak.

  • Buku masak bawaan dipasang ke/opt/aws/opsworks/current/cookbooks.

  • Jika repositori buku masak kustom Anda berisi buku masak, mereka diinstal ke. /opt/aws/opsworks/current/site-cookbooks

  • Jika Anda telah mengaktifkan Berkshelf dan repositori buku masak kustom Anda berisi Berksfile, buku masak yang ditentukan diinstal ke. /opt/aws/opsworks/current/berkshelf-cookbooks

Buku masak bawaan dan buku masak khusus Anda diinstal pada setiap instance selama penyiapan dan tidak diperbarui selanjutnya kecuali Anda menjalankan perintah tumpukan Perbarui Buku Masak Kustom secara manual. AWS OpsWorks Tumpukan berjalan berks install untuk setiap Chef run, sehingga buku masak Berkshelf Anda diperbarui untuk setiap acara siklus hidup, sesuai dengan aturan berikut:

  • Jika Anda memiliki versi buku masak baru di repositori, operasi ini memperbarui buku masak dari repositori.

  • Jika tidak, operasi ini memperbarui buku masak Berkshelf dari cache lokal.

catatan

Operasi menimpa buku masak Berkshelf, jadi jika Anda telah memodifikasi salinan lokal dari buku masak apa pun, perubahan akan ditimpa. Untuk informasi lebih lanjut, lihat Berkshelf

Anda juga dapat memperbarui buku masak Berkshelf Anda dengan menjalankan perintah tumpukan Update Custom Cookbooks, yang memperbarui buku masak Berkshelf dan buku masak khusus Anda.