

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

# 用于在 Service Catalog 中定义产品的编程选项
<a name="options"></a>

使用 Service Catalog 配置 AWS 基础架构的两个编程选项是 CloudFormation模板或 AWS CDK。当前，没有用于定义 Service Catalog 产品的声明式或无代码机制。

## CloudFormation 脚本
<a name="cfn"></a>

CloudFormation 是一种久经考验的 IaC 原生脚本语言，用于配置 AWS 基础架构。您可以使用诸如 Visual Studio Code（ AWS 管理控制台 或简单的文本编辑器）和 () 之类的开发工具在或中 AWS Command Line Interface 开发 CloudFormation 脚本。AWS CLI

有关详情，请参阅 [CloudFormation 文档](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.html)。有关使用 CloudFormation 模板指定 Service Catalog 产品的更多信息，请参阅 CloudFormation 文档中的[AWS::ServiceCatalog::CloudFormationProduct 资源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-cloudformationproduct.html)。

## 采用编程方法 AWS CDK
<a name="cdk"></a>

 AWS CDK 提供了一个优雅而强大的面向对象的编程框架，用于使用多种编程语言来定义和维护 AWS 基础架构。您可以使用 AWS CDK 为类框架开发面向对象、细粒度的自定义项和扩展。 AWS AWS CDK 适用于想要针对更复杂的基础架构需求 AWS 服务 进行定制且具有必要编程技能和经验的用户。

要使用实施 Service Catalog 解决方案 AWS CDK，您可以使用内置的 Service Catalog 类来定义您的产品和产品组合。这些类由 AWS CDK [aws-cdk-lib.aws\_](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_servicecatalog-readme.html) servicecatalog 模块提供。

您可以通过多种方式使用 AWS CDK 来实现产品。为了避免在中为产品编写配置模板 CloudFormation 并保持可重用性，我们建议您使用该 AWS CDK [ProductStack类](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_servicecatalog.ProductStack.html)来表示配置模板。`ProductStack`实例是您以编程方式向其添加资源的 AWS CDK 堆栈。例如，您可以添加 S3 存储桶、IAM 角色或 Amazon CloudWatch 日志。当您通过调用将该`ProductStack``servicecatalog.CloudFormationProduct`实例作为其配置模板添加到已定义的实例时`servicecatalog.CloudFormationTemplate.fromProductStack (<ProductStack instance>)`，会 AWS CDK 自动生成该 CloudFormation模板。

以下是 Amazon S3 产品的 Java `ProductStack` 实现示例。

```
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as cdk from 'aws-cdk-lib';
 
class S3BucketProduct extends servicecatalog.ProductStack {
  constructor(scope: Construct, id: string) {
    super(scope, id);
 
    new s3.Bucket(this, 'BucketProduct');
  }
}
 
const product = new servicecatalog.CloudFormationProduct(this, 'Product', {
  productName: "My Product",
  owner: "Product Owner",
  productVersions: [
    {
      productVersionName: "v1",
      cloudFormationTemplate: servicecatalog.CloudFormationTemplate.fromProductStack(new S3BucketProduct(this, 'S3BucketProduct')),
    },
  ],
});
```

 AWS CDK 提供了内置的持续集成和持续部署 (CI/CD) 管道。您可以自定义这些内置管线和软件开发生命周期（SDLC）流程，以满足您自己的流程标准和目标。

自定义 AWS CDK 类可以继承其他类以提供专门的函数，而一个类可以由其他类的实例组成。如果您使用共享 AWS CDK 类框架来实现多个 Service Catalog 产品，请考虑任何版本控制或兼容性影响，尤其是在多个开发团队之间。您必须确保更改向后兼容，或者您​​具有要遵循的版本控制方案，以便您为一个产品所做的类别更改不会破坏另一个产品。

有关详情，请参阅 [AWS CDK 文档](https://docs.aws.amazon.com/cdk/v2/guide/home.html)。