使用現地 AWS OpsWorks Stacks 分離工具 - AWS OpsWorks

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

使用現地 AWS OpsWorks Stacks 分離工具

重要

該 AWS OpsWorks Stacks 服務於 2024 年 5 月 26 日終止使用壽命,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載移轉至其他解決方案。

本節說明如何使用「就地 AWS OpsWorks Stacks 分離」工具將 OpsWorks 執行個體從 OpsWorks 堆疊服務中分離。

您分離的執行個體將保留在您的執行個體中 AWS 帳戶,但您將無法再使用來管理它們 OpsWorks。相反地,您將使用 Amazon EC2 或任何 EC2 相容方法來設定和管理執行個體。 AWS Systems Manager

在較高層次,分遣隊過程包括以下步驟:

  1. 該工具執行驗證檢查,以確保資源已準備好進行分離。

  2. 此工具會從您的 OpsWorks 堆疊匯出自訂 JSON,並將其做為物件存放在 Amazon S3 中。

  3. 此工具會建立代表每個 OpsWorks 堆疊生命週期事件的 Systems Manager 自動化

  4. 此工具會為所有要卸離的執行個體建立一個 AWS Service Catalog AppRegistry 目錄,並將任何 Elastic Load Balancing (ELB) 負載平衡器從層分離。 OpsWorks

  5. 最後,此工具會分離和取消註冊其他資源,包括 Amazon Relational Database Service (Amazon RDS) 執行個體。

流程如何運作

「就地分離」工具提供以下 3 個指令和類似精靈的體驗,可引導您完成一系列步驟,以便在繼續分離圖層之前檢查和設定例證。

Command 描述

handle-prerequisites

此指令會分析圖層中的所有例證是否符合分離的資格,並解決先決條件。執行個體必須處於狀況良好的狀態 OpsWorks,不能有時間或以負載為基礎的 auto 調度器,而且必須安裝最新的 OpsWorks 代理程式版本。

此外,此命令會檢查所有執行個體是否具有支援 SSM 代理程式所需的權限,以及是否已安裝最新的 SSM 代理程式版本。如果 SSM 代理程式不存在,此命令將會安裝,如果 SSM 代理程式不使用最新版本,則會更新它。該命令還將添加任何必要的權限。

detach

此指令分離指定圖層的所有 OpsWorks 例證。

首先,該命令將執行先決條件檢查,以確保該層符合分離的資格。如果您不想解決先決條件,您可以選擇強制卸離。

接下來,該命令將指示透過標 OpsWorks 記 API 或透過從圖層和堆疊傳播標籤新增至執行個體的所有標籤都將保留。分離完成後,您可以使用相關 EC2 API 移除任何這些標籤。

然後,命令將檢查是否要將 Chef 相關配置導出到 SSM 參數。

如果您有一個 Classic Load Balancer 連接到該層,該命令將詢問它是否可以卸離負載平衡器,以防止任何停機時間。

cleanup

此命令會刪除您帳戶 OpsWorks 中的所有實體。它將終止實例並刪除所有堆棧。這應該用於不再需要作為清理帳戶的最後一步的資源。

注意

我們建議您在執行cleanup命令之前執行新的安裝程式幾天。如果需要,這可確保堆疊中的任何必要組態都可隨時取得。

限制

「現地分離」工具的主要用途是安全地分離 OpsWorks 堆疊例證。本節概述了該工具的限制。

  • Windows SSM 代理程式 — 如果 SSM 代理程式未安裝在執行個體上,您必須手動安裝它。如果代理程式未更新至最新版本,則同樣適用。

  • 時間/載入自動縮放實體 — 分離工具不支援啟用「Auto Scaling」的執行個體。您必須在要分離的執行個體上停用「Auto Scaling 例」。

  • 權限 — 卸離工具不會建立或產生在主控台的 [權限] 頁面上指定的 IAM 實體。 OpsWorks

  • 應用程式 — 分離工具不會在以外建立或產生應用程式。 OpsWorks

開始使用

步驟 1:確認是否符合先決條件

就地分離工具的所有 3 個命令都是 Python 腳本,您可以在本地,在 EC2 實例上或使用 AWS CloudShell.

AWS CloudShell 是一個以瀏覽器為基礎的 shell,可讓您存取所選 AWS AWS 區域資源的命令列。 AWS CloudShell 預先安裝了流行的工具(例如 AWS CLI 和 Python)。使用時 AWS CloudShell,您會使用與登入主控台相同的認證。

本逐步解說假設您正在使用 AWS CloudShell.

步驟 2:下載指令碼

  1. 執行下列命令,下載包含移轉指令碼和所有相關檔案的 zip 檔案:

    aws s3api get-object \ --bucket detach-in-place-bucket-prod-us-east-1 \ --key detach_in_place_script.zip detach_in_place_script.zip
  2. 通過運行以下命令解壓縮文件。

    unzip detach_in_place_script.zip

    解壓縮檔案之後,即可使用下列檔案:

    • 雷德美. MD

    • 執照

    • NOTICE

    • requirements.txt

    • TODO.py

  3. 如有必要,請執pipenv行下列命令進行安裝。

    pip install pipenv

步驟 3:執行指令碼

首先,設定您的環境,以便執行下列命令來執行指令碼。

pipenv install -r requirements.txt pipenv shell

然後,檢閱指令碼參數。

Command 參數 Description (描述) Type 必要 預設

handle-prerequisites

--layer-id

您要分離的圖層的 ID。

字串

-

--region

OpsWorks 堆疊的區域。如果您的 OpsWorks 堆疊區域和 API 端點區域不同,請使用堆疊區域。此區域與 OpsWorks 堆疊中其他資源部分 (例如 EC2 執行個體和子網路) 的區域相同。

字串

us-east-1

detach

--layer-id

要分離的圖層的 ID。

字串

-

--batch-size

要從圖層分離的副本數目 (例如 5)。

字串

-

--region

OpsWorks 堆疊的區域。如果您的 OpsWorks 堆疊區域和 API 端點區域不同,請使用堆疊區域。此區域與 OpsWorks 堆疊中其他資源部分 (例如 EC2 執行個體和子網路) 的區域相同。

字串

us-east-1

cleanup

--stack-id

您要刪除之堆疊的識別碼。

字串

互斥,您必須指定層 ID 或堆疊 ID

--layer-id

要刪除的圖層 ID

字串

--region

OpsWorks 堆疊的區域。如果您的 OpsWorks 堆疊區域和 API 端點區域不同,請使用堆疊區域。此區域與 OpsWorks 堆疊中其他資源部分 (例如 EC2 執行個體和子網路) 的區域相同。

字串

us-east-1

您可以透過使用選項執行cleanup指令detach,來查看handle-prerequisites和指令的可用--help選項,如下所示:

python3 layer_detacher.py detach --help python3 layer_detacher.py handle-prerequisites --help python3 layer_detacher.py cleanup --help

您現在已準備好開始使用。下列範例顯示如何針對不同的使用案例執行命令。

範例 1:檢查圖層是否符合所有先決條件且符合分遣隊的資格

下列指令會讀取有關 OpsWorks 層 (及其包含的例證) 的資訊,並檢查是否符合下列先決條件:

  • 所有實例都在線。

  • 沒有「載入/時間 Auto Scaling」執行個體。

  • 所有執行個體都有最新的 OpsWorks Agent。

  • 所有執行個體都已安裝並設定最新的 SSM 代理程式。

  • 所有執行個體都有安全殼層 key pair。

  • 每個實體只屬於一個圖層。

python3 layer_detacher.py handle-prerequisites \ --layer-id opsworks-layer-id \ --region opsworks-stack-region

範例 2:分離圖層的所有例證

下列命令會重複執行層的所有執行個體、檢查執行個體是否符合先決條件,並嘗試以 parallel 方式分離所有符合先決條件的執行個體。如果不符合一或多個先決條件,命令會為其餘的不相容執行個體提供強制卸離選項。

在分離任何實例之前,該命令將:

  1. 儲存自訂 JSON 並將其上傳到 S3。

  2. 為該層的每個 OpsWorks 生命週期事件建立 SSM 自動化文件,並將自動化文件的執行日誌上傳到 S3。

  3. 為將分離的所有執行個體建立 AppRegistry 應用程式。該應用程序具有與其關聯的資源組,其中包含所有分離的實例和資源。這些資源包括 SSM 自動化文件和 SSM 參數,其中包含生命週期事件和自訂 Chef 方法的相關資訊。

  4. 將「Classic Load Balancer」與層分離 (如果有的話)。

這個命令只會修改 OpsWorks 資源。EC2 執行個體的狀態將保持不變。

python3 layer_detacher.py detach \ --layer-id opsworks-layer-id \ --region opsworks-stack-region

範例 3:批次解除貼附圖層的所有例證

下列命令的作用與前一個範例相同。唯一的區別是它會分批分離執行個體。

這個命令只會修改 OpsWorks 資源。EC2 執行個體的狀態將保持不變。

python3 layer_detacher.py detach \ --layer-id opsworks-layer-id \ --region opsworks-stack-region \ --batch-size 5

範例 4:清除圖層的所有資源並刪除圖層

以下命令將遍歷圖層的所有資源並將其刪除。更詳細地說,它將停止並刪除 OpsWorks 和 EC2 中的所有執行個體、卸離負載平衡器並取消註冊 Amazon RDS 執行個體、彈性 IP 和磁碟區。清理資源後,它將刪除該圖層。

此命令將刪除 OpsWorks 資源和 EC2 實例。如果您希望 EC2 執行個體保持不變,請在使用指detach令之前使用命cleanup令。這樣,該cleanup命令將刪除所有剩餘的資源。

python3 layer_detacher.py cleanup \ --layer-id opsworks-layer-id \ --region opsworks-stack-region

示例 5:清理堆棧的所有資源並刪除堆棧

以下命令將遍歷所有圖層,然後遍歷每個層的資源。對於每一層,該命令將停止並刪除 OpsWorks 和 EC2 中的所有執行個體、卸離負載平衡器,以及取消註冊 Amazon RDS 執行個體、彈性 IP 和磁碟區。然後,該命令將刪除該圖層。相同的過程將在屬於此堆棧的每個層中執行。最後,刪除所有圖層後,堆疊將被移除。

此命令將刪除 OpsWorks 資源和 EC2 實例。如果您希望 EC2 執行個體保持不變,請在使用指detach令之前使用命cleanup令。這樣,該cleanup命令將刪除所有剩餘的資源。

python3 layer_detacher.py cleanup \ --stack-id opsworks-stack-id \ --region opsworks-stack-region

步驟 4:分離後繼續操作您的資源 OpsWorks

執行detach指令後,工具會建立與分離圖層對 AWS Service Catalog AppRegistry 應的新應用程式。應用程式名稱遵循格式layer-name---layer-id。它也會新增標OpsWorksLayerId籤,以唯一識別與分離圖層相符的應用程式。

要向此應用程序添加新 AWS 資源(例如,新的 EC2 實例),可以執行以下操作之一:

  1. 使用應用程式的唯一應用程式標籤來 AppRegistry標記資源:

    標籤鍵:awsApplication

    值:arn:aws:resource-groups:region:account-id:group/application-name/application-id>

  2. 執行 associate-resource 命令。

此外,會針對每個 AppRegistry 應用程式建立資源群組。資源群組包含下列標籤。

標籤鍵 Value

EnableAWSServiceCatalogAppRegistry

TRUE

aws:servicecatalog:applicationName

application-name

aws:servicecatalog:applicationId

application-id

aws:servicecatalog:applicationArn

arn:aws:servicecatalog:region:account-id:/applications/application-id

分遣隊後執行工作

下表提供分離後如何執行工作的相關資訊:

任務 描述

執行生命週期事

執行detach命令後,如果您選取了該選項,指令碼會建立 5 個符合 5 個 OpsWorks 生命週期事件的 Automation 文件。

每個自動化文件的名稱均遵循以下格式:layer-id_lifecycle-event_automation_document

若要模擬 Systems Manager 中的 OpsWorks 行為,您需要在佈建、終止 EC2 執行個體或部署/移除配方時手動觸發自動化執行。

更新自訂 JSON

堆疊和層的自訂 JSON 存放在分離期間指定的 S3 儲存貯體中,或者存放在建立的新 S3 儲存貯體中。

為 JSON 檔案儲存的檔案名稱如下:

  • layercustomjson.json

  • stackcustomjson.json

變更生命週期事件的執行清單

每個生命週期事件的執行清單均在對應的自動化文件中定義。若要變更執行清單,請在 AppRegistry 應用程式中尋找自動化文件並修改RunList參數。

更新方法和食譜的程序不會變更AWS-ApplyChefRecipes,因為自動化文件所 OpsWorks觸發的程序支援與相同的來源。

管理auto 修復/auto 縮放

卸離執行個體時, OpsWorks 代理程式會解除安裝。如果沒有代理程式,就 OpsWorks 無法自動修復或取代運作狀態不良的執行個體,也無法 auto 動擴展叢集。若要繼續 auto 擴展和取代失敗的執行個體,請建立 Amazon EC2 Auto Scaling 群組。當 Amazon EC2 偵測到需要更換運作狀態不良的執行個體時,該群組將啟動新執行個體以維持所需的容量。

管理 Load Balancer

如果您的層使用 Classic Load Balancer,則該detach命令將在取消註冊實例之前將其分離。這樣做是為了確保所有 ELB 執行個體關聯在分離過程中保留在 Amazon EC2 上,從而導致零停機時間。該過程完成後,您將能夠在 EC2 上管理 ELB。

連線到您的執行個體

當您執行handle-prerequisites或命detach令時,會發生兩項檢查:

  • SSM 代理程式和權限的版本

  • SSH 金鑰

這些命令也提供您更新 SSM 代理程式和新增必要權限的選項,讓您可以使用工作階段管理員連線至執行個體。如果安全殼層金鑰存在,您也可以選擇透過 SSH 存取執行個體。

使用 Systems Manager 應用程式管理員實例標

分離後,您可以在「應用程式管理員執行個體」標籤上檢視和管理您的執行個體

[執行個體] 索引標籤提供應用程式 EC2 執行個體的彙總資訊,例如其狀態、運作狀態和上次命令狀態。使用此索引標籤,您可以檢視個別執行個體的詳細資訊,例如命令歷程記錄、警示狀態、Systems Manager 代理程式健全狀況等。[執行個體] 索引標籤也提供各種動作,例如套用 Chef 方法、啟動或停止執行個體,或是從 Auto Scaling 群組新增或移除執行個體。