使用 自動化 AWS Service Catalog 產品組合和產品部署 AWS CDK - AWS 方案指引

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

使用 自動化 AWS Service Catalog 產品組合和產品部署 AWS CDK

由 Sandeep Gawande (AWS)、 RAJNEESH TYAGI (AWS) 和 Viyoma Sachdeva (AWS) 建立

程式碼儲存庫: aws-cdk-servicecatalog-automation

環境:PoC 或試行

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

工作負載:開放原始碼

AWS 服務:AWSService 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 庫管理已佈建產品的標籤。TagOption 是 AWS Service Catalog 中管理的鍵值對。它不是 AWS 標籤,但可做為根據 建立AWS標籤的範本 TagOption。如需詳細資訊,請參閱TagOption 程式庫 (服務目錄文件)。

先決條件和限制

先決條件

  • 您想要用作來源帳戶的作用中AWS帳戶,以管理 Service Catalog 產品組合。

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

  • AWS Identity and Access Management (IAM) 存取 AWS Service CatalogAWS CloudFormation、 和 AWS 的許可IAM。

產品版本

  • AWS CDK 2.27.0 版

架構

目標技術堆疊

  • 集中AWS帳戶中的服務目錄產品組合

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

目標架構

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

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

  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 Cloud 基礎設施。

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

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

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

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

程式碼儲存庫

此模式的程式碼可在 GitHub儲存aws-cdk-servicecatalog-automation庫的 上取得。程式碼儲存庫包含下列檔案和資料夾:

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

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

  • config/config.json – 此檔案包含所有組態資訊。您可以更新此檔案,針對您的使用案例自訂此解決方案。

  • 組態/範本 – 此資料夾包含 Service Center 產品的 CloudFormation 範本。

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

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

若要使用範例程式碼,請遵循 Epics 區段中的指示。

最佳實務

史詩

任務描述所需的技能

安裝 AWS CDK Toolkit。

請確定已安裝 AWS CDK Toolkit。輸入下列命令以確認是否已安裝,並檢查版本。 

cdk --version

如果未安裝 AWS CDK Toolkit,請輸入下列命令進行安裝。

npm install -g aws-cdk@2.27.0

如果 AWS CDK Toolkit 版本早於 2.27.0,請輸入下列命令以將其更新至 2.27.0 版。

npm install -g aws-cdk@2.27.0 --force
AWS DevOps, DevOps engineer

複製儲存庫。

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

git clone <repository-URL>.git

這會在目標目錄中建立cd aws-cdk-servicecatalog-automation資料夾。輸入下列命令以導覽至此資料夾。

cd aws-cdk-servicecatalog-automation
AWS DevOps, DevOps engineer

設定AWS憑證。

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

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

AWS 的 憑證是透過環境變數AWSCDK提供。

AWS DevOps, DevOps engineer

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

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

AWS DevOps, DevOps engineer

設定 所需的IAM角色 StackSets。

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

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

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

AWS DevOps, DevOps engineer
任務描述所需的技能

建立 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使用者具有長期憑證,這會造成安全風險。為了協助降低此風險,建議您只為這些使用者提供執行任務所需的許可,並在不再需要這些使用者時將其移除。

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

  • (選用) 在 tagOption 區段中, TagOptions 定義 產品的 :

    • key – TagOption 金鑰的名稱

    • value – 允許的字串值 TagOption

    如需詳細資訊,請參閱TagOption 程式庫 (服務目錄文件)。

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

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

    • productName – 產品的名稱。

    • owner – 產品的擁有者。

    • productVersionName – 字串值中產品版本的名稱,例如 v1

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

    • deployWithStackSets – (選用) 指定一或多個帳戶和區域,以便用來 StackSets 自動佈建產品組合中的產品。如果您使用此部署選項,則本節中的所有下列參數都是必要的:

      • accounts – 目標帳戶。

      • regions – 目標區域。

      • stackSetAdministrationRoleName – 用於管理 StackSets 組態IAM的角色名稱。請不要變更此值。此角色必須具有此確切名稱。

      • stackSetExecutionRoleName – 部署堆疊執行個體的目標帳戶中IAM的角色名稱。請不要變更此值。此角色必須具有此確切名稱。

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

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

部署解決方案。

輸入以下命令。這會部署AWSCDK應用程式並佈建 Service Catalog 產品組合和產品,如 config.json 檔案中所指定。

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

驗證部署。

執行下列動作來驗證成功部署:

  1. 使用憑證登入 AWS 管理主控台,該憑證可存取您在組態檔案中定義的一或多個產品組合。

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

  3. 在導覽窗格中的佈建 下,選擇產品 。確認您看到您為產品組合指定的產品清單。

  4. 請遵循啟動產品 (服務型錄文件) 中的指示,以啟動其中一個可用的產品。確認可用的產品版本和標籤與您在組態檔案中提供的值相符。

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

    1. 使用憑證登入,該憑證可讓您檢視其中一個目標帳戶中的佈建產品。

    2. 在服務目錄主控台的導覽窗格中,在佈建 下,選擇佈建產品

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

一般 AWS

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

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

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

  2. 視需要在config/template資料夾中新增或修改任何 CloudFormation 範本。

  3. 重新部署解決方案。

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

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

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

如果您想要刪除已佈建的產品,請遵循刪除已佈建產品 (服務目錄文件) 中的指示。

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

sh uninstall.sh
AWS DevOps、 DevOps engineer、應用程式開發人員

相關資源

其他資訊

其他資訊

複製儲存庫

輸入下列命令,從 複製儲存庫 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" } } ] }