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

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

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

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

環境:PoC 或試行

技術:基礎設施; DevOps

工作負載:所有其他工作負載

AWS 服務:AWSService Catalog;Amazon EC2

Summary

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

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

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

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

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

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

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

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶。

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

  • AWS 無伺服器應用程式模型命令列介面 SAM (AWS CLI),已安裝

  • AWS 命令列介面 (AWS CLI),已安裝設定

  • Go,已安裝

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

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

架構

目標技術堆疊

  • AWS Service Catalog

  • AWS Lambda

目標架構

從程式碼儲存庫在 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 Amazon Macie Organization Setup using Terraform 儲存庫中的組態。不需要在此儲存庫中使用程式碼範例。

最佳實務

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

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

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

史詩

任務描述所需的技能

(選用) 安裝 Docker。

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

DevOps 工程師

安裝適用於 Terraform 的 AWS Service Catalog Engine。

  1. 輸入下列命令來複製 AWS Terraform 儲存庫的 Service Catalog Engine

    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 管理主控台,然後開啟開發人員工具主控台。您可以選擇 AWS CodePipeline、 或 等服務AWS CodeCommit來存取開發人員工具主控台AWS CodeDeploy。

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

  3. 選擇建立連線

  4. 選取您維護 Terraform 原始程式碼的儲存庫。例如,您可以選擇 Bitbucket GitHubGitHub 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. 開啟 AWS Identity and Access Management (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. 在導覽窗格中,選擇 Portfolios

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

  5. 組合詳細資訊頁面上,選擇限制索引標籤,然後選擇建立限制。

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

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

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

  9. 選擇 Create (建立)。

AWS 管理員

授予對產品的存取權。

  1. 開啟 AWS Service Catalog 主控台

  2. 在導覽窗格中,選擇 Portfolios

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

  4. 選擇存取索引標籤,然後選擇授予存取權。

  5. 選擇角色索引標籤,然後選擇應有權部署此產品的角色。

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

AWS 管理員

啟動產品。

  1. 以具有部署 Service Catalog 產品許可的使用者身分登入 AWS 管理主控台。

  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 管理主控台,然後開啟 AWS Step Functions 主控台

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

  3. 選擇 ManageProvisionedProductStateMachine

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

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

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

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

刪除佈建的產品。

  1. 以具有部署 Service Catalog 產品許可的使用者身分登入 AWS 管理主控台。

  2. 開啟 AWS Service Catalog 主控台

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

  4. 選取您建立的產品。

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

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

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

DevOps 工程師

移除 Terraform 的 AWS Service Catalog Engine。

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

  2. 開啟 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*" ] } } } ] }