AWS Service Catalog 使用程式碼儲存庫在 中佈建 Terraform 產品 - AWS 方案指引

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

AWS Service Catalog 使用程式碼儲存庫在 中佈建 Terraform 產品

由 Dr. Rahul Sharad Gaikwad (AWS) 和 Tamilselvan P (AWS) 建立

Summary

AWS Service Catalog 支援自助式佈建,並控管 HashiCorp Terraform 組態。如果您使用 Terraform,則可以使用 Service Catalog 做為單一工具, AWS 在 內大規模組織、管理和分發 Terraform 組態。您可以存取 Service Catalog 金鑰功能,包括將標準化和預先核准的基礎設施編目為程式碼 (IaC) 範本、存取控制、具有最低權限存取的雲端資源佈建、版本控制、共用到數千個 AWS 帳戶和標記。例如工程師、資料庫管理員和資料科學家等最終使用者,會看到他們可存取的產品和版本清單,而且可以透過單一動作部署。

此模式可協助您使用 Terraform 程式碼部署 AWS 資源。儲存 GitHub 庫中的 Terraform 程式碼可透過 Service Catalog 存取。使用此方法,您可以將產品與現有的 Terraform 工作流程整合。管理員可以建立 Service Catalog 產品組合,並使用 Terraform 將 AWS Launch Wizard 產品新增至這些產品組合。

以下是此解決方案的優點:

  • 由於 Service Catalog 中的復原功能,如果在部署期間發生任何問題,您可以將產品還原至先前的版本。

  • 您可以輕鬆識別產品版本之間的差異。這可協助您解決部署期間的問題。

  • 您可以在 Service Catalog 中設定儲存庫連線,例如 至 GitHub 或 GitLab。您可以直接透過儲存庫進行產品變更。

如需 整體優勢的相關資訊 AWS Service Catalog,請參閱什麼是 Service Catalog

先決條件和限制

先決條件

  • 作用中 AWS 帳戶。

  • 包含ZIP格式 Terraform 組態檔案的 GitHub BitBucket或其他儲存庫。

  • AWS Serverless Application Model 命令列界面 (AWS SAM CLI),已安裝

  • AWS Command Line Interface (AWS CLI),已安裝設定

  • Go,已安裝

  • Python 3.9 版已安裝。 AWS SAM CLI 需要此版本的 Python。

  • 寫入和執行 AWS Lambda 函數的許可,以及存取和管理 Service Catalog 產品和產品組合的許可。

架構

從程式碼儲存庫在 Service Catalog 中佈建 Terraform 產品的架構圖

該圖顯示以下工作流程:

  1. 當 Terraform 組態就緒時,開發人員會建立包含所有 Terraform 程式碼的 .zip 檔案。開發人員會將 .zip 檔案上傳至連線至 Service Catalog 的程式碼儲存庫。

  2. 管理員將 Terraform 產品與 Service Catalog 中的產品組合建立關聯。管理員也會建立啟動限制條件,以允許使用者佈建產品。

  3. 在服務目錄中,最終使用者使用 Terraform 組態啟動 AWS 資源。他們可以選擇要部署的產品版本。

工具

AWS 服務

  • AWS Lambda 是一項運算服務,可協助您執行程式碼,無需佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需支付您使用的運算時間。

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

其他服務

  • Go 是 Google 支援的開放原始碼程式設計語言。

  • Python 是一種一般用途的電腦程式設計語言。

程式碼儲存庫

如果您需要可透過 Service Catalog 部署的 Terraform 組態範例,您可以使用 GitHub 使用 Terraform 儲存庫的Amazon Macie Organization Setup 中的組態。不需要在此儲存庫中使用程式碼範例。

最佳實務

  • 透過 Service Catalog 啟動產品時,請設定變數值,而不是在 Terraform 組態檔案中提供變數的值 (terraform.tfvars)。

  • 僅將產品組合的存取權授予特定使用者或管理員。

  • 遵循最低權限原則,並授予執行任務所需的最低許可。如需詳細資訊,請參閱 AWS Identity and Access Management (IAM) 文件中的授予最低權限安全最佳實務

史詩

任務描述所需的技能

(選用) 安裝 Docker。

如果您想要在開發環境中執行 AWS Lambda 函數,請安裝 Docker。如需相關說明,請參閱 Docker 文件中的安裝 Docker 引擎

DevOps 工程師

安裝適用於 Terraform 的 AWS Service Catalog 引擎。

  1. 輸入下列命令來複製適用於 AWS Service Catalog Terraform 儲存庫的引擎

    git clone https://github.com/aws-samples/service-catalog-engine-for-terraform-os.git
  2. 導覽至複製儲存庫的根目錄。

  3. 輸入以下命令。這會安裝引擎。

    run ./bin/bash/deploy-tre.sh -r

    在自動安裝期間,不會使用預設設定檔中的 AWS 區域 集。反之,您可以在執行此命令時提供 區域。

DevOps 工程師、AWS管理員
任務描述所需的技能

建立與 GitHub 儲存庫的連線。

  1. 登入 AWS Management Console,然後開啟開發人員工具主控台。您可以選擇 AWS CodePipeline 或 等服務來存取開發人員工具主控台 AWS CodeDeploy。

  2. 在左側導覽窗格中,選擇設定,然後選擇連線

  3. 選擇建立連線

  4. 選取您維護 Terraform 原始程式碼的儲存庫。例如,您可以選擇 BitbucketGitHubGitHub Enterprise Server

  5. 輸入連線的名稱,然後選擇連線

  6. 系統提示您時,請驗證儲存庫。

    身分驗證完成後,會建立連線,並將狀態變更為作用中

AWS 管理員
任務描述所需的技能

建立 Service Catalog 產品。

  1. 開啟 AWS Service Catalog 主控台

  2. 導覽至管理區段,然後選擇產品清單

  3. 選擇建立產品

  4. 產品詳細資訊區段的建立產品頁面上,選擇外部產品類型。 Service Catalog 使用此產品類型來支援 Terraform Community Edition 產品。

  5. 輸入 Service Catalog 產品的名稱和擁有者。

  6. 選取使用 CodeStar 提供者指定程式碼儲存庫

  7. 輸入儲存庫的下列資訊:

    • 使用 連線至您的提供者 AWS CodeConnections – 選取您先前建立的連線。

    • 儲存庫 – 選取儲存庫。

    • 分支 – 選取分支。

    • 範本檔案路徑 – 選擇儲存程式碼範本檔案的路徑。檔案名稱應以 結尾tar.gz

  8. 版本名稱和描述下,提供產品版本的相關資訊。

  9. 選擇建立產品

AWS 管理員

建立組合。

  1. 開啟 AWS Service Catalog 主控台

  2. 導覽至管理區段,然後選擇產品組合

  3. 選擇建立產品組合

  4. 輸入下列值:

    • 產品組合名Sample terraform

    • 產品組合描述Sample portfolio for Terraform configurations

    • 擁有者 – 您的聯絡資訊,例如電子郵件地址

  5. 選擇 Create (建立)。

AWS 管理員

將 Terraform 產品新增至產品組合。

  1. 開啟 AWS Service Catalog 主控台

  2. 導覽至管理區段,然後選擇產品清單

  3. 選取您先前建立的 Terraform 產品。

  4. 選擇動作,然後選擇將產品新增至產品組合

  5. 選擇Sample terraform產品組合。

  6. 選擇將產品新增至產品組合

AWS 管理員

建立存取政策。

  1. 開啟 AWS Identity and Access Management (IAM) 主控台

  2. 在導覽窗格上選擇 Policies (政策)

  3. 在內容窗格中,選擇 Create policy (建立政策)

  4. 選擇 JSON 選項。

  5. 在此模式的額外資訊區段中輸入存取政策中的範例JSON政策。

  6. 選擇 Next (下一步)

  7. 檢閱和建立頁面上的政策名稱方塊中,輸入 TerraformResourceCreationAndArtifactAccessPolicy

  8. 選擇 建立政策

AWS 管理員

建立自訂信任政策。

  1. 開啟 IAM 主控台

  2. 在導覽窗格中,選擇 Roles (角色)。

  3. 選擇 Create Role (建立角色)。

  4. 信任的實體類型下,選擇自訂信任政策

  5. 在JSON政策編輯器中,在此模式的額外資訊區段中輸入信任政策中的範例JSON政策。

  6. 選擇 Next (下一步)

  7. 許可政策下,選擇您先前建立TerraformResourceCreationAndArtifactAccessPolicy的 。

  8. 選擇 Next (下一步)

  9. 角色詳細資訊下,於角色名稱方塊中,輸入 SCLaunch-product。 

    重要

     角色名稱必須以 開頭SCLaunch

  10. 選擇建立角色

AWS 管理員

將啟動限制新增至 Service Catalog 產品。

  1. 以具有管理許可的使用者 AWS Management Console 身分登入 。

  2. 開啟 AWS Service Catalog 主控台

  3. 在導覽窗格中,選擇產品組合

  4. 選擇您先前建立的產品組合。

  5. 文件夾詳細資訊頁面上,選擇限制條件標籤,然後選擇建立限制條件

  6. ForProduct,選取您先前建立的 Terraform 產品。

  7. 啟動限制下,針對方法,選擇輸入角色名稱

  8. 角色名稱方塊中,輸入 SCLaunch-product

  9. 選擇 Create (建立)。

AWS 管理員

授予產品存取權。

  1. 開啟 AWS Service Catalog 主控台

  2. 在導覽窗格中,選擇產品組合

  3. 選擇您先前建立的產品組合。

  4. 選擇Accesstab,然後選擇授予存取權

  5. 選擇 Rolestab,然後選擇應有權部署此產品的角色。

  6. 選擇 Grant access (授與存取權)

AWS 管理員

啟動產品。

  1. 以具有部署 Service Catalog 產品許可的使用者 AWS Management Console 身分登入 。

  2. 開啟 AWS Service Catalog 主控台

  3. 在導覽窗格中,選擇產品

  4. 選擇您先前建立的生產,然後選擇啟動產品

  5. 輸入產品名稱並定義任何必要的參數。

  6. ChooseLaunch 產品

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

驗證部署。

Service Catalog 佈建工作流程有兩個 AWS Step Functions 狀態機器:

  • ManageProvisionedProductStateMachine– Service Catalog 會在佈建新的 Terraform 產品和更新現有的 Terraform 佈建產品時呼叫此狀態機器。

  • TerminateProvisionedProductStateMachine– Service Catalog 會在終止現有的 Terraform 佈建產品時呼叫此狀態機器。

您可以檢查ManageProvisionedProductStateMachine狀態機器的日誌,以確認產品已佈建。

  1. 登入 AWS Management Console,然後開啟 AWS Step Functions 主控台

  2. 在左側導覽窗格中,選擇狀態機器

  3. 選擇ManageProvisionedProductStateMachine

  4. 執行清單中,輸入佈建的產品 ID 以尋找執行。

    注意

    狀態檔案後端儲存貯體名稱開頭為 sc-terraform-engine-state-

  5. 驗證已在帳戶中建立所有必要的資源。

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

刪除佈建的產品。

  1. 以具有部署 Service Catalog 產品許可的使用者 AWS Management Console 身分登入 。

  2. 開啟 AWS Service Catalog 主控台

  3. 在左側導覽中,選擇佈建的產品

  4. 選取您建立的產品。

  5. 動作清單中,選擇終止

  6. 在確認文字方塊中,輸入 terminate,然後選擇終止佈建的產品

  7. 重複這些步驟來終止所有佈建的產品。

DevOps 工程師

移除適用於 Terraform 的 AWS Service Catalog 引擎。

  1. 以具有管理許可的使用者 AWS Management Console 身分登入 。

  2. 開啟 Amazon Simple Storage Service (Amazon S3) 主控台

  3. 在導覽窗格中,選擇 儲存貯體

  4. 選取儲存sc-terraform-engine-logging-XXXX貯體。

  5. 選擇空白

  6. 針對下列儲存貯體重複步驟 4–5:

    • sc-terraform-engine-state-XXXX

    • terraform-engine-bootstrap-XXXX

  7. 開啟AWS CloudFormation 主控台,然後驗證您是否正確 AWS 區域。

  8. 在左側導覽中,選擇堆疊

  9. 選取 SAM-TRE,然後選擇刪除。等待堆疊刪除。

  10. 選取 Bootstrap-TRE,然後選擇刪除。等待堆疊刪除。

AWS 管理員

相關資源

AWS 文件

Terraform 文件

其他資訊

存取政策

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/servicecatalog:provisioning": "true" } } }, { "Action": [ "s3:CreateBucket*", "s3:DeleteBucket*", "s3:Get*", "s3:List*", "s3:PutBucketTagging" ], "Resource": "arn:aws:s3:::*", "Effect": "Allow" }, { "Action": [ "resource-groups:CreateGroup", "resource-groups:ListGroupResources", "resource-groups:DeleteGroup", "resource-groups:Tag" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "tag:GetResources", "tag:GetTagKeys", "tag:GetTagValues", "tag:TagResources", "tag:UntagResources" ], "Resource": "*", "Effect": "Allow" } ] }

信任政策

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GivePermissionsToServiceCatalog", "Effect": "Allow", "Principal": { "Service": "servicecatalog.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": [ "arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*" ] } } } ] }