Menggunakan SDK for Ruby pada Instance Vagrant - AWS OpsWorks

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

Menggunakan SDK for Ruby pada Instance Vagrant

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.

Topik ini menjelaskan bagaimana resep yang berjalan pada instance Vagrant dapat menggunakan AWS SDK for Rubyuntuk mengunduh file dari Amazon S3. Sebelum memulai, Anda harus terlebih dahulu memiliki satu set AWS kredensial—kunci akses dan kunci akses rahasia—yang memungkinkan resep mengakses Amazon S3.

penting

Kami sangat menyarankan agar Anda tidak menggunakan kredensil akun root untuk tujuan ini. Sebagai gantinya, buat pengguna dengan kebijakan yang sesuai dan berikan kredensyal tersebut ke resep.

Berhati-hatilah untuk tidak menempatkan kredensial—bahkan kredensil pengguna IAM—di lokasi yang dapat diakses publik, seperti dengan mengunggah file yang berisi kredensialnya ke repositori publik atau Bitbucket. GitHub Melakukan hal itu memperlihatkan kredensil Anda dan dapat membahayakan keamanan akun Anda.

Resep yang berjalan pada instans EC2Amazon EC2 dapat menggunakan pendekatan yang lebih baik, peran IAM, seperti yang dijelaskan dalam. Menggunakan SDK for Ruby AWS OpsWorks pada Instans Stacks Linux

Konten yang dikirimkan ke bucket Amazon S3 mungkin berisi konten pelanggan. Untuk informasi selengkapnya tentang menghapus data sensitif, lihat Bagaimana Cara Mengosongkan Bucket S3? atau Bagaimana Saya Menghapus Bucket S3? .

Jika Anda belum memiliki pengguna yang sesuai, Anda dapat membuatnya sebagai berikut. Untuk informasi lebih lanjut, lihat Apa itu IAM.

Awas

Pengguna IAM memiliki kredensyal jangka panjang, yang menghadirkan risiko keamanan. Untuk membantu mengurangi risiko ini, kami menyarankan agar Anda memberikan pengguna ini hanya izin yang mereka perlukan untuk melakukan tugas dan menghapus pengguna ini ketika mereka tidak lagi diperlukan.

Untuk membuat pengguna IAM
  1. Masuk ke AWS Management Console dan buka konsol IAM di https://console.aws.amazon.com/iam/.

  2. Di panel navigasi, pilih Pengguna dan, jika perlu, pilih Tambahkan pengguna untuk membuat pengguna administratif baru.

  3. Pada halaman Setel izin, pilih Lampirkan kebijakan secara langsung.

  4. Ketik S3 kotak pencarian Kebijakan izin untuk menampilkan kebijakan Amazon S3.

    Pilih ReadOnlyAccessAmazonS3. Jika mau, Anda dapat menentukan kebijakan yang memberikan izin yang lebih luas, seperti AmazonS3 FullAccess, tetapi praktik standarnya adalah hanya memberikan izin yang diperlukan. Dalam hal ini, resepnya hanya akan mengunduh file, jadi akses hanya-baca sudah cukup.

  5. Pilih Selanjutnya.

  6. Pilih Buat pengguna

  7. Selanjutnya buat kunci akses untuk pengguna Anda. Untuk informasi selengkapnya tentang cara membuat access key, lihat Mengelola access key untuk pengguna IAM di Panduan Pengguna IAM.

Anda selanjutnya harus menyediakan file yang akan diunduh. Contoh ini mengasumsikan bahwa Anda akan meletakkan file bernama myfile.txt dalam bucket S3 yang baru dibuat bernama. cookbook_bucket

Untuk menyediakan file untuk diunduh
  1. Buat file bernama myfile.txt dengan teks berikut dan simpan di lokasi yang nyaman di workstation Anda.

    This is the file that you just downloaded from Amazon S3.
  2. Di konsol Amazon S3, buat bucket bernama cookbook_bucket di wilayah Standar dan unggah myfile.txt ke bucket.

Atur buku masak sebagai berikut.

Untuk mengatur buku masak
  1. Buat direktori dalam opsworks_cookbooks bernama s3bucket dan navigasikan ke sana.

  2. Inisialisasi dan konfigurasikan Test Kitchen, seperti yang dijelaskan dalamContoh 1: Menginstal Paket.

  3. Ganti teks .kitchen.yml dengan yang berikut ini.

    --- driver: name: vagrant provisioner: name: chef_solo environments_path: ./environments platforms: - name: ubuntu-14.04 suites: - name: s3bucket provisioner: solo_rb: environment: test run_list: - recipe[s3bucket::default] attributes:
  4. Tambahkan dua direktori kes3bucket: recipes danenvironments.

  5. Buat file lingkungan bernama test.json dengan default_attributes bagian berikut, ganti access_key dan secret_key nilai dengan kunci yang sesuai untuk pengguna Anda. Simpan file ke environments folder buku masak.

    { "default_attributes" : { "cookbooks_101" : { "access_key": "AKIAIOSFODNN7EXAMPLE", "secret_key" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" } }, "chef_type" : "environment", "json_class" : "Chef::Environment" }

Anda memiliki berbagai cara untuk memberikan kredensyal ke resep yang berjalan pada sebuah instance. Pertimbangan utamanya adalah membatasi kemungkinan secara tidak sengaja mengekspos kunci dan membahayakan keamanan akun Anda. Untuk alasan itu, menggunakan nilai kunci eksplisit dalam kode Anda tidak disarankan. Contohnya malah menempatkan nilai-nilai kunci dalam objek node, yang memungkinkan resep untuk mereferensikannya dengan menggunakan sintaks node alih-alih mengekspos nilai literal. Anda harus memiliki hak akses root untuk mengakses objek node, yang membatasi kemungkinan bahwa kunci mungkin terbuka. Untuk informasi selengkapnya, lihat Praktik Terbaik untuk Mengelola Kunci Akses AWS.

catatan

Perhatikan bahwa contoh menggunakan atribut bersarang, dengan cookbooks_101 sebagai elemen pertama. Praktek ini membatasi kemungkinan tabrakan nama jika ada atribut lain access_key atau secret_key atribut dalam objek node.

Resep berikut diunduh myfile.text dari cookbook_bucket ember.

gem_package "aws-sdk ~> 3" do action :install end ruby_block "download-object" do block do require 'aws-sdk' s3 = Aws::S3::Client.new( :access_key_id => "#{node['cookbooks_101']['access_key']}", :secret_access_key => "#{node['cookbooks_101']['secret_key']}") myfile = s3.bucket['cookbook_bucket'].objects['myfile.txt'] Dir.chdir("/tmp") File.open("myfile.txt", "w") do |f| f.write(myfile.read) f.close end end action :run end

Bagian pertama dari resep menginstal SDK for Ruby, yang merupakan paket permata. Sumber daya gem_package menginstal permata yang akan digunakan oleh resep atau aplikasi lain.

catatan

Instance Anda biasanya memiliki dua instance Ruby, yang biasanya merupakan versi yang berbeda. Salah satunya adalah instance khusus yang digunakan oleh klien Chef. Yang lain digunakan oleh aplikasi dan resep yang berjalan pada instance. Penting untuk memahami perbedaan ini saat menginstal paket permata, karena ada dua sumber daya untuk menginstal permata, gem_package dan chef_gem. Jika aplikasi atau resep menggunakan paket permata, instal dengangem_package. chef_gemhanya untuk paket permata yang digunakan oleh klien Chef.

Sisa resep adalah sumber daya ruby_block, yang berisi kode Ruby yang mengunduh file. Anda mungkin berpikir bahwa karena resep adalah aplikasi Ruby, Anda dapat memasukkan kode ke dalam resep secara langsung. Namun, Chef run mengkompilasi semua kode itu sebelum mengeksekusi sumber daya apa pun. Jika Anda menempatkan kode contoh langsung dalam resep, Ruby akan mencoba untuk menyelesaikan require 'aws-sdk' pernyataan sebelum mengeksekusi sumber daya. gem_package Karena SDK for Ruby belum diinstal, kompilasi akan gagal.

Kode dalam ruby_block sumber daya tidak dikompilasi sampai sumber daya tersebut dijalankan. Dalam contoh ini, ruby_block sumber daya dieksekusi setelah gem_package sumber daya selesai menginstal SDK for Ruby, sehingga kode akan berjalan dengan sukses.

Kode dalam ruby_block karya sebagai berikut.

  1. Membuat Aws::S3objek baru, yang menyediakan antarmuka layanan.

    Akses dan kunci rahasia ditentukan dengan mereferensikan nilai-nilai yang disimpan dalam objek node.

  2. Memanggil bucket.objects asosiasi S3 objek, yang mengembalikan Aws::S3::Objectobjek bernama myfile yang mewakilimyfile.txt.

  3. Menggunakan Dir.chdir untuk mengatur direktori kerja ke/tmp.

  4. Membuka file bernamamyfile.txt, menulis isi myfile ke file, dan menutup file.

Untuk menjalankan resep
  1. Buat file bernama default.rb dengan resep contoh dan simpan ke recipes direktori.

  2. Jalankan kitchen converge.

  3. Jalankan kitchen login untuk masuk ke instance, lalu jalankanls /tmp. Anda akan melihatmyfile.txt, bersama dengan beberapa file dan direktori Test Kitchen.

    vagrant@s3bucket-ubuntu-1204:~$ ls /tmp install.sh kitchen myfile.txt stderr

    Anda juga dapat menjalankan cat /tmp/myfile.txt untuk memverifikasi bahwa konten file sudah benar.

Setelah selesai, jalankan kitchen destroy untuk menghentikan instance.