

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

# 使用 GitLab CI/CD 部署 Terraform、AWS CDK 和 CloudFormation 範本
<a name="using-gitlab-cicd"></a>

DPA 包含 GitLab CI/CD 範本，您用作部署 Terraform AWS Cloud Development Kit (AWS CDK)和 CloudFormation IaC 程式碼的建置區塊。本節說明此使用案例的下列項目：
+ 標準化管道結構
+ 可重複使用的階段和任務
+ 管道結構規則
+ 用於安全性掃描的整合式工具

## 先決條件
<a name="prerequisites-gitlab-cicd"></a>
+ 作用中 AWS 帳戶
+ 使用 IaC 範本佈建資源的許可
+ 具有支援 GitLab CI/CD 功能的任何類型的免授權、高級或企業版本的 GitLab 帳戶
+ 設定為使用特定 Docker 映像執行任務的 GitLab 必要執行器

## 工具
<a name="tools-gitlab-cicd"></a>
+ [cdk\$1nag](https://github.com/cdklabs/cdk-nag#readme) 是一種開放原始碼工具，使用規則套件的組合來檢查 AWS CDK 應用程式是否符合最佳實務。
+ [AWS CloudFormation Linter (cfn-lint)](https://github.com/aws-cloudformation/cfn-lint) 是一種 linter，可根據[AWS CloudFormation 資源規格](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html)檢查 CloudFormation YAML 或 JSON 範本。它也會執行其他檢查，例如檢查資源屬性的有效值，以及是否遵守最佳實務。
+ [cfn\$1nag](https://github.com/stelligent/cfn_nag) 是一種開放原始碼工具，可透過搜尋模式來識別 CloudFormation 範本中的潛在安全問題。
+ [Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) 是一種靜態程式碼分析工具，可檢查 IaC 的安全性和合規性設定錯誤。
+ [將基礎設施保持為程式碼安全 (KICS)](https://github.com/Checkmarx/kics) 是一種開放原始碼工具，可在開發週期的早期識別安全漏洞、合規問題和基礎設施設定錯誤。
+ [tfsec](https://github.com/aquasecurity/tfsec) 是一種靜態程式碼分析工具，可檢查 Terraform 程式碼是否有潛在的錯誤設定。

## 指示
<a name="instructions-gitlab-cicd"></a>

1. 複製`gitlab-ci`目錄並將其託管到您的 GitLab 組織群組。

1. 確定應用程式可以存取包含 DPA 範本的 GitLab 組織群組。

1. 對於應用程式，請包含管道的 DPA 特定進入點，如下所示：
   + Terraform

     ```
       include:
           - project: <GITLAB_GROUP_PATH/<REPOSITORY_NAME>
             ref: main # best practise to create release tag and use the same 
             file: gitlab-ci/entrypoints/gitlab/terraform-infrastructure.yml
     ```
   + AWS CDK

     ```
       include:
           - project: <GITLAB_GROUP_PATH/<REPOSITORY_NAME>
             ref: main # best practise to create release tag and use the same 
             file: gitlab-ci/entrypoints/gitlab/cdk-infrastructure.yml
     ```
   + CloudFormation

     ```
       include:
           - project: <GITLAB_GROUP_PATH/<REPOSITORY_NAME>
             ref: main # best practise to create release tag and use the same 
             file: gitlab-ci/entrypoints/gitlab/cf-infrastructure.yml
     ```

1. 對於應用程式，請定義下列變數，以便在 `DEV`和 `INTEGRATION` 環境上啟用部署。

   ```
     AWS_REGION: us-east-2 # region where deployment should happen
     DEV_AWS_ACCOUNT: 123456789012 # Dev environment AWS account number
     DEV_ARN_ROLE: arn:aws:iam::123456789012:role/dpa-gitlab-access-role # IAM role ARN that will be used to provision resources in Dev 
     DEV_DEPLOY: "true" # true / false to enable deployment to DEV environment
     DEV_ENV: "dev" # Dev environment name
     INT_AWS_ACCOUNT: 123456789012 # Integration environment AWS account number
     INT_ARN_ROLE: arn:aws:iam::123456789012:role/dpa-gitlab-access-role # IAM role ARN that will be used to provision resources in Integration 
     INT_DEPLOY: "true" # true / false to enable deployment to Integration environment
     INT_ENV: "int" # Integration environment name
   ```