

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Stacks Linux 執行個體上使用適用於 Ruby OpsWorks 的 SDK
<a name="cookbooks-101-opsworks-s3-opsworks"></a>

**重要**  
 AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止，並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問，請透過 [AWS re：Post](https://repost.aws/) 或透過 [AWS Premium Support](https://aws.amazon.com/support) 聯絡 AWS 支援 團隊。

本主題說明如何在 Stacks Linux 執行個體上使用適用於 Ruby OpsWorks 的 SDK，從 Amazon S3 儲存貯體下載檔案。 OpsWorks Stacks 會自動在每個 Linux 執行個體上安裝適用於 Ruby 的 SDK。不過，當您建立服務的用戶端物件時，必須提供一組適合的 AWS 登入資料 `AWS::S3.new` 或其他服務的對等項目。

傳遞至 Amazon S3 儲存貯體的內容可能包含客戶內容。如需移除敏感資料的詳細資訊，請參閱[如何清空 S3 儲存貯體？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html)或[如何刪除 S3 儲存貯體？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)。

 [在 Vagrant 執行個體上使用適用於 Ruby 的 SDK](cookbooks-101-opsworks-s3-vagrant.md)顯示如何降低公開您登入資料的風險，方法是將登入資料存放在節點物件中，並參考配方程式碼中的屬性。當您在 Amazon EC2 執行個體上執行配方時，您有更好的選項：[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

IAM 角色的運作方式與 IAM 使用者非常類似。它的已連接政策授予使用各種 AWS 服務的許可。不過，您可以將角色指派給 Amazon EC2 執行個體，而不是個人。該執行個體上執行的應用程式接著可以取得已連接政策所授予的許可。使用角色，登入資料絕不會出現在您的程式碼中，即使是間接也是一樣。本主題說明如何使用 IAM 角色在 Amazon EC2 執行個體[在 Vagrant 執行個體上使用適用於 Ruby 的 SDK](cookbooks-101-opsworks-s3-vagrant.md)上從 執行配方。

您可以搭配執行此配方與使用 kitchen-ec2 驅動程式的 Test Kitchen，如[範例 9：使用 Amazon EC2 執行個體](cookbooks-101-basics-ec2.md)中所述。不過，在 Amazon EC2 執行個體上安裝適用於 Ruby 的 SDK 有點複雜，而不是您需要為 OpsWorks Stacks 關注的事項。所有 OpsWorks Stacks Linux 執行個體預設都會安裝適用於 Ruby 的 SDK。為了簡化，範例因此使用 OpsWorks Stacks 執行個體。

第一步是設定 IAM 角色。此範例採用最簡單的方法，即使用 OpsWorks Stacks 在您建立第一個堆疊時建立的 Amazon EC2 角色。它命名為 `aws-opsworks-ec2-role`。不過， OpsWorks Stacks 不會將政策連接至該角色，因此預設不會授予任何許可。

您必須將`AmazonS3ReadOnlyAccess`政策連接至`aws-opsworks-ec2-role`角色，才能授予適當的許可。如需如何將政策連接至角色的詳細資訊，請參閱《[IAM 使用者指南》中的新增 IAM 身分許可 （主控台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)。 **

您可以在建立或更新堆疊時指定角色。設定具有自訂 layer 的堆疊，如[在 Linux 執行個體上執行配方](cookbooks-101-opsworks-opsworks-instance.md)中所述，並有一項新增。在**新增堆疊**頁面上，確認**預設 IAM 執行個體描述**檔設定為 **aws-opsworks-ec2-role**。 OpsWorks Stacks 接著會將該角色指派給堆疊的所有執行個體。

設定技術指南的程序與[在 Linux 執行個體上執行配方](cookbooks-101-opsworks-opsworks-instance.md)所使用的程序類似。以下是簡短摘要；您應該參閱該範例以了解詳細資訊。

**設定技術指南**

1. 建立並導覽至名為 `s3bucket_ops` 的目錄。

1. 使用下列內容建立 `metadata.rb` 檔案，並將它儲存至 `s3bucket_ops`。

   ```
   name "s3bucket_ops"
   version "0.1.0"
   ```

1. 在 `recipes` 內建立 `s3bucket_ops` 目錄。

1. 使用下列配方建立 `default.rb` 檔案，並將它儲存至 `recipes` 目錄。

   ```
   Chef::Log.info("******Downloading a file from Amazon S3.******")
   
   ruby_block "download-object" do
     block do
       require 'aws-sdk'
   
       s3 = AWS::S3.new
   
       myfile = s3.buckets['cookbook_bucket'].objects['myfile.txt']
       Dir.chdir("/tmp")
       File.open("myfile.txt", "w") do |f|
         f.syswrite(myfile.read)
         f.close
       end
     end
     action :run
   end
   ```

1. 建立 的`.zip`封存，`s3bucket_ops`並將封存上傳至 Amazon S3 儲存貯體。為求簡化，請[將封存設為公有](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html)，然後記錄封存的 URL 以供日後使用。您也可以將技術指南存放在私有 Amazon S3 封存中，或其他幾種儲存庫類型。如需詳細資訊，請參閱[技術指南儲存庫](workingcookbook-installingcustom-repo.md)。

此配方與先前範例所使用的配方類似，但例外狀況如下。
+ 由於 OpsWorks Stacks 已安裝適用於 Ruby 的 SDK，因此已刪除`chef_gem`資源。
+ 配方不會將任何登入資料傳遞給 `AWS::S3.new`。

  會根據執行個體的角色，將登入資料自動指派給應用程式。
+ 配方使用 `Chef::Log.info` 將訊息新增至 Chef 日誌。

針對此範例建立堆疊，如下所示。您也可以使用現有 Windows 堆疊。只需要更新技術指南，如後面所述。

**建立 堆疊**

1. 開啟 [OpsWorks Stacks 主控台](https://console.aws.amazon.com/opsworks/)，然後按一下 **Add Stack (新增堆疊)**。

1. 指定下列設定，並接受其他設定的預設值，然後按一下 **Add Stack (新增堆疊)**。
   + **名稱** – RubySDK
   + **預設 SSH 金鑰** – Amazon EC2 金鑰對

   如果您需要建立 Amazon EC2 金鑰對，請參閱 [Amazon EC2 金鑰對](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。請注意，金鑰對必須屬於與執行個體相同的 AWS 區域。此範例使用預設的美國西部 （奧勒岡） 區域。

1. 按一下 **Add a layer (新增 layer)**，並[新增自訂 layer](workinglayers-custom.md) 至具有下列設定的堆疊。
   + **名稱** – S3Download
   + **簡短名稱** – s3download

   任何 layer 類型都會實際作用於 Linux 堆疊，但此範例不需要其他 layer 類型所安裝的任何套件，因此自訂 layer 是最簡單的方法。

1. [新增全年無休執行個體](workinginstances-add.md) (具有預設設定) 至 layer，以及[啟動它](workinginstances-starting.md)。

您現在可以安裝並執行配方

**執行配方**

1. [編輯堆疊以啟用自訂技術指南](workingcookbook-installingcustom-enable.md)，然後指定下列設定。
   + **儲存庫類型** – **Http Archive**
   + **儲存庫 URL** – 您先前記錄的技術指南的封存 URL。

   針對其他設定使用預設值，然後按一下 **Save (儲存)** 以更新堆疊組態。

1. [執行更新自訂技術指南堆疊命令](workingstacks-commands.md)，以在堆疊執行個體上安裝最新版的自訂技術指南。如果存在舊版的技術指南，則此命令會予以覆寫。

1. 透過使用配方執行**執行執行配方**堆疊命令來執行設定為 **的配方****s3bucket\$1ops::default**。此命令會啟動 Chef 執行，內含包含 `s3bucket_ops::default` 的回合清單。
**注意**  
您通常會讓 OpsWorks Stacks 透過將配方指派給適當的生命週期事件來[自動執行配方](workingcookbook-assigningcustom.md)。您可以手動觸發事件來執行這類配方。您可以使用堆疊命令來觸發安裝和設定事件，以及使用[部署命令](workingapps-deploying.md)來觸發部署和解除部署事件。

成功執行配方之後，您就可以驗證配方。

**驗證 s3bucket\$1ops**

1. 第一步是檢查 Chef 日誌。您的堆疊應該有一個名為 opstest1 的執行個體。在**執行個體**頁面上，按一下執行個體**日誌**欄中**的顯示**以顯示 Chef 日誌。向下捲動，並在接近底端發現您的日誌訊息。

   ```
   ...
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache.
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache.
   [2014-07-31T17:01:46+00:00] INFO: ******Downloading a file from Amazon S3.******
   [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3)
   ...
   ```

1. [使用 SSH 登入執行個體](workinginstances-ssh.md)，並列出 `/tmp` 的內容。