

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

# 在工作流程文件中使用動態變數
<a name="wfdoc-dynamic-vars"></a>

您可以使用工作流程文件中的動態變數來表示影像建立程序在執行時間變化的值。動態變數的字串插補可讓您在 JSON 字串等結構化內容中嵌入 JSONPath 表達式。當您需要在複雜的承載中將執行時間值傳遞至 `ExecuteStateMachine`或 等步驟動作時，此功能特別有用`WaitForAction`。

若要對動態變數使用字串插補，請在字串內容`"{{...}}"`中以雙大括號包裝 JSONPath 運算式。只有以雙大括號包裝的 JSONPath 表達式才會處理為變數。任何未包裝在雙大括號中的 JSONPath 表達式都會視為常值字串內容。

**JSONPath 動態工作流程變數語法**

```
$.<document structure>.[<step name>.]<variable name>
```

動態變數值以 JSONPath 選擇器表示，具有可唯一識別目標變數的結構節點。根目錄 (\$1) 之後的第一個節點是指工作流程文件結構，例如 `stepOutputs`，如果是 Image Builder 系統變數，則為 `imageBuilder`。下列清單包含支援的 JSONPath 工作流程文件結構節點。

**文件結構節點**
+ 參數 - 工作流程參數
+ stepOutputs - 來自相同工作流程文件中步驟的輸出
+ workflowOutputs - 已執行之工作流程文件的輸出
+ imagebuilder - Image Builder 系統變數

`parameters` 和 `stepOutputs` 文件結構節點包含步驟名稱的選用節點。這有助於確保所有步驟的唯一變數名稱。

JSONPath 中的最後一個節點是目標變數的名稱，例如 `instanceId`。

每個步驟都可以使用這些 JSONPath 動態變數來參考任何先前步驟動作的輸出。這也稱為*鏈結或參考*。若要參考先前步驟動作的輸出，您可以使用下列動態變數。

```
$.stepOutputs.step-name.output-name
```

**重要**  
當輸入參數參考動態變數時，鏈結指標 (`.$`) 必須連接到參數名稱的結尾。

**範例 1：輸入參數鏈結指標**

下列範例顯示輸入參數，其使用字串插補在執行時間解析參數值中的動態變數。

```
  - name: ApplyTestComponents
    action: ExecuteComponents
    onFailure: Abort
    inputs:
      instanceId.$: "$.stepOutputs.LaunchTestInstance.instanceId"
```

**範例 2：動態變數中的字串插補**

下列範例示範動態變數如何使用字串插補來判斷執行時間的值。

```
- name: ValidateImageConfiguration
  action: ExecuteStateMachine
  inputs:
    stateMachineArn: arn:aws:states:us-east-1:111122223333:stateMachine:ImageValidation
    input: |
      {
        "imageId": "{{ $.stepOutputs.CreateImageFromInstance.imageId }}",
        "region": "us-east-1",
        "buildDate": "{{ $.imagebuilder.dateTime }}",
        "instanceType": "{{ $.stepOutputs.LaunchStep.instanceType }}"
      }
```

在此範例中，以雙大括號包裝的 JSONPath 表達式會在執行時間解析：
+ `{{ $.stepOutputs.CreateImageFromInstance.imageId }}` - 從 CreateImageFromInstance 步驟解析為實際影像 ID
+ `{{ $.imagebuilder.dateTime }}` - 解決目前建置時間戳記的問題。[使用映像建置器系統變數](#wfdoc-ib-vars) 如需您可以使用的映像建置器系統變數清單，請參閱 。
+ `{{ $.stepOutputs.LaunchStep.instanceType }}` - 解析為 LaunchStep 中使用的執行個體類型

之類的常值字串`"region": "us-east-1"`保持不變。

**注意**  
字串插補適用於工作流程文件中的任何字串內容，包括使用 YAML 管道 (`|`) 運算子的多行字串。大括號需求可做為逸出機制，以清楚區分 JSONPath 變數和文字內容。

## 使用映像建置器系統變數
<a name="wfdoc-ib-vars"></a>

Image Builder 提供下列系統變數，您可以在工作流程文件中使用：


|  變數名稱  |  說明  |  Type  |  範例值  | 
| --- | --- | --- | --- | 
|  cloudWatchLogGroup  |  輸出日誌的 CloudWatch Logs 群組名稱。 格式：`/aws/imagebuilder/<recipe-name>`  |  String  |  `/aws/imagebuilder/sampleImageRecipe`  | 
|  cloudWatchLogStream  |  輸出日誌的 CloudWatch Logs 串流名稱。  |  String  |  *1.0.0/1*  | 
|  collectImageMetadata  |  指示 Image Builder 是否收集執行個體中繼資料的設定。  |  Boolean  |  `true` \$1 `false`  | 
|  collectImageScanFindings  |  可讓映像建置器收集映像掃描問題清單的設定的目前值。  |  Boolean  |  `true` \$1 `false`  | 
|  imageBuildNumber  |  映像的建置版本編號。  |  Integer  |  *1*  | 
|  imageId  |  基礎映像的 AMI ID。  |  String  |  *ami-1234567890abcdef1*  | 
|  imageName  |  影像的名稱。  |  String  |  *sampleImage*  | 
|  imageType  |  影像輸出類型。  |  String  |  `AMI` \$1 `Docker`  | 
|  imageVersionNumber  |  映像的版本編號。  |  String  |  *1.0.0*  | 
|  instanceProfileName  |  Image Builder 用來啟動建置和測試執行個體的執行個體描述檔角色名稱。  |  String  |  *SampleImageBuilderInstanceProfileRole*  | 
|  平台  |  建置映像的作業系統平台。  |  String  |  `Linux` \$1 `Windows` \$1 `MacOS`  | 
|  s3Logs  |  包含映像建置器寫入之 S3 日誌組態的 JSON 物件。  |  JSON 物件  |  \$1's3Logs'：\$1's3BucketName'： '*sample-bucket*'， 's3KeyPrefix'： '*ib-logs*'\$1\$1  | 
|  securityGroups  |  適用於建置和測試執行個體的安全群組 IDs。  |  列出 【字串】  |  *【sg-1234567890abcdef1、sg-11112222333344445】*  | 
|  sourceImageARN  |  工作流程用於建置和測試階段之映像建置器映像資源的 Amazon Resource Name (ARN)。  |  String  |  arn：aws：imagebuilder：*us-east-1*：*111122223333*：image/*sampleImage*/*1.0.0/1*  | 
|  subnetId  |  要啟動建置和測試執行個體的子網路 ID。  |  String  |  *subnet-1234567890abcdef1*  | 
|  terminateInstanceOnFailure  |  指示 Image Builder 在故障時終止執行個體或保留執行個體以進行故障診斷的設定的目前值。  |  Boolean  |  `true` \$1 `false`  | 
|  workflowPhase  |  正在執行工作流程的目前階段。  |  String  |  `Build` \$1 `Test`  | 
|  workingDirectory  |  工作目錄的路徑。  |  String  |  `/tmp`  | 