

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

# 在 Service Catalog 中定義產品的程式設計選項
<a name="options"></a>

使用 Service Catalog 佈建 AWS 基礎設施的兩個程式設計選項是 CloudFormation 範本或 AWS CDK。目前沒有用於定義 Service Catalog 產品的宣告式或無程式碼機制。

## CloudFormation 指令碼
<a name="cfn"></a>

CloudFormation 是用於佈建 AWS 基礎設施的已嘗試且真實的 IaC 原生指令碼語言。您可以在 中或使用 Visual Studio Code （或簡單文字編輯器） 和 () 等開發工具 AWS 管理主控台 來開發 CloudFormation AWS Command Line Interface 指令碼AWS CLI。

如需詳細資訊，請參閱 [CloudFormation 文件](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.html)。如需使用 CloudFormation 範本指定 Service Catalog 產品的詳細資訊，請參閱 [AWS::ServiceCatalog::CloudFormationProduct 資源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-cloudformationproduct.html)。 CloudFormation 

## 使用 的程式設計方法 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\_servicecatalog 模組提供。](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_servicecatalog-readme.html)

您可以使用 以多種方式 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)。