

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
<a name="cookbooks-101-opsworks-s3-vagrant"></a>

**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 Dukungan Tim di [AWS re:Post](https://repost.aws/) atau melalui [AWS Dukungan](https://aws.amazon.com/support) Premium.

Topik ini menjelaskan bagaimana resep yang berjalan pada instance Vagrant dapat menggunakan [AWS SDK untuk Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/)untuk 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 EC2 instance EC2 Amazon dapat menggunakan pendekatan yang lebih baik, peran IAM, seperti yang dijelaskan dalam[Menggunakan SDK for Ruby OpsWorks pada Instans Stacks Linux](cookbooks-101-opsworks-s3-opsworks.md).  
Konten yang dikirimkan ke bucket Amazon S3 mungkin berisi konten pelanggan. Untuk informasi selengkapnya tentang menghapus data sensitif, lihat [Bagaimana Cara Mengosongkan Bucket S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) atau [Bagaimana Saya Menghapus Bucket S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) .

Jika Anda belum memiliki pengguna yang sesuai, Anda dapat membuatnya sebagai berikut. Untuk informasi lebih lanjut, lihat [Apa itu IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/Introduction.html).

**Awas**  
Pengguna IAM 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 bahwa Anda menghapus pengguna ini ketika mereka tidak lagi diperlukan.

**Untuk membuat pengguna IAM**

1. Masuk ke Konsol Manajemen AWS dan buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

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

1. Pada halaman **Setel izin**, pilih **Lampirkan kebijakan secara langsung**.

1. 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.

1. Pilih **Berikutnya**.

1. Pilih **Buat pengguna**

1. Selanjutnya buat kunci akses untuk pengguna Anda. Untuk informasi selengkapnya tentang cara membuat access key, lihat [Mengelola access key untuk pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) 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.
   ```

1. Di [konsol Amazon S3](https://console.aws.amazon.com/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.

1. Inisialisasi dan konfigurasikan Test Kitchen, seperti yang dijelaskan dalam[Contoh 1: Menginstal Paket](cookbooks-101-basics-packages.md).

1. 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:
   ```

1. Tambahkan dua direktori ke`s3bucket`: `recipes` dan`environments`.

1. 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](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html).

**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\$1package](https://docs.chef.io/chef/resources.html#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\$1package dan chef\$1gem](https://docs.chef.io/chef/resources.html#gem-package).](https://docs.chef.io/chef/resources.html#chef-gem) Jika aplikasi atau resep menggunakan paket permata, instal dengan`gem_package`. `chef_gem`hanya untuk paket permata yang digunakan oleh klien Chef.

Sisa resep adalah sumber daya [ruby\$1block](https://docs.chef.io/chef/resources.html#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 [https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3.html)objek baru, yang menyediakan antarmuka layanan.

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

1. Memanggil `bucket.objects` asosiasi `S3` objek, yang mengembalikan [https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html)objek bernama `myfile` yang mewakili`myfile.txt`.

1. Menggunakan `Dir.chdir` untuk mengatur direktori kerja ke`/tmp`.

1. Membuka file bernama`myfile.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.

1. Jalankan `kitchen converge`.

1. Jalankan `kitchen login` untuk masuk ke instance, lalu jalankan`ls /tmp`. Anda akan melihat`myfile.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.