使用 AWS CDK 自動化 AWS 服務目錄產品組合和產品部署 - AWS 方案指引

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

使用 AWS CDK 自動化 AWS 服務目錄產品組合和產品部署

由桑迪蓋萬德 (AWS)、拉傑尼許泰亞吉 (AWS) 和維約瑪·薩克德瓦 (AWS) 所建立

代碼存儲庫:aws-cdk-servicecatalog-automation

環境:PoC 或試點

技術: DevOps; 基礎設施; 管理與治理

工作負載:開源

AWS 服務:AWS Service Catalog;AWS CDK

Summary

AWS Service Catalog 可協助您集中管理已核准用於組織 AWS 環境的 IT 服務或產品目錄。產品集合稱為產品合,而產品組合也包含組態資訊。使用 AWS Service Catalog,您可以為組織中的每種使用者類型建立自訂的產品組合,然後授與適當產品組合的存取權。然後,這些用戶可以從產品組合中快速部署他們需要的任何產品。

如果您有複雜的網路基礎結構,例如多區域和多帳戶架構,建議您在單一的集中帳戶中建立及管理 Service Catalog 產品組合。此模式說明如何使用 AWS Cloud Development Kit (AWS CDK) 在中央帳戶中自動建立 Service Catalog 產品組合、授予最終使用者存取權限,然後選擇性地在一或多個目標 AWS 帳戶中佈建產品。此 ready-to-use 解決方案會在來源帳戶中建立 Service Catalog 產品組合。此外,還可以選擇使用 AWS CloudFormation 堆疊在目標帳戶中佈建產品,並協助您 TagOptions 設定產品:

  • AWS CloudFormation StackSets — 您可以使用 StackSets 跨多個 AWS 區域和帳戶啟動 Service Catalog 產品。在此解決方案中,您可以選擇在部署此解決方案時自動佈建產品。如需詳細資訊,請參閱使用 AWS CloudFormation StackSets (Service Catalog 文件) 和StackSets 概念 (CloudFormation 文件)。

  • TagOption 程式 — 您可以使用物件 TagOption 庫來管理已佈建產品的標籤。A TagOption是 AWS Service Catalog 中管理的金鑰值組。它不是 AWS 標籤,但它可以做為基礎建立 AWS 標籤的範本 TagOption。如需詳細資訊,請參閱TagOption 程式庫 (Service Catalog 文件)。

先決條件和限制

先決條件

  • 您想要用來作為管理 Service Catalog 產品組合的來源帳戶的有效 AWS 帳戶。

  • 如果您使用此解決方案在一或多個目標帳戶中佈建產品,則目標帳戶必須已存在且處於作用中狀態。

  • 用於存取 AWS 服務目錄、AWS 和 AWS IAM 的 AWS Identity and Access Management (IAM) 許可。 CloudFormation

產品版本

  • AWS CDK 版本 2.27.0

架構

目標技術堆疊

  • 集中式 AWS 帳戶中的 Service Catalog 產品組合

  • 部署在目標帳戶中的 Service Catalog 產品

目標架構

AWS CDK 在目標帳戶中建立 Service Catalog 產品組合和佈建產品。
  1. 在產品組合 (或來源) 帳戶中,您可以使用 AWS 帳戶、AWS 區域、IAM 角色、產品組合和使用案例的產品資訊來更新 config.json 檔案。

  2. 您可以部署 AWS CDK 應用程式。

  3. AWS CDK 應用程式會擔任部署 IAM 角色,並建立 config.json 檔案中定義的 Service Catalog 產品組合和產品。

    如果您設定 StackSets 為在目標帳戶中部署產品,則程序會繼續進行。如果您未設定 StackSets 佈建任何產品,則程序已完成。

  4. AWS CDK 應用程式擔任StackSet 管理員角色,並部署您在 config. json 檔案中定義的 AWS CloudFormation 堆疊集。

  5. 在目標帳戶中, StackSets 承擔StackSet 執行角色並佈建產品。

工具

AWS 服務

  • AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS 雲端基礎設施。

  • AWS CDK 工具組是命令列雲端開發套件,可協助您與 AWS CDK 應用程式互動。

  • AWS 可 CloudFormation協助您設定 AWS 資源、快速且一致地佈建 AWS 資源,並在 AWS 帳戶和區域的整個生命週期中進行管理。

  • AWS Identity and Access Management (IAM) 可透過控制誰經過身份驗證和授權使用 AWS 資源,協助您安全地管理對 AWS 資源的存取。

  • AWS Service Catalog 可協助您集中管理 AWS 核准的 IT 服務目錄。最終使用者可在機構所設的限制範圍內,迅速地只部署自己需要且經核准的 IT 服務。

代碼存儲庫

此模式的程式碼可在 GitHubaws-cdk-servicecatalog-automation存放庫中取得。代碼存儲庫包含以下文件和文件夾:

  • cdk-sevicecatalog-app— 此資料夾包含此解決方案的 AWS CDK 應用程式。

  • config — 此資料夾包含 config.json 檔案,以及用於在 Service Catalog 組合中部署產品的 CloudFormation 範本。

  • 配置/config.json — 此文件包含所有配置信息。您可以更新此檔案,以針對您的使用案例自訂此解決方案。

  • 配置/模板 — 此文件夾包含服務中心產品的 CloudFormation 模板。

  • setup.sh — 此指令碼會部署解決方案。

  • uninstall.sh — 此指令碼會刪除堆疊和部署此解決方案時建立的所有 AWS 資源。

若要使用範例程式碼,請依照 Epics 一節中的指示操作。

最佳實務

史诗

任務描述所需技能

安裝 AWS CDK 工具組。

確定您已安裝 AWS CDK 工具組。輸入以下命令以確認是否已安裝並檢查版本。 

cdk --version

如果未安裝 AWS CDK 工具組,請輸入以下命令進行安裝。

npm install -g aws-cdk@2.27.0

如果 AWS CDK 工具組版本早於 2.27.0,則輸入下列命令將其更新為 2.27.0 版。

npm install -g aws-cdk@2.27.0 --force
AWS DevOps、 DevOps 工程師

複製儲存庫。

輸入以下命令。在 [其他資訊] 區段的 [複製存放庫] 中,您可以複製包含存放庫 URL 的完整指令。這將從 GitHub中克隆存aws-cdk-servicecatalog-automation儲庫。

git clone <repository-URL>.git

這將在目標目錄中創建一個cd aws-cdk-servicecatalog-automation文件夾。輸入以下命令以導航到此文件夾。

cd aws-cdk-servicecatalog-automation
AWS DevOps、 DevOps 工程師

設定 AWS 登入資料。

輸入下列命令:這些變數會匯出下列變數,這些變數定義了您要部署堆疊的 AWS 帳戶和區域。

export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number>
export CDK_DEFAULT_REGION=<AWS Region>

AWS CDK 的 AWS 登入資料是透過環境變數提供的。

AWS DevOps、 DevOps 工程師

設定最終使用者 IAM 角色的許可。

如果您打算使用 IAM 角色來授與產品組合及其中產品的存取權,則這些角色必須具有由 servicecatalo g.amazonaws.com 服務主體承擔的許可。如需有關如何授予這些許可的指示,請參閱使用 Service Catalog 啟用受信任存取 (AWS Organizations 文件)。

AWS DevOps、 DevOps 工程師

設定所需的 IAM 角色 StackSets。

如果您使 StackSets 用在目標帳戶中自動佈建產品,則需要設定管理和執行堆疊集的 IAM 角色。

  1. 在來源帳戶中,確認是否AWSCloudFormationStackSetAdministrationRole已存在。在目標帳戶中,確認是否AWSCloudFormationStackSetExecutionRole已存在。如果這些角色已經存在,您可以跳到下一個史詩。

  2. 遵循授與自我管理許可 (IAM 文件) 中的指示,在產品組合帳戶中建立堆疊集管理角色,並在每個目標帳戶中建立執行角色。

AWS DevOps、 DevOps 工程師
任務描述所需技能

建立 CloudFormation 範本。

config/templates資料夾中,為您要包含在產品組合中的任何產品建立 CloudFormation 範本。如需詳細資訊,請參閱使用 AWS CloudFormation 範本 (CloudFormation 文件)。

應用開發人員、AWS DevOps、 DevOps 工程師

自訂組態檔案。

config資料夾中,開啟 config.json 檔案,並根據您的使用案例定義參數。除非另有說明,否則需要以下參數:

  • 在此portfolios段落中,定義下列參數以建立一或多個 Service Catalog 產品組合:

    • portfolioName-投資組合的名稱。

    • providerName— 管理學檔之人員、專案團隊或組織的名稱。

    • description-投資組合的簡要說明。

    • roles— (選用) 應該可存取此產品組合的任何 IAM 角色的名稱。具有此角色的使用者可以存取此產品組合中的產品。

    • users— (選用) 應該存取此產品組合及其產品的任何 IAM 使用者的名稱。

    • groups— (選用) 任何應該可存取此產品組合及其產品的 IAM 使用者群組的名稱。

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

    重要事項:rolesusers、和groups都是可選參數,但如果您未定義其中一個參數,則沒有人可以在 Service Catalog 主控台中檢視產品組合產品。至少定義其中一個參數。如需詳細資訊,請參閱授與 Service Catalog 使用者的權限 (Service Catalog 文件)。

  • (選擇性) 在tagOption區段中, TagOptions 為產品定義:

    • key— TagOption 金鑰名稱

    • value— 允許的字串值 TagOption

    如需詳細資訊,請參閱TagOption 程式庫 (Service Catalog 文件)。

  • 在此products區段中,定義產品的下列參數:

    • portfolioName— 您要新增產品的產品組合名稱。您只能指定一個投資組合。

    • productName— 產品名稱。

    • owner— 產品的所有者。

    • productVersionName— 以字串值表示的產品版本名稱,例如v1

    • templatePath— 產品 CloudFormation 範本的檔案路徑。

    • deployWithStackSets— (選擇性) 指定一或多個您要用 StackSets 於在產品組合中自動佈建產品的帳戶和區域。如果您使用此部署選項,則需要此段落中的所有下列參數:

      • accounts— 目標帳戶。

      • regions— 目標區域。

      • stackSetAdministrationRoleName— 用來管理 StackSets 組態的 IAM 角色名稱。請不要變更此值。此角色必須具有此完全相同的名稱。

      • stackSetExecutionRoleName— 部署堆疊執行個體之目標帳戶中 IAM 角色的名稱。請不要變更此值。此角色必須具有此完全相同的名稱。

如需已完成組態檔案的範例,請參閱其他資訊一節中的範例組態檔案

AWS 應用程式開發人員、 DevOps 工程師 DevOps

部署解決方案。

輸入以下命令。這會部署 AWS CDK 應用程式,並依照 config. json 檔案中指定的方式佈建 Service Catalog 產品組合和產品。

sh +x setup.sh
AWS 應用程式開發人員、 DevOps 工程師 DevOps

驗證部署。

請執行下列動作,確認部署成功:

  1. 使用可存取您在設定檔中定義的一或多個產品組合的登入資料登入 AWS 管理主控台。

  2. https://console.aws.amazon.com/servicecatalog/ 開啟 Service Catalog 主控台。 

  3. 在功能窗格的 [佈建] 下,選擇 [產品]。確認您看到您為產品組合指定的產品清單。

  4. 遵循啟動產品 (Service Catalog 文件) 中的指示,啟動其中一個可用產品。確認可用的產品版本和標籤符合您在組態檔案中提供的值。

  5. 如果您選擇使用在一或多個目標帳戶中自動佈建產品 StackSets,請執行下列動作:

    1. 使用認證登入,授與您檢視其中一個目標帳戶中佈建產品的權限。

    2. 在 Service Catalog 主控台的導覽窗格的佈建下,選擇已佈建的產品

    3. 確認預期的產品出現在清單中。

一般 AWS

(可選)更新產品組合和產品。

如果您想要使用此解決方案來更新產品組合或產品,或提供新產品:

  1. config.json 檔案中進行必要的變更。

  2. 視需要在config/template資料夾中加入或修改任何 CloudFormation 樣板。

  3. 重新部署解決方案。

例如,您可以新增其他產品組合或佈建更多資源。AWS CDK 應用程式只會實作變更。如果先前部署的產品組合或產品沒有任何變更,則重新部署不會影響它們。

一般 AWS 應用 DevOps 程式開發人員、工程師
任務描述所需技能

(選擇性) 移除此解決方案部署的 AWS 資源。

如果您想要刪除已佈建的產品,請遵循刪除佈建的產品 (Service Catalog 文件) 中的指示進行。

如果您要刪除此解決方案所建立的所有資源,請輸入下列命令。

sh uninstall.sh
AWS DevOps、 DevOps 工程師、應用程式開發者

相關資源

其他資訊

其他資訊

克隆存儲庫

輸入下列指令以從中複製儲存庫 GitHub。

git clone https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git

範例設定檔

以下是含有範例值的範例 config.json 檔案。

{ "portfolios": [ { "displayName": "EC2 Product Portfolio", "providerName": "User1", "description": "Test1", "roles": [ "<Names of IAM roles that can access the products>" ], "users": [ "<Names of IAM users who can access the products>" ], "groups": [ "<Names of IAM user groups that can access the products>" ] }, { "displayName": "Autoscaling Product Portfolio", "providerName": "User2", "description": "Test2", "roles": [ "<Name of IAM role>" ] } ], "tagOption": [ { "key": "Group", "value": [ "finance", "engineering", "marketing", "research" ] }, { "key": "CostCenter", "value": [ "01", "02", "03", "04" ] }, { "key": "Environment", "value": [ "dev", "prod", "stage" ] } ], "products": [ { "portfolioName": "EC2 Product Profile", "productName": "Ec2", "owner": "owner1", "productVersionName": "v1", "templatePath": "../../config/templates/template1.json" }, { "portfolioName": "Autoscaling Product Profile", "productName": "autoscaling", "owner": "owner1", "productVersionName": "v1", "templatePath": "../../config/templates/template2.json", "deployWithStackSets": { "accounts": [ "012345678901", ], "regions": [ "us-west-2" ], "stackSetAdministrationRoleName": "AWSCloudFormationStackSetAdministrationRole", "stackSetExecutionRoleName": "AWSCloudFormationStackSetExecutionRole" } } ] }