

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 C GitLab I/CD 部署 Terraform、AWS CDK 和模板 CloudFormation
<a name="using-gitlab-cicd"></a>

DPA 包含 GitLab CI/CD 模板，您可以将其用作部署 Terraform 和 IaC 代码的构建块。 AWS Cloud Development Kit (AWS CDK) CloudFormation 本节介绍此用例的以下内容：
+ 标准化管道结构
+ 可重复使用的阶段和作业
+ 管道结构规则
+ 用于安全扫描的集成工具

## 先决条件
<a name="prerequisites-gitlab-cicd"></a>
+ 活跃的 AWS 账户
+ 使用 IaC 模板配置资源的权限
+ GitLab 拥有支持 GitLab CI/CD 功能的任何类型的免许可证、高级版或企业版的账户
+ GitLab 必需的运行器配置为使用特定 Docker 镜像运行作业

## 工具
<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)[资源规范检查 CloudFormation YAML 或 JSON 模板的 linter。AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html)它还会执行其他检查，例如检查资源属性的有效值以及是否遵守最佳实践。
+ [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
   ```