範例 9:使用 Amazon EC2 執行個體 - AWS OpsWorks

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

範例 9:使用 Amazon EC2 執行個體

重要

該 AWS OpsWorks Stacks 服務於 2024 年 5 月 26 日終止使用壽命,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載移轉至其他解決方案。如果您對移轉有任何疑問,請透過 AWS Re: post 或透過進AWS 階 Support 與 AWS Support 團隊聯絡。

為此,您已在本機中執行執行個體 VirtualBox。雖然這既快速又簡單,但您最終會想要在 Amazon EC2 執行個體上測試您的食譜。特別是,如果你想在 Amazon Linux 上運行食譜,它只能在 Amazon EC2 上使用。您可以使用類似的系統(例如 CentOS)進行初步實施和測試,但在 Amazon Linux 上完全測試食譜的唯一方法是使用 Amazon EC2 執行個體。

本主題說明如何在 Amazon EC2 執行個體上執行方法。Test Kitchen 和 Vagrant 的使用方法和前面各節差不多,但有兩點不同:

  • 驅動程式是 kitchen-ec2,不是 Vagrant。

  • 食譜的.kitchen.yml檔案必須使用啟動 Amazon EC2 執行個體所需的資訊進行設定。

注意

另一種方法是使用 vagrant-aws Vagrant 外掛程式。如需詳細資訊,請參閱 Vagrant AWS 提供者

您需要 AWS 登入資料才能建立 Amazon EC2 執行個體。如果您沒有 AWS 帳戶,您可以取得一個,如下所示。

註冊一個 AWS 帳戶

如果您沒有 AWS 帳戶,請完成以下步驟來建立一個。

若要註冊成為 AWS 帳戶
  1. 開啟 https://portal.aws.amazon.com/billing/signup

  2. 請遵循線上指示進行。

    部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。

    當您註冊一個時 AWS 帳戶,將創建AWS 帳戶根使用者一個。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。安全性最佳做法是將管理存取權指派給使用者,並僅使用 root 使用者來執行需要 root 使用者存取權的工作。

AWS 註冊過程完成後,會向您發送確認電子郵件。您可以隨時登錄 https://aws.amazon.com/ 並選擇 我的帳戶,以檢視您目前的帳戶活動並管理帳戶。

建立具有管理權限的使用者

註冊後,請保護您的 AWS 帳戶 AWS 帳戶根使用者 AWS IAM Identity Center、啟用和建立系統管理使用者,這樣您就不會將 root 使用者用於日常工作。

保護您的 AWS 帳戶根使用者
  1. 選擇 Root 使用者並輸入您的 AWS 帳戶 電子郵件地址,以帳戶擁有者身分登入。AWS Management Console在下一頁中,輸入您的密碼。

    如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入

  2. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

    如需指示,請參閱《IAM 使用者指南》的為 AWS 帳戶 根使用者啟用虛擬 MFA 裝置 (主控台)

建立具有管理權限的使用者
  1. 啟用 IAM Identity Center。

    如需指示,請參閱 AWS IAM Identity Center 使用者指南中的啟用 AWS IAM Identity Center

  2. 在 IAM 身分中心中,將管理存取權授予使用者。

    若要取得有關使用 IAM Identity Center 目錄 做為身分識別來源的自學課程,請參閱《使用指南》 IAM Identity Center 目錄中的「以預設值設定使用AWS IAM Identity Center 者存取」。

以具有管理權限的使用者身分登入
指派存取權給其他使用者
  1. 在 IAM 身分中心中,建立遵循套用最低權限許可的最佳做法的權限集。

    如需指示,請參閱《AWS IAM Identity Center 使用指南》中的「建立權限集」。

  2. 將使用者指派給群組,然後將單一登入存取權指派給群組。

    如需指示,請參閱《AWS IAM Identity Center 使用指南》中的「新增群組」。

您應該建立具有存取 Amazon EC2 許可的 IAM 使用者,並將使用者的存取權和密鑰儲存到工作站上的安全位置。Test Kitchen 會使用這些登入資料建立執行個體。向 Test Kitchen 提供登入資料,最好是將金鑰指派給您工作站的下列環境變數。

警告

IAM 使用者擁有長期登入資料,這會帶來安全風險。為了減輕此風險,我們建議您僅向這些使用者提供執行工作所需的權限,並在不再需要這些使用者時移除這些使用者。

  • AW_ACCES_KEY-您的用戶的訪問密鑰,看起來像 AKIAIOSFODNN7EXAMPLE。AKIAIOSFODNN7EXAMPLE

  • AWS_秘密鑰 — 您的用戶的秘密密鑰, 這看起來像是密鑰/密鑰. bPxRfi

此方法可以減少意外危害您帳戶的機率,例如,將包含您登入資料的專案上傳到公有儲存庫。

設定技術指南
  1. 若要使用 kitchen-ec2 驅動程式,您必須在您的系統上安裝 ruby-dev 套件。下列範例命令說明如何使用 aptitude 將套件安裝在 Ubuntu 系統。

    sudo aptitude install ruby1.9.1-dev
  2. kitchen-ec2 驅動程式是 Gem 套件,安裝方式如下:

    gem install kitchen-ec2

    視您的工作站而定,此命令可能需要 sudo,或者您也可以使用 Ruby 環境管理員,例如 RVM。此程序已經 kitchen-ec2 驅動程式 0.8.0 版測試,但現有更新版本。若要安裝特定版本,請執行 gem install kitchen-ec2 -v <version number>

  3. 您必須指定測試廚房可用來連接執行個體的 Amazon EC2 安全殼層 key pair。如果您沒有 Amazon EC2 key pair,請參閱 Amazon EC2 金鑰配對,以取得如何建立金鑰配對的詳細資訊。請注意,金鑰對必須屬於與執行個體相同的 AWS 區域。此範例使用美國西部 (加利佛尼亞北部)。

    在您選取金鑰對後,請建立名為 opsworks_cookbooksec2_keys 子目錄,將金鑰對的私有金鑰 (.pem) 檔案複製到該子目錄。請注意,將私有金鑰放在 ec2_keys 中,只為方便略微簡化程式碼,它可在您系統上的任何位置。

  4. 建立並導覽至名為 createdir-ec2opsworks_cookbooks 子目錄。

  5. metadata.rb 檔案新增至具有以下內容的 createdir-ec2

    name "createdir-ec2" version "0.1.0"
  6. 初始化 Test Kitchen,如範例 1:安裝套件中所述。以下部分說明如何設定.kitchen.yml,這對於 Amazon EC2 執行個體而言要複雜得多。

  7. recipes 子目錄新增至 createdir-ec2

為 Amazon EC2 配置 .yml

您可以.kitchen.yml使用kitchen-ec2驅動程式啟動適當設定的 Amazon EC2 執行個體所需的資訊進行設定。以下是美國西部 (加利佛尼亞北部) 區域中 Amazon Linux 執行個體的.kitchen.yml檔案範例。

driver: name: ec2 aws_ssh_key_id: US-East1 region: us-west-1 availability_zone: us-west-1c require_chef_omnibus: true security_group_ids: sg........ subnet_id: subnet-......... associate_public_ip: true interface: dns provisioner: name: chef_solo platforms: -name: amazon driver: image_id: ami-xxxxxxxx transport: username: ec2-user ssh_key: ../ec2_keys/US-East1.pem suites: - name: default run_list: - recipe[createdir-ec2::default] attributes:

您可以使用 provisionersuites 區段的預設設定,但必須修改預設的 driverplatforms 設定。此範例使用最少的設定清單,接受餘數的預設值。如需完整的 kitchen-ec2 設定清單,請參閱 Kitchen::Ec2:適用於 Amazon EC2 的 Test Kitchen 驅動程式

此範例設定下列 driver 屬性。假設您已將使用者存取金鑰和秘密金鑰指派給標準環境變數,如前所述。驅動程式預設使用這些金鑰。否則,您必須將 aws_access_key_idaws_secret_access_key 新增至 driver 屬性,設為適當的金鑰值,明確指定金鑰。

name

(必要) 此屬性必須設定為 ec2

aws_ssh_key_id

(必要) US-East1 在此範例中命名的 Amazon EC2 SSH key pair 名稱。

transport.ssh_key

(必要) 您為 aws_ssh_key_id 指定之金鑰的私有金鑰 (.pem) 檔案。在本範例中,此檔案名為 US-East1.pem,位在 ../opsworks/ec2_keys 目錄中。

region

(必要) 執行個體的 AWS 區域。此範例使用美國西部 (加利佛尼亞北部),以表示us-west-1)。

availability_zone

(選用) 執行個體的可用區域。如果您省略此設定,測試廚房會針對指定區域 (美國西部 (加利佛尼亞北部) 使用預設可用區域。us-west-1b不過,您的帳戶可能無法使用預設區域。在這種情況下,您必須明確指定可用區域。發生這種情況時,用來準備範例的帳戶不會支援 us-west-1b,所以範例會明確指定 us-west-1c

require_chef_omnibus

設為 true 時,此設定會確保使用 omnibus 安裝程式在所有平台執行個體上安裝 chef-client

security_group_ids

(選用) 套用到執行個體的安全群組 ID 清單。此設定會將 default 安全群組套用到執行個體。請確定安全群組傳入規則允許送入 SSH 連線,否則 Test Kitchen 無法與執行個體通訊。如果您使用 default 安全群組,您可能需要因應情況編輯它。如需詳細資訊,請參閱 Amazon EC2 安全群組

subnet_id

執行個體的目標子網路 ID (如適用)。

associate_public_ip

如果您希望能夠從網際網路存取執行個體,可以讓 Amazon EC2 將公有 IP 地址與執行個體建立關聯。

interface

您用來存取執行個體的主機名稱組態類型。有效值為 dnspublicprivateprivate_dns。如果您不指定此屬性的值,kitchen-ec2 會以下列順序設定主機名稱組態。如果略過此屬性,即不設定組態類型。

  1. DNS 名稱

  2. 公有 IP 地址

  3. 私有 IP 地址

  4. 私有 DNS 名稱

重要

您應該創建一個用戶並將這些憑據提供給 Test Kitchen,而不是將帳戶憑據用於訪問密鑰和密鑰。如需詳細資訊,請參閱管理 AWS 存取金鑰的最佳實務

請注意不要放.kitchen.yml在可公開存取的位置,例如將其上傳到公用 GitHub 或 Bitbucket 儲存庫。這麼做會公開您的登入資料,而且可能會危害您帳戶的安全性。

kitchen-ec2 驅動程式為下列平台提供預設的支援:

  • ubuntu-10.04

  • ubuntu-12.04

  • ubuntu-12.10

  • ubuntu-13.04

  • ubuntu-13.10

  • ubuntu-14.04

  • centos-6.4

  • debian-7.1.0

  • windows-2012r2

  • windows-2008r2

如果您想要使用一或多個這些平台,請將適當的平台名稱新增至 platformskitchen-ec2 驅動程式會自動選取適當的 AMI 並產生 SSH 使用者名稱。您可以使用其他平台 (本範例使用 Amazon Linux),但您必須明確指定下列屬性。platforms

name

平台名稱。此範例使用 Amazon Linux,所以 name 設為 amazon

driver

driver 屬性包含下列項目:

  • image_id— 平台的 AMI,必須屬於指定的區域。此範例使用ami-ed8e9284來自美國西部 (加利佛尼亞北部) 區域的 Amazon Linux AMI。

  • transport.username— 測試廚房用於與執行個體通訊的 SSH 使用者名稱。

    針對 Amazon Linux,請使用 ec2-user。其他 AMI 可能會有不同的使用者名稱。

以範例取代 .kitchen.yml 中的程式碼,將適當的值指派給帳戶專屬屬性,例如 aws_access_key_id

執行配方

此範例使用重複中的配方。

執行配方
  1. 使用下列程式碼建立名為 default.rb 的檔案,並將它儲存到技術指南的 recipes 資料夾。

    directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
  2. 執行 kitchen converge 以執行配方。請注意,由於啟動和初始化 Amazon EC2 執行個體所需的時間,此命令的完成時間會比先前的範例更長。

  3. 前往 Amazon EC2 主控台,選取美國西部 (加利佛尼亞北部)) 區域,然後按一下導覽窗格中的執行個體。您會在清單中看到新建立的執行個體。

  4. 執行kitchen login以登入執行個體,就像您在中執行的執行個體一樣 VirtualBox。您會在 /srv 下看到新建立的目錄。您也可以使用您最愛的 SSH 用戶端連線到執行個體。