在 Stacks Windows AWS OpsWorks 執行個體上使用 SDK for Ruby - AWS OpsWorks

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

在 Stacks Windows AWS OpsWorks 執行個體上使用 SDK for Ruby

重要

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

注意

此範例假設您已完成在 Windows 執行個體上執行配方範例。否則,您應該先執行該範例。特別是,它說明如何啟用對執行個體的RDP存取。

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

本主題說明如何在 AWS OpsWorks Stacks Windows 執行個體AWS SDK for Ruby上使用 ,從 S3 儲存貯體下載檔案。

如果 Ruby 應用程式需要存取 AWS 資源,您必須提供一組具有適當許可的AWS登入資料。對於配方,您提供AWS登入資料的最佳選項是使用 AWS Identity and Access Management (IAM) 角色。IAM 角色的運作方式與具有連接政策IAM的使用者非常相似,該政策授予使用各種 AWS 服務的許可。不過,您可以將角色指派給 Amazon Elastic Compute Cloud (AmazonEC2) 執行個體,而不是個別執行個體。該執行個體上執行的應用程式接著可以取得已連接政策所授予的許可。使用角色,登入資料絕不會出現在您的程式碼中,即使是間接也是一樣。

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

您必須將AmazonS3ReadOnlyAccess政策連接至aws-opsworks-ec2-role角色,才能授予適當的許可。如需如何將政策連接至角色的詳細資訊,請參閱IAM《 使用者指南》中的新增IAM身分許可 (主控台)

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

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

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

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

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

  4. 使用下列配方建立 default.rb 檔案,並將它儲存至 recipes 目錄。windows-cookbooks 將 取代為您用來存放要下載之檔案的 S3 儲存貯體名稱。

    Chef::Log.info("******Downloading an object from S3******") chef_gem "aws-sdk-s3" do compile_time false action :install end ruby_block "download-object" do block do require 'aws-sdk-s3' Aws.use_bundled_cert! s3_client = Aws::S3::Client.new(region:'us-west-2') s3_client.get_object(bucket: 'windows-cookbooks', key: 'myfile.txt', response_target: '/chef/myfile.txt') end action :run end
  5. 建立 s3download.zip 封存,並將檔案上傳至 S3 儲存貯體。將檔案設為公有,並記錄 URL以供日後使用。

  6. 建立名為 myfile.txt 的文字檔,並將其上傳至 S3 儲存貯體。這是您配方將下載的檔案,因此您可以使用任何方便使用的儲存貯體。

配方會執行下列任務。

1:安裝 SDK for Ruby v2。

此範例使用 SDK for Ruby 下載物件。不過, AWS OpsWorks Stacks 不會SDK在 Windows 執行個體上安裝此項目,因此配方的第一部分會使用 chef_gem 資源來處理該任務。您可以使用此資源來安裝 Gem 以供 Chef 使用,其中包含配方。

2:下載檔案。

配方的第三個部分使用 ruby_block 資源SDK來執行 Ruby v2 程式碼,myfile.txt從名為 的 S3 儲存貯體下載windows-cookbooks到執行個體的/chef目錄。將 windows-cookbooks 變更為包含 myfile.txt 的儲存貯體名稱。

注意

配方是 Ruby 應用程式,因此,您可以將 Ruby 程式碼放入配方主體中;它不需要在 ruby_block 資源中。不過,Chef 會先執行配方主體中的 Ruby 程式碼,接著依序執行每個資源。在此範例中,如果您將下載程式碼放入配方的內文中,它將會失敗,因為它取決於SDK適用於 Ruby 的 ,以及安裝SDK尚未執行 chef_gem的資源。ruby_block 資源中的程式碼會在資源執行時執行,並在chef_gem資源安裝 SDK for Ruby 之後執行。

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

建立堆疊
  1. 開啟 AWS OpsWorks Stacks 主控台,然後選擇 Add Stack (新增堆疊)。指定下列設定,並接受其他設定的預設值,然後選擇 Add Stack (新增堆疊)

    • 名稱 – S3Download

    • 區域 – 美國西部 (奧勒岡)

      此範例適用於任何區域,但建議您使用美國西部 (奧勒岡) 進行教學。

    • 預設作業系統 – Microsoft Windows Server 2012 R2

  2. 選擇 Add a layer (新增 layer),並新增自訂 layer 至具有下列設定的堆疊。

    • 名稱 – S3Download

    • 簡短名稱 – s3download

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

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

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

    • 儲存庫類型S3 Archive

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

    接受其他設定的預設值,然後選擇 Save (儲存) 以更新堆疊組態。

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

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

    注意

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

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

驗證 s3download
  1. 第一步是檢查 Chef 日誌。您的堆疊應該有一個名為 s3download1 的執行個體。在執行個體頁面上,選擇在執行個體的日誌欄中顯示 ,以顯示 Chef 日誌。向下捲動,以在接近底端發現您的日誌訊息。

    ... [2015-05-01T21:11:04+00:00] INFO: Loading cookbooks [s3download@0.0.0] [2015-05-01T21:11:04+00:00] INFO: Storing updated cookbooks/s3download/recipes/default.rb in the cache. [2015-05-01T21:11:04+00:00] INFO: ******Downloading an object from S3****** [2015-05-01T21:11:04+00:00] INFO: Processing chef_gem[aws-sdk] action install (s3download::default line 3) [2015-05-01T21:11:05+00:00] INFO: Processing ruby_block[download-object] action run (s3download::default line 8) ...
  2. 使用 RDP登入執行個體並檢查 的內容c:\chef