

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

# 的外部引擎 AWS Service Catalog
<a name="external-engine"></a>

在 中 AWS Service Catalog，*外部引擎*會透過 `EXTERNAL`產品類型來表示。`EXTERNAL` 產品類型允許整合第三方佈建引擎，例如 Terraform。您可以使用外部引擎，將 Service Catalog 的功能延伸到原生 AWS CloudFormation 範本之外，以使用其他教學做為程式碼 (IaC) 工具。

`EXTERNAL` 產品類型可讓您使用 Service Catalog 熟悉的界面管理和部署資源，同時利用所選 IaC 工具的特定功能和語法。

若要在 Service Catalog 中啟用`EXTERNAL`產品類型，您必須在帳戶中定義一組標準資源。這些資源稱為 *引擎*。Service Catalog 在成品剖析和佈建操作中的特定點將任務委派給引擎。

*佈建成品*代表 Service Catalog 內產品的特定版本，可讓您管理和部署一致的資源。

當您針對`EXTERNAL`產品類型的佈建成品呼叫 AWS Service Catalog[DescribeProvisioningArtifact](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_DescribeProvisioningArtifact.html) 或 [DescribeProvisioningParameters](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_DescribeProvisioningParameters.html) 操作時，Service Catalog 會在引擎中叫用 AWS Lambda 函數。這是從提供的佈建成品中擷取參數清單並將其傳回的必要項目 AWS Service Catalog。這些參數將在稍後做為佈建程序的一部分使用。

當您呼叫 [ProvisionProduct](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_ProvisionProduct.html) 佈建`EXTERNAL`佈建成品時，Service Catalog 會先在內部執行一些動作，然後將訊息傳送至引擎中的 Amazon SQS 佇列。接著，引擎會擔任提供的*啟動角色* （您指派給產品的 IAM 角色做為啟動限制）、根據提供的佈建成品佈建資源，以及叫用 [NotifyProvisionProductEngineWorkflowResult](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_NotifyProvisionProductEngineWorkflowResult.html) API 來報告成功或失敗。

[UpdateProvisionedProduct](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_UpdateProvisionedProduct.html) 和 [TerminateProvisionedProduct](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_TerminateProvisionedProduct.html) 的呼叫處理方式類似，每個呼叫都有不同的佇列和通知 APIs：
+ [NotifyProvisionProductEngineWorkflowResult](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_NotifyProvisionProductEngineWorkflowResult.html)
+ [NotifyUpdateProvisionedProductEngineWorkflowResult](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_NotifyUpdateProvisionedProductEngineWorkflowResult.html)
+ [NotifyTerminateProvisionedProductEngineWorkflowResult](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_NotifyTerminateProvisionedProductEngineWorkflowResult.html)。

**Topics**
+ [考量事項](#external-engine-considerations)
+ [參數剖析](#external-engine-parameters)
+ [佈建中](#external-engine-provisioning)
+ [更新中](#external-engine-updating)
+ [終止](#external-engine-terminating)
+ [標記](#external-engine-tagging)

## 考量事項
<a name="external-engine-considerations"></a>

**每個中樞帳戶僅限一個外部引擎**

每個 Service Catalog 中樞帳戶只能使用一個`EXTERNAL`佈建引擎。Service Catalog 中*hub-and-spoke*模型允許中樞帳戶建立基準產品並共用產品組合，同時輻條帳戶匯入產品組合並利用產品。

此限制是 ，因為 `EXTERNAL`只能路由到帳戶中的一個引擎。如果管理員想要擁有多個外部引擎，管理員必須在不同的中樞帳戶中設定外部引擎 （以及產品組合和產品）。

**外部引擎僅支援具有啟動限制的啟動角色**

`EXTERNAL` 佈建成品僅支援使用使用啟動*限制*條件指定的啟動角色進行佈建。啟動限制條件會指定 Service Catalog 在最終使用者啟動、更新或終止產品時所擔任的 IAM 角色。如需啟動限制的詳細資訊，請參閱[AWS Service Catalog 啟動限制](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/constraints-launch.html)。

## 參數剖析
<a name="external-engine-parameters"></a>

`EXTERNAL` 佈建成品可以是任何格式。這表示建立`EXTERNAL`產品類型時，引擎需要從提供的佈建成品中擷取參數清單，並將其傳回 Service Catalog。這可透過在您的帳戶中建立 Lambda 函數來完成，該函數可接受下列請求格式、處理佈建成品，並傳回下列回應格式。

**重要**  
Lambda 函數必須命名為 `ServiceCatalogExternalParameterParser`。

**請求語法：**

```
{
    "artifact": {
        "path": "string",
        "type": "string"
    },
    "launchRoleArn": "string"
}
```


****  

| **欄位** | **類型** | **必要** | **Description** | 
| --- | --- | --- | --- | 
| 成品 | object | 是 | 要剖析之成品的詳細資訊。 | 
| 成品/路徑 | string | 是 | 剖析器從中下載成品的位置。例如，對於 AWS\$1S3，這是 Amazon S3 URI。 | 
| 成品/類型 | string | 是 | 成品類型。允許的值：AWS\$1S3。 | 
| launchRole | string | 否 | 下載成品時要擔任之啟動角色的 Amazon Resource Name (ARN)。如果未提供啟動角色，則會使用 Lambda 的執行角色。 | 

**回應語法：**

```
{
    "parameters": [
        {
            "key": "string"
            "defaultValue": "string",
            "type": "string",
            "description": "string",
            "isNoEcho": boolean
        },
    ]
}
```


****  

| **欄位** | **類型** | **必要** | **Description** | 
| --- | --- | --- | --- | 
| parameters | 列出 | 是 | Service Catalog 要求最終使用者在佈建產品或更新佈建產品時提供的參數清單。如果成品中未定義參數，則會傳回空白清單。 | 
| 金鑰 | string | 是 | 參數索引鍵。 | 
| defaultValue | string | 否 | 如果最終使用者未提供值，則為 參數的預設值。 | 
| type | string | 是 | 引擎參數值的預期類型。例如，字串、布林值或映射。允許的值專屬於每個引擎。Service Catalog 會將每個參數值以字串形式傳遞至引擎。 | 
| 描述 | string | 否 | 參數的描述。建議這易於使用。 | 
| isNoEcho | 布林值 | 編號 | 判斷日誌中是否未回應參數值。預設值為 false （參數值會回應）。 | 

## 佈建中
<a name="external-engine-provisioning"></a>

對於 [ProvisionProduct](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_ProvisionProduct.html) 操作，Service Catalog 會將資源的實際佈建委派給引擎。引擎負責連接您選擇的 IaC 解決方案 （例如 Terraform)，以佈建成品中定義的資源。引擎也負責通知 Service Catalog 結果。

Service Catalog 會將所有佈建請求傳送至您帳戶中名為 的 Amazon SQS 佇列`ServiceCatalogExternalProvisionOperationQueue`。

**請求語法：**

```
{
    "token": "string",
    "operation": "string",
    "provisionedProductId": "string",
    "provisionedProductName": "string",
    "productId": "string",
    "provisioningArtifactId": "string",
    "recordId": "string",
    "launchRoleArn": "string",
    "artifact": {
        "path": "string",
        "type": "string"
    },
    "identity": {
        "principal": "string",
        "awsAccountId": "string",
        "organizationId": "string"
    },
    "parameters": [
        {
            "key": "string",
            "value": "string"
        }
    ],
    "tags": [
        {
            "key": "string",
            "value": "string"
        }
    ]
}
```


****  

| **欄位** | **類型** | **必要** | **Description** | 
| --- | --- | --- | --- | 
| token | string | 是 | 識別此操作的字符。權杖必須傳回 Service Catalog，以通知執行結果。 | 
| operation | string | 是 | 此欄位必須PROVISION\$1PRODUCT用於此操作。 | 
| provisionedProductId | string | 是 | 佈建產品的 ID。 | 
| provisionedProductName | string | 是 | 佈建產品的名稱。 | 
| productId | string | 是 | 產品的 ID。 | 
| provisioningArtifactId | string | 是 | 佈建成品的 ID。 | 
| recordId | string | 是 | 此操作的 Service Catalog 記錄 ID。 | 
| launchRoleArn | string | 是 | 用於佈建資源之 IAM 角色的 Amazon Resource Name (ARN)。 | 
| 成品 | object | 是 | 定義如何佈建資源的成品詳細資訊。 | 
| 成品/路徑 | string | 是 | 引擎從中下載成品的位置。例如，對於 AWS\$1S3，這是 Amazon S3 URI。 | 
| 成品/類型 | string | 是 | 成品類型。允許的值：AWS\$1S3。 | 
| 身分 | string | 否 | 目前未使用 欄位。 | 
| parameters | 列出 | 是 | 使用者輸入 Service Catalog 做為此操作輸入的參數鍵值對清單。 | 
| 標籤 | 列出 | 是 | 使用者輸入 Service Catalog 做為標籤的 key-value-pairs 清單，以套用至佈建的資源。 | 

**工作流程結果通知：**

使用 API 詳細資訊頁面上指定的回應物件叫用 [NotifyProvisionProductEngineWorkflowResult ](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_NotifyProvisionProductEngineWorkflowResult .html) API。

## 更新中
<a name="external-engine-updating"></a>

針對 [UpdateProvisionedProduct](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_UpdateProvisionedProduct.html) 操作，Service Catalog 會將資源的實際更新委派給引擎。引擎負責與您選擇的 IaC 解決方案 （例如 Terraform) 連接，以更新成品中定義的資源。引擎也負責通知 Service Catalog 結果。

Service Catalog 會將所有更新請求傳送至您帳戶中名為 的 Amazon SQS 佇列`ServiceCatalogExternalUpdateOperationQueue`。

**請求語法：**

```
{
    "token": "string",
    "operation": "string",
    "provisionedProductId": "string",
    "provisionedProductName": "string",
    "productId": "string",
    "provisioningArtifactId": "string",
    "recordId": "string",
    "launchRoleArn": "string",
    "artifact": {
        "path": "string",
        "type": "string"
    },
    "identity": {
        "principal": "string",
        "awsAccountId": "string",
        "organizationId": "string"
    },
    "parameters": [
        {
            "key": "string",
            "value": "string"
        }
    ],
    "tags": [
        {
            "key": "string",
            "value": "string"
        }
    ]
}
```


****  

| **欄位** | **類型** | **必要** | **Description** | 
| --- | --- | --- | --- | 
| token | string | 是 | 識別此操作的字符。權杖必須傳回 Service Catalog，以通知執行結果。 | 
| operation | string | 是 | 此欄位必須UPDATE\$1PROVISION\$1PRODUCT用於此操作。 | 
| provisionedProductId | string | 是 | 佈建產品的 ID。 | 
| provisionedProductName | string | 是 | 佈建產品的名稱。 | 
| productId | string | 是 | 產品的 ID。 | 
| provisioningArtifactId | string | 是 | 佈建成品的 ID。 | 
| recordId | string | 是 | 此操作的 Service Catalog 記錄 ID。 | 
| launchRoleArn | string | 是 | 用於佈建資源之 IAM 角色的 Amazon Resource Name (ARN)。 | 
| 成品 | object | 是 | 定義如何佈建資源的成品詳細資訊。 | 
| 成品/路徑 | string | 是 | 引擎從中下載成品的位置。例如，對於 AWS\$1S3，這是 Amazon S3 URI。 | 
| 成品/類型 | string | 是 | 成品類型。允許的值：AWS\$1S3。 | 
| 身分 | string | 否 | 目前未使用 欄位。 | 
| parameters | 列出 | 是 | 使用者輸入 Service Catalog 做為此操作輸入的參數鍵值對清單。 | 
| 標籤 | 列出 | 是 | 使用者輸入 Service Catalog 做為標籤的 key-value-pairs 清單，以套用至佈建的資源。 | 

**工作流程結果通知：**

使用 API 詳細資訊頁面上指定的回應物件叫用 [NotifyUpdateProvisionedProductEngineWorkflowResult](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_NotifyUpdateProvisionedProductEngineWorkflowResult.html) API。

## 終止
<a name="external-engine-terminating"></a>

對於 [TerminateProvisionedProduct](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_TerminateProvisionedProduct.html) 操作，Service Catalog 會將實際終止的資源委派給引擎。引擎負責與您選擇的 IaC 解決方案 （例如 Terraform) 連接，以終止成品中定義的資源。引擎也負責通知 Service Catalog 結果。

Service Catalog 會將所有終止請求傳送至您帳戶中名為 的 Amazon SQS 佇列`ServiceCatalogExternalTerminateOperationQueue`。

**請求語法：**

```
{
    "token": "string",
    "operation": "string",
    "provisionedProductId": "string",
    "provisionedProductName": "string",
    "recordId": "string",
    "launchRoleArn": "string",
    "identity": {
        "principal": "string",
        "awsAccountId": "string",
        "organizationId": "string"
    }
}
```


****  

| **欄位** | **類型** | **必要** | **Description** | 
| --- | --- | --- | --- | 
| token | string | 是 | 識別此操作的字符。權杖必須傳回 Service Catalog，以通知執行結果。 | 
| operation | string | 是 | 此欄位必須TERMINATE\$1PROVISION\$1PRODUCT用於此操作。 | 
| provisionedProductId | string | 是 | 佈建產品的 ID。 | 
| provisionedProductName | string | 是 | 佈建產品的名稱。 | 
| recordId | string | 是 | 此操作的 Service Catalog 記錄 ID。 | 
| launchRoleArn | string | 是 | 用於佈建資源之 IAM 角色的 Amazon Resource Name (ARN)。 | 
| 身分 | string | 否 | 目前未使用 欄位。 | 

**工作流程結果通知：**

使用 API 詳細資訊頁面上指定的回應物件叫用 [NotifyTerminateProvisionedProductEngineWorkflowResult](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_NotifyTerminateProvisionedProductEngineWorkflowResult.html) API。

## 標記
<a name="external-engine-tagging"></a>

若要透過資源群組管理標籤，您的啟動角色需要下列其他許可陳述式：

```
{
    "Effect": "Allow",
    "Action": [
        "resource-groups:CreateGroup",
        "resource-groups:ListGroupResources"
    ],
    "Resource": "*"
},
{
    "Effect": "Allow",
    "Action": [
        "tag:GetResources",
        "tag:GetTagKeys",
        "tag:GetTagValues",
        "tag:TagResources",
        "tag:UntagResources"
    ],
    "Resource": "*"
}
```

**注意**  
啟動角色還需要對成品中特定資源的標記許可，例如 `ec2:CreateTags`。