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
Bagian AWS OpsWorks Stacks layanan 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: posting
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 kredensi akun root untuk tujuan ini. Sebagai gantinya, buat pengguna dengan kebijakan yang sesuai dan berikan kredensialnya ke resep tersebut.
Berhati-hatilah untuk tidak menempatkan kredensial—bahkan IAM kredensial—di lokasi yang dapat diakses publik, seperti dengan mengunggah file yang berisi kredensialnya ke repositori publik atau Bitbucket. GitHub Melakukan hal itu memperlihatkan kredensi Anda dan dapat membahayakan keamanan akun Anda.
Resep yang berjalan pada sebuah EC2Amazon EC2 instance dapat menggunakan pendekatan yang lebih baik, IAM peran, seperti yang dijelaskan dalamMenggunakan SDK untuk Ruby pada AWS OpsWorks Tumpukan Instans 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
IAMpengguna memiliki kredensi 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 IAM pengguna
Masuk ke AWS Management Console dan buka IAM konsol di https://console.aws.amazon.com/iam/
. -
Di panel navigasi, pilih Pengguna dan, jika perlu, pilih Tambahkan pengguna untuk membuat pengguna administratif baru.
-
Pada halaman Setel izin, pilih Lampirkan kebijakan secara langsung.
-
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.
-
Pilih Berikutnya.
-
Pilih Buat pengguna
-
Selanjutnya buat kunci akses untuk pengguna Anda. Untuk informasi selengkapnya tentang membuat kunci akses, lihat Mengelola kunci akses untuk IAM pengguna di Panduan IAM Pengguna.
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
-
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.
-
Di konsol Amazon S3
, buat bucket bernama cookbook_bucket
di wilayah Standar dan unggahmyfile.txt
ke bucket.
Atur buku masak sebagai berikut.
Untuk mengatur buku masak
-
Buat direktori dalam
opsworks_cookbooks
bernamas3bucket
dan navigasikan ke sana. -
Inisialisasi dan konfigurasikan Test Kitchen, seperti yang dijelaskan dalamContoh 1: Menginstal Paket.
-
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:
-
Tambahkan dua direktori ke
s3bucket
:recipes
danenvironments
. -
Buat file lingkungan bernama
test.json
dengandefault_attributes
bagian berikut, gantiaccess_key
dansecret_key
nilai dengan kunci yang sesuai untuk pengguna Anda. Simpan file keenvironments
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 AWS Akses.
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 untuk Ruby, yang merupakan paket permata. Sumber daya gem_package
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_gemgem_package
. chef_gem
hanya untuk paket permata yang digunakan oleh klien Chef.
Sisa resep adalah sumber daya ruby_blockrequire 'aws-sdk'
pernyataan sebelum mengeksekusi sumber daya. gem_package
Karena SDK untuk 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 untuk Ruby, sehingga kode akan berjalan dengan sukses.
Kode dalam ruby_block
karya sebagai berikut.
-
Membuat
Aws::S3
objek baru, yang menyediakan antarmuka layanan.Akses dan kunci rahasia ditentukan dengan mereferensikan nilai-nilai yang disimpan dalam objek node.
-
Memanggil
bucket.objects
asosiasiS3
objek, yang mengembalikanAws::S3::Object
objek bernamamyfile
yang mewakilimyfile.txt
. -
Menggunakan
Dir.chdir
untuk mengatur direktori kerja ke/tmp
. -
Membuka file bernama
myfile.txt
, menulis isimyfile
ke file, dan menutup file.
Untuk menjalankan resep
-
Buat file bernama
default.rb
dengan resep contoh dan simpan kerecipes
direktori. -
Jalankan
kitchen converge
. -
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.