在 Stacks Linux 執行個體上使用適用於 Ruby OpsWorks 的 開發套件 - AWS OpsWorks

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

在 Stacks Linux 執行個體上使用適用於 Ruby OpsWorks 的 開發套件

重要

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

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

傳遞至 Amazon S3 儲存貯體的內容可能包含客戶內容。如需移除敏感資料的詳細資訊,請參閱如何清空 S3 儲存貯體?如何刪除 S3 儲存貯體?

在 Vagrant 執行個體上使用適用於 Ruby 的 SDK顯示如何降低公開您登入資料的風險,方法是將登入資料存放在節點物件中,並參考配方程式碼中的屬性。當您在 Amazon EC2 執行個體上執行配方時,您有更好的選項:IAM 角色

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

您可以搭配執行此配方與使用 kitchen-ec2 驅動程式的 Test Kitchen,如範例 9:使用 Amazon EC2 執行個體中所述。不過,在 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 身分許可 (主控台)

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

設定技術指南的程序與在 Linux 執行個體上執行配方所使用的程序類似。以下是簡短摘要;您應該參閱該範例以了解詳細資訊。

設定技術指南
  1. 建立並導覽至名為 s3bucket_ops 的目錄。

  2. 使用下列內容建立 metadata.rb 檔案,並將它儲存至 s3bucket_ops

    name "s3bucket_ops" version "0.1.0"
  3. recipes 內建立 s3bucket_ops 目錄。

  4. 使用下列配方建立 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
  5. 建立 的.zip封存,s3bucket_ops並將封存上傳到 Amazon S3 儲存貯體。為求簡化,請將封存設為公有,然後記錄封存的 URL 以供日後使用。您也可以將技術指南存放在私有 Amazon S3 封存中,或其他幾種儲存庫類型。如需詳細資訊,請參閱技術指南儲存庫

此配方與先前範例所使用的配方類似,但例外狀況如下。

  • 由於 OpsWorks Stacks 已安裝適用於 Ruby 的 SDK,因此已刪除chef_gem資源。

  • 配方不會將任何登入資料傳遞給 AWS::S3.new

    會根據執行個體的角色,將登入資料自動指派給應用程式。

  • 配方使用 Chef::Log.info 將訊息新增至 Chef 日誌。

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

建立 堆疊
  1. 開啟 OpsWorks Stacks 主控台,然後按一下 Add Stack (新增堆疊)

  2. 指定下列設定,並接受其他設定的預設值,然後按一下 Add Stack (新增堆疊)

    • 名稱 – RubySDK

    • 預設 SSH 金鑰 – Amazon EC2 金鑰對

    如果您需要建立 Amazon EC2 金鑰對,請參閱 Amazon EC2 金鑰對。請注意,金鑰對必須屬於與執行個體相同的 AWS 區域。此範例使用預設的美國西部 (奧勒岡) 區域。

  3. 按一下 Add a layer (新增 layer),並新增自訂 layer 至具有下列設定的堆疊。

    • 名稱 – S3Download

    • 簡短名稱 – s3download

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

  4. 新增全年無休執行個體 (具有預設設定) 至 layer,以及啟動它

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

執行配方
  1. 編輯堆疊以啟用自訂技術指南,然後指定下列設定。

    • 儲存庫類型Http Archive

    • 儲存庫 URL – 您先前記錄的技術指南的封存 URL。

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

  2. 執行更新自訂技術指南堆疊命令,以在堆疊執行個體上安裝最新版的自訂技術指南。如果存在舊版的技術指南,則此命令會予以覆寫。

  3. 透過使用配方執行執行配方堆疊命令以執行設定為 的配方s3bucket_ops::default。此命令會啟動 Chef 執行,內含包含 s3bucket_ops::default 的回合清單。

    注意

    您通常會讓 OpsWorks Stacks 透過將配方指派給適當的生命週期事件來自動執行配方。您可以手動觸發事件來執行這類配方。您可以使用堆疊命令來觸發安裝和設定事件,以及使用部署命令來觸發部署和解除部署事件。

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

驗證 s3bucket_ops
  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) ...
  2. 使用 SSH 登入執行個體,並列出 /tmp 的內容。