

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

# 使用企业蓝图工厂
<a name="using-factory"></a>

本节可帮助您在环境中创建、更新或删除蓝图。它提供了在蓝图的整个[生命周期](architecture-blueprint-lifecycle.md)中对其进行管理的详细说明。

[要创建或更新自定义蓝图，必须了解如何创建 IaC 模板，例如 AWS CloudFormation[模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)或 AWS Cloud Development Kit (AWS CDK) 构造。](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html)本指南不包括有关如何定义通过企业蓝图工厂发布的蓝图的信息或说明。

## 先决条件
<a name="using-factory-prereqs"></a>

以下是在您的 AWS 环境中使用企业蓝图工厂的先决条件：
+ AWS Command Line Interface (AWS CLI)，[已安装](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)并[配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ 担任 `ServiceCatalogEndUserRole` AWS Identity and Access Management (IAM) 角色的权限
+  CloudFormation 模板或 AWS CDK 构造

## 创建蓝图
<a name="using-factory-create"></a>

企业蓝图工厂管道部署您在配置文件中定义的蓝图。开发人员通过将配置文件合并到配置存储库中来启动配置管道。然后，企业蓝图工厂使用将蓝图作为产品部署`ServiceCatalogLaunchConstraintRole`到 Service Catalog 中。有关创建蓝图时配置管道和发布管道执行的操作的更多信息，请参阅本指南中的[蓝图创建](architecture-blueprint-lifecycle.md#architecture-blueprint-lifecycle-create)。

**将蓝图添加到产品存储库中**

1. 确保已按照本指南中设置企业蓝图工厂中的说明[设置企业蓝图工厂](setup.md)。

1. 确认该`ServiceCataloglogLaunchConstraintRole`角色的策略允许您配置蓝图中定义的资源。

1. 在产品存储库 (`ServiceCatalog-BlueprintProductRepo`) 中，为新蓝图创建一个文件夹。

1. 将 IaC 模板（CloudFormation 模板或 AWS CDK 构造）粘贴到您创建的文件夹中。

1. 在你创建的文件夹中创建一个名为 p **roduct\_config.json** 的文件。

1. 打开 produc **t\_config.json** 文件，然后将以下内容粘贴到文件中：

   ```
   {
       "SchemaVersion": "1.0",
       "ProductVersionName": "1.0.1",
       "Deprecated_Versions" : [],
       "ProductVersionDescription": "<description>",
       "ProductType": "CLOUD_FORMATION_TEMPLATE",
       "Properties": {
           "TemplateFilePath": "./<folder name>/<file name>"
       }
   }
   ```

   其中：
   + `<description>`是对蓝图版本的简要描述
   + `<folder name>`是您在产品存储库中创建的文件夹的名称
   + `<file name>`是 IaC 模板的名称
**注意**  
您可以更新架构版本或产品版本名称以符合您组织的政策。

1. 保存并关闭 produc **t\_config.json 文件**。

1. 输入以下命令将更改合并到产品存储库中：

   ```
   cd ServiceCatalog-BlueprintProductRepo
   git add <folder name>/<file name> <folder name>\product_config.json
   git commit -m "The first version of <file name> blueprint"
   git push origin main
   ```

**更新配置文件**

1. 在配置存储库 (`ServiceCatalog-ConfigRepo`) 中，打开 **config.yml 文件。**

1. 根据需要编辑新蓝图的`portfolios``products`部分和部分。有关更多信息，请参阅本指南中的[配置文件](architecture-components.md#architecture-config-file)。

1. 保存并关闭 **config.yml 文件。**

1. 输入以下命令将更改合并到配置存储库中：

   ```
   cd ServiceCatalog-ConfigRepo
   git add config.yml
   git commit -m "<description of change>"
   git push origin main
   ```

   批准此拉取请求将启动配置管道。配置管道为产品创建发布管道。

**查看部署日志**

1. 登录企业蓝图工厂管理帐户。

1. 打开 [AWS CodePipeline 管理控制台](https://console.aws.amazon.com/codesuite/codepipeline/home)。

1. 在**名称**中，选择产品的发布渠道。默认情况下，管道名称为`BluePrint_<Product-Name>-<CloudFormation-Stack-Name>`。

1. 选择 **View history (查看历史记录)**。

1. 查看管道的状态和阶段执行。有关状态的更多信息，请参阅 CodePipeline 文档中的[查看执行状态](https://docs.aws.amazon.com/codepipeline/latest/userguide/executions-view.html#pipelines-executions-status-console)。

1. 如果管道出现故障，请查看失败原因。有关如何为管道配置监控的说明，请参阅 CodePipeline 文档中的[监控管道](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring.html)。如果发布管道因 cfn-lint 或 cfn\_nag 检查而失败，请更正模板中的错误。向产品存储库提交另一个拉取请求。这将重新启动发布管道。有关更正模板错误的更多信息，请参阅本指南中的 “[疑难解答](#using-factory-troubleshooting)” 部分。

1. 等到发布管道状态变为`Succeeded`。

**验证部署**

1. 登录组织中的消费者账户。

1. 担任 I `ServiceCatalogEndUserRole` AM 角色。

1. 打开 S [ervice Catalog 控制台](https://console.aws.amazon.com/servicecatalog/)。

1. 在导航窗格中，选择**产品**。

1. 确认新产品在产品列表中可用。

## 更新蓝图
<a name="using-factory-update"></a>

有关配置管道和发布管道在创建蓝图时执行的操作的更多信息，请参阅本指南中的[蓝图更新](architecture-blueprint-lifecycle.md#architecture-blueprint-lifecycle-update)。

**更新蓝图**

1. 在产品存储库中，导航到该产品的文件夹。

1. 粘贴更新后的 IaC 模板。确保文件名与先前版本相同。

1. 打开 p **roduct\_config.json 文件**。

1. 对于`ProductVersionName`，请更新版本号。

1. 如果要防止将来部署先前的产品版本，对于`Deprecated_Versions`，请在逗号分隔的列表中输入以前的版本号。

1. 输入以下命令将更改合并到产品存储库中：

   ```
   cd ServiceCatalog-BlueprintProductRepo
   git add <folder name>/<file name> <folder name>\product_config.json
   git commit -m "Version <number> of <file name> blueprint"
   git push origin main
   ```

   批准此拉取请求将启动产品的发布渠道。

**查看部署日志**

1. 登录企业蓝图工厂管理帐户。

1. 打开 [AWS CodePipeline 管理控制台](https://console.aws.amazon.com/codesuite/codepipeline/home)。

1. 在**名称**中，选择发布管道。默认情况下，管道名称为`BluePrint_<Product-Name>-<CloudFormation-Stack-Name>`。

1. 选择 **View history (查看历史记录)**。

1. 查看管道的状态和阶段执行。有关状态的更多信息，请参阅 CodePipeline 文档中的[查看执行状态](https://docs.aws.amazon.com/codepipeline/latest/userguide/executions-view.html#pipelines-executions-status-console)。

1. 如果管道出现故障，请查看失败原因。有关如何为管道配置监控的说明，请参阅 CodePipeline 文档中的[监控管道](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring.html)。如果发布管道因 cfn-lint 或 cfn\_nag 检查而失败，请更正模板中的错误。向产品存储库提交另一个拉取请求。这将重新启动发布管道。有关更正模板错误的更多信息，请参阅本指南中的 “[疑难解答](#using-factory-troubleshooting)” 部分。

1. 等到发布管道状态变为`Succeeded`。

**验证更新**

1. 登录组织中的消费者账户。

1. 担任 I `ServiceCatalogEndUserRole` AM 角色。

1. 打开 S [ervice Catalog 控制台](https://console.aws.amazon.com/servicecatalog/)。

1. 在导航窗格中，选择**产品**。

1. 确认新产品版本在产品列表中可用。

## 删除蓝图
<a name="using-factory-delete"></a>

删除产品时，Service Catalog 会从包含该产品的每个产品组合中删除所有产品版本。有关更多信息，请参阅 Service Catalog 文档中的[删除产品](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/productmgmt-delete.html)。有关配置管道和发布管道在创建蓝图时执行的操作的更多信息，请参阅本指南中的[蓝图删除](architecture-blueprint-lifecycle.md#architecture-blueprint-lifecycle-delete)。

**删除蓝图**

1. 在配置存储库中，打开 **config.yml 文件。**

1. 编辑产品分区，删除或注释您要删除的产品。

1. 保存并关闭 **config.yml 文件。**

1. 输入以下命令将更改合并到配置存储库中：

   ```
   cd ServiceCatalog-ConfigRepo
   git add config.yml
   git commit -m "<description of change>"
   git push origin main
   ```

   批准此拉取请求将启动配置管道。配置管道会删除产品及其发布管道。

1. 在产品存储库中，删除产品的文件夹，包括其内容。

1. 输入以下命令将更改合并到产品存储库中：

   ```
   cd ServiceCatalog-BlueprintProductRepo
   git add .
   git commit -m "Delete <file name> blueprint"
   git push origin main
   ```

**验证删除**

1. 登录组织中的消费者账户。

1. 担任 I `ServiceCatalogEndUserRole` AM 角色。

1. 打开 S [ervice Catalog 控制台](https://console.aws.amazon.com/servicecatalog/)。

1. 在导航窗格中，选择**产品**。

1. 确认已删除的产品不再可用。

## 故障排除
<a name="using-factory-troubleshooting"></a>

创建或更新蓝图时，cfn-lint 和 cfn-nag 工具会验证蓝图。有关发布管道中验证的更多信息，请参阅本指南中的[发布管道](architecture-components.md#architecture-release-pipeline)。任何报告的语法或安全错误都会导致管道失败。 要通过发布管道成功部署蓝图，必须更正蓝图中的错误。

以下是输出示例，显示了两个与安全相关的错误，一个是失败错误，一个是警告。

```
BP-SNS.yml
---------------------------------------------------
BP-SNS.yml
---------------------------------------------------
| WARN W47
|
| Resource: ["ExampleTopic"]
| Line numbers: [5]
|
| SNS Topic should specify KmsMasterKeyId property
---------------------------------------------------
| FAIL F18
|
| Resource: ["ExampleTopicPolicy"]
| Line numbers: [10]
|
| SNS topic policy should not allow * principal

Failures count: 1
Warnings count: 1
```

要更正这些错误，在蓝图文件中，您需要替换亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 主题策略中的`*`委托人，并将AWS KMS() 密钥与 AWS Key Management Service 该主题关联。以下代码示例演示了这些更新。

```
ExampleTopic:
    Type: AWS::SNS::Topic  
    Properties:
      TopicName: ExampleTopic
  ExampleTopicPolicy:
    Type: AWS::SNS::TopicPolicy
    Properties: 
      KmsMasterKeyId: alias/aws/sns  # Added KMS key
      PolicyDocument:
        Id: Id1
        Version: '2012-10-17'
        Statement:
        - Sid: Sid2
          Effect: Allow
          Principal:            
            "Service" : "s3.amazonaws.com"  # Replaced "AWS": '*'
          Action: 'sns:Publish'
          Resource: !Ref ExampleTopic
      Topics: 
        - !Ref ExampleTopic
```