View a markdown version of this page

工作流程文件支援的步驟動作 - EC2 Image Builder

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

工作流程文件支援的步驟動作

本節包含 Image Builder 支援的步驟動作詳細資訊。

本節中使用的術語
AMI

Amazon Machine Image

ARN

Amazon Resource Name

下表顯示哪些工作流程階段支援每個步驟動作。核取記號 (X) 表示您可以在該階段使用步驟動作。Image Builder 會將一些動作限制在特定階段: ExecuteComponents 限制為建置和測試階段、 CollectImageScanFindings限制為測試階段, 限制DistributeImageModifyImageAttributesApplyImageConfigurationsDistributeContainerImage為分佈階段。您可以在任何階段使用任何其他動作。

步驟動作 建置 測試 發佈 備註
LaunchInstance X X X 啟動 Amazon EC2 執行個體。
BootstrapInstanceForContainer X X X AWS CLI 為容器建置安裝 Docker 和 。
ExecuteComponents X X 在執行個體上執行元件。僅限於建置和測試階段。
CollectImageMetadata X X X 僅限 AMI 組建。
RunSysPrep X X X Windows 組建。
SanitizeInstance X X X Linux AMI 建置;不適用於容器。
CreateImage X X X 從建置執行個體建立 AMI。
CreateImageFromIso X X X 從 ISO 磁碟映像建立 AMI。
RegisterImage X X X 從快照註冊 AMI。
DistributeContainerImage X 分佈容器映像。僅限於分佈階段。
CollectImageScanFindings X 收集影像掃描問題清單。僅限於測試階段。需要 Amazon Inspector 和映像掃描。
RunCommand X X X 執行 AWS Systems Manager (Systems Manager) 命令文件。
WaitForSSMAgent X X X 重新啟動後等待 Systems Manager 連線。
WaitForAction X X X 暫停外部動作。
ExecuteStateMachine X X X 執行 Step Functions 狀態機器。
TerminateInstance X X X 終止執行個體。例如,容器分佈工作流程會在推送映像後終止建置執行個體。
DistributeImage X 將 AMI 複製到區域和帳戶。僅限於分佈階段。
ModifyImageAttributes X 修改 AMI 啟動許可。僅限於分佈階段。
ApplyImageConfigurations X 套用啟動範本、授權、匯出、快速啟動和 Systems Manager 參數。僅限於分佈階段。
重要

單一工作流程會分配 AMIs 或容器映像,而非兩者。如果工作流程包含 DistributeContainerImage,也不能包含 DistributeImageModifyImageAttributesApplyImageConfigurations。這些 AMI 分佈動作在 Amazon EC2 AMIs 上操作,而在 Amazon Elastic Container Registry (Amazon ECR) 中的容器映像上DistributeContainerImage操作。

ApplyImageConfigurations

使用此步驟動作將各種組態和整合套用至分散式 AMIs,例如授權組態、啟動範本組態、S3 匯出組態、EC2 Fast Launch 組態和 Systems Manager 參數組態。組態僅適用於來源帳戶中的分散式映像,但可跨帳戶套用的 SSM 參數組態除外。

注意

configurations 輸入是選用的。如果您提供此功能,Image Builder 會使用工作流程輸入,並忽略連接的分佈組態。如果您省略它,Image Builder 會回到連接到管道或映像的分佈組態。

預設逾時:360 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。distributedImages.$ 輸入為必要項目。其餘資料列說明configurations陣列中每個項目內的欄位。

輸入名稱 Description (描述) Type 必要 預設 Constraints
distributedImages.$ 要設定的分散式映像清單。參考相同工作流程中DistributeImage步驟的distributedImages輸出。 String 開頭為 的 JSONPath 參考 $.stepOutputs.
configurations 要套用至分散式 AMIs的組態清單。每個項目都以一個 AWS 區域為目標。 陣列
組態:區域 要設定的分散式 AMI AWS 區域。 String 中每個項目的必要項目configurations
組態:licenseConfigurationArns 映像的授權組態 ARN。 陣列
configuration:launchTemplateConfigurations 要套用至分散式 AMIs的啟動範本組態。 陣列
configuration:launchTemplateConfigurations:launchTemplateId 要套用至映像的啟動範本 ID。 String launchTemplateConfigurations,如果已指定
configuration:launchTemplateConfigurations:accountId 要套用至映像的啟動範本帳戶 IDs。 String
configuration:launchTemplateConfigurations:setDefaultVersion 映像的啟動範本預設版本設定。 Boolean
configuration:s3ExportConfiguration 分散式 AMIs的 Amazon S3 匯出組態。 陣列
configuration:s3ExportConfiguration:roleName 映像的 Amazon S3 匯出組態角色名稱。 String s3ExportConfiguration,如果已指定
configuration:s3ExportConfiguration:diskImageFormat 映像的 Amazon S3 匯出組態磁碟映像格式。 String s3ExportConfiguration,如果已指定 允許的值 - VMDK|RAW|VHD
configuration:s3ExportConfiguration:s3Bucket 映像的 Amazon S3 匯出組態儲存貯體名稱。 String s3ExportConfiguration,如果已指定
configuration:s3ExportConfiguration:s3Prefix 映像的 Amazon S3 匯出組態儲存貯體字首。 String
configuration:fastLaunchConfigurations 映像的 Amazon EC2 Fast Launch 組態。 陣列
configuration:fastLaunchConfigurations:enabled 映像是否已啟用 Amazon EC2 Fast Launch。 Boolean fastLaunchConfigurations,如果已指定
configuration:fastLaunchConfigurations:snapshotConfiguration 預先佈建 Amazon EC2 Fast Launch 快照的快照組態。 Map
configuration:fastLaunchConfigurations:snapshotConfiguration:targetResourceCount 映像的 Amazon EC2 Fast Launch 目標資源計數。 Integer
configuration:fastLaunchConfigurations:maxParallelLaunches 映像的 Amazon EC2 Fast Launch 平行啟動上限。 Integer
configuration:fastLaunchConfigurations:launchTemplate Amazon EC2 Fast Launch 用來準備預先佈建快照的啟動範本。 Map
configuration:fastLaunchConfigurations:launchTemplate:launchTemplateId 映像的 Amazon EC2 Fast Launch 啟動範本 ID。 String
configuration:fastLaunchConfigurations:launchTemplate:launchTemplateName 映像的 Amazon EC2 Fast Launch 啟動範本名稱。 String
configuration:fastLaunchConfigurations:launchTemplate:launchTemplateVersion 映像的 Amazon EC2 Fast Launch 啟動範本版本。 String
configuration:ssmParameterConfigurations 映像的 Systems Manager 參數組態。 Map
configuration:ssmParameterConfigurations:amiAccountId 映像的 Systems Manager 參數 AMI 帳戶 ID。 String
configuration:ssmParameterConfigurations:parameterName 映像的 Systems Manager 參數名稱。 String ssmParameterConfigurations,如果已指定
configuration:ssmParameterConfigurations:dataType 映像的 Systems Manager 參數資料類型。 String 允許的值 - text|aws:ec2:image)

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
configuredImages 已設定映像的清單。 陣列
configuredImages:accountId 分散式映像的目的地帳戶 ID。 String
configuredImages:name AMI 的名稱。 String
configuredImages:amiId 分散式映像的 AMI ID。 String
configuredImages:dateStarted 分佈開始的 UTC 時間。 String
configuredImages:dateStopped 分佈完成時的 UTC 時間。 String
configuredImages:step 分佈停止的步驟。 已完成|AssociateLicensesRunning|UpdateLaunchTemplateRunning|PutSsmParametersRunning|UpdateFastLaunchConfiguration|ExportAmiQueued|ExportAmiRunning
configuredImages:region 分散式映像 AWS 的區域。 String
configuredImages:status 分佈狀態。 已完成 | 失敗 | 取消 | TimedOut
configuredImages:errorMessage 錯誤訊息,如果有的話。 String

範例

在工作流程文件中指定步驟動作。

- name: ApplyImageConfigurations action: ApplyImageConfigurations onFailure: Abort inputs: distributedImages.$: $.stepOutputs.DistributeImageStep.distributedImages configurations: - region: us-west-2 licenseConfigurationArns: - arn:aws:license-manager:us-west-2:111122223333:license-configuration:lic-example

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.ApplyImageConfigurationsStep.configuredImages

BootstrapInstanceForContainer

此步驟動作會執行服務指令碼,以最低需求引導執行個體執行容器工作流程。Image Builder 使用 Systems Manager API sendCommand中的 來執行此指令碼。如需詳細資訊,請參閱AWS Systems Manager 執行命令

注意

引導指令碼會安裝 AWS CLI 和 Docker 套件,這些套件是 Image Builder 成功建置 Docker 容器的先決條件。如果您未包含此步驟動作,映像建置可能會失敗。

預設逾時:60 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
instanceId 要引導的執行個體 ID。 String 這必須是啟動此工作流程執行個體之工作流程步驟的輸出執行個體 ID。

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
runCommandId 在執行個體上執行sendCommand引導指令碼的 Systems Manager ID。 String
status 從 Systems Manager 傳回的狀態sendCommand String
output 從 Systems Manager 傳回的輸出sendCommand String

範例

在工作流程文件中指定步驟動作。

- name: ContainerBootstrapStep action: BootstrapInstanceForContainer onFailure: Abort inputs: instanceId.$: $.stepOutputs.LaunchStep.instanceId

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.ContainerBootstrapStep.status

CollectImageMetadata

此步驟動作僅適用於建置工作流程。

EC2 Image Builder 會在啟動的 EC2 執行個體上執行 AWS Systems Manager (Systems Manager) Agent,以建置和測試您的映像。Image Builder 會收集有關 Systems Manager 庫存建置階段期間所用執行個體的其他資訊。此資訊包括作業系統 (OS) 名稱和版本,以及您作業系統報告的套件清單及其個別版本。

注意

此步驟動作僅適用於建立 AMIs的影像。

預設逾時:30 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:Image Builder 會回復此步驟期間建立的任何 Systems Manager 資源。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
instanceId 要套用中繼資料設定的建置執行個體。 String 這必須是啟動此工作流程建置執行個體之工作流程步驟的輸出執行個體 ID。

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
osVersion 從建置執行個體收集的作業系統名稱和版本。 String
associationId 用於庫存收集的 Systems Manager 關聯 ID。 String

範例

在工作流程文件中指定步驟動作。

- name: CollectMetadataStep action: CollectImageMetadata onFailure: Abort inputs: instanceId: $.stepOutputs.LaunchStep.instanceId

使用工作流程文件中步驟動作的輸出。

$.stepOutputs.CollectMetadataStep.osVersion

CollectImageScanFindings

如果您的帳戶已啟用 Amazon Inspector,且您的管道已啟用映像掃描,此步驟動作會收集 Amazon Inspector 為您的測試執行個體回報的映像掃描問題清單。此步驟動作不適用於建置工作流程。

預設逾時:120 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
instanceId 執行掃描之執行個體的 ID。 String 這必須是啟動此工作流程執行個體之工作流程步驟的輸出執行個體 ID。

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
runCommandId sendCommand 執行指令碼以收集問題清單的 Systems Manager ID。 String
status 從 Systems Manager 傳回的狀態sendCommand String
output 從 Systems Manager 傳回的輸出sendCommand String

範例

在工作流程文件中指定步驟動作。

- name: CollectFindingsStep action: CollectImageScanFindings onFailure: Abort inputs: instanceId.$: $.stepOutputs.LaunchStep.instanceId

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.CollectFindingsStep.status

CreateImage

此步驟動作會使用 Amazon EC2 CreateImage API 從執行中的執行個體建立映像。在建立過程中,步驟動作會視需要等待,以確認資源已達到正確的狀態,再繼續執行。

預設逾時:720 分鐘

最大逾時:3 天 (259,200 秒)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
instanceId 要從中建立新映像的執行個體。 String 此步驟開始時,所提供執行個體 ID 的執行個體必須處於 running 狀態。

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
imageId 建立之映像的 AMI ID。 String

範例

在工作流程文件中指定步驟動作。

- name: CreateImageFromInstance action: CreateImage onFailure: Abort inputs: instanceId.$: "i-1234567890abcdef0"

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.CreateImageFromInstance.imageId

CreateImageFromIso

使用此步驟動作,從建置執行個體上的 ISO 磁碟映像建立 Amazon Machine Image (AMI)。當您的來源是 ISO 檔案而非基礎 AMI 時,請在建置工作流程中使用它。Image Builder 會將 ISO 轉換為 AMI,並等待資源達到所需狀態再繼續。

注意

此動作具有與匯入 ISO 磁碟映像相同的需求。如需詳細資訊,請參閱使用映像建置器匯入已驗證的 Windows ISO 磁碟映像

預設逾時:720 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
instanceId 存放 ISO 磁碟映像的建置執行個體 ID。 String 這必須是啟動此工作流程建置執行個體之工作流程步驟的輸出執行個體 ID。

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
amiName 步驟建立的 AMI 名稱。 String
snapshotId 支援 AMI 的快照 ID。 String
架構 AMI 的架構 (x86_64arm64)。 String

範例

在工作流程文件中指定步驟動作。

- name: CreateImageFromIsoStep action: CreateImageFromIso onFailure: Abort inputs: instanceId.$: $.stepOutputs.LaunchStep.instanceId

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.CreateImageFromIsoStep.amiName

DistributeContainerImage

使用此步驟動作,將建置階段建立的容器映像分發至為映像定義之目標區域中的 Amazon ECR 儲存庫。在容器 (DOCKER) 映像的分佈工作流程中使用此動作。它可做為 的容器映像對應項目DistributeImage

此步驟動作會在建置執行個體上執行 Systems Manager 命令,以推送容器映像。執行個體必須 AWS CLI 已安裝 Docker 和 。如需詳細資訊,請參閱BootstrapInstanceForContainer

重要

包含 的工作流程也DistributeContainerImage不能包含 DistributeImageModifyImageAttributesApplyImageConfigurations。單一工作流程會分配容器映像或 AMIs,而非兩者。

預設逾時:120 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
instanceId 存放容器映像的建置執行個體 ID。 String 這必須是啟動此工作流程建置執行個體之工作流程步驟的輸出執行個體 ID。

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
status 從 Systems Manager 傳回的狀態sendCommand String
succeededRegions 分佈成功的區域。 陣列
failedRegions 分佈失敗的區域。 陣列

範例

在工作流程文件中指定步驟動作。

- name: DistributeContainer action: DistributeContainerImage onFailure: Abort inputs: instanceId.$: $.stepOutputs.LaunchStep.instanceId

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.DistributeContainer.status

DistributeImage

此步驟動作會將 AMI 分佈到您指定的目標區域和帳戶。它使用來自 CreateImageCreateImagePipeline請求的分佈組態,或工作流程中覆寫預設組態的自訂分佈設定。

注意

distributions 輸入是選用的。如果您提供此功能,Image Builder 會使用工作流程輸入,並忽略連接的分佈組態。如果您省略它,Image Builder 會回到連接到管道或映像的分佈組態。

預設逾時:360 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
分佈 AMI 的分佈設定,做為清單。每個項目都以一個 AWS 區域為目標。如果您省略此輸入,Image Builder 會使用連接到管道或映像的分佈組態。 陣列
分佈:區域 AWS 要分發 AMI 的區域。 String 長度下限為 1。長度上限為 1024。
分佈:名稱 要套用至分散式 AMI 的名稱。 String
分佈:描述 要套用至分散式 AMI 的描述。 String
distributions:targetAccountIds 要分發 AMI 的目標帳戶 IDs。 陣列
distributions:amiTags 要套用至分散式 AMI 的標籤。 Map 最多 50 個標籤。
distributions:kmsKeyId 用來加密分散式 AMI 的 KMS 金鑰。 String

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
distributedImages 分散式映像的清單 陣列
distributedImages:region 分散式映像 AWS 的區域。 String
distributedImages:name AMI 的名稱。 String
distributedImages:amiId 分散式映像的 AMI ID。 String
distributedImages:accountId 分散式映像的目的地帳戶 ID。 String
distributedImages:dateStarted 分佈開始的 UTC 時間。 String
distributedImages:dateStopped 分佈完成時的 UTC 時間。 String
distributedImages:status 分佈狀態。 已完成 | 失敗 | 取消 | TimedOut
distributedImages:step 分佈停止的步驟。 已完成|CopyAmiRunning
distributedImages:errorMessage 錯誤訊息,如果有的話。 String

範例

在工作流程文件中指定步驟動作。

- name: DistributeImage action: DistributeImage onFailure: Abort inputs: distributions: - region.$: "$.parameters.SourceRegion" description: "AMI distribution to source region" amiTags: DistributionTest: "SourceRegion" WorkflowStep: "DistributeToSourceRegion" BuildDate: "{{imagebuilder:buildDate:yyyyMMHHss}}" BuildVersion: "{{imagebuilder:buildVersion}}"

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.DistributeImageStep.distributedImages

ExecuteComponents

此步驟動作會針對正在建置的目前映像,執行配方中指定的元件。建置工作流程會在建置執行個體上執行建置元件。測試工作流程只會在測試執行個體上執行測試元件。

Image Builder 使用 Systems Manager API sendCommand中的 來執行元件。如需詳細資訊,請參閱AWS Systems Manager 執行命令

預設逾時:720 分鐘

最大逾時:1 天 (24 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
instanceId 元件應執行的執行個體 ID。 String 這必須是啟動此工作流程執行個體之工作流程步驟的輸出執行個體 ID。

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
runCommandId 在執行個體上執行sendCommand元件的 Systems Manager ID。 String
status 從 Systems Manager 傳回的狀態sendCommand String
output 從 Systems Manager 傳回的輸出sendCommand String

範例

在工作流程文件中指定步驟動作。

- name: ExecComponentsStep action: ExecuteComponents onFailure: Abort inputs: instanceId: $.stepOutputs.LaunchStep.instanceId

使用工作流程文件中步驟動作的輸出。

$.stepOutputs.ExecComponentsStep.status

ExecuteStateMachine

此步驟動作會從映像建置器工作流程開始執行 AWS Step Functions 狀態機器。Image Builder 使用 Step Functions StartExecution API 啟動狀態機器並等待其完成。這有助於將複雜的工作流程、合規驗證或認證程序整合到您的映像建置管道。

如需詳細資訊,請參閱《 AWS Step Functions 開發人員指南》中的了解 Step Functions 中的狀態機器

預設逾時:6 小時

最大逾時:24 小時

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
stateMachineArn 要執行之 Step Functions 狀態機器的 ARN。 String 必須是有效的狀態機器 ARN。
input 要提供給狀態機器的 JSON 輸入資料。 String {} 必須是有效的 JSON 字串,長度上限為:16 KiB。

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
executionArn 狀態機器執行的 ARN。 String
output 狀態機器執行的輸出。 String

所需的 IAM 許可

您的自訂執行角色必須具有下列許可,才能使用此步驟動作:

允許動作
  • states:StartExecution

  • states:DescribeExecution

指定資源
  • arn:aws:states:us-west-2:111122223333:stateMachine:state-machine-name

  • arn:aws:states:us-west-2:111122223333:execution:state-machine-name:*

範例

在工作流程文件中指定步驟動作。

- name: ValidateImageCompliance action: ExecuteStateMachine timeoutSeconds: 3600 onFailure: Abort inputs: stateMachineArn: arn:aws:states:us-west-2:111122223333:stateMachine:ImageComplianceValidation input: | { "imageId": "{{ $.stepOutputs.CreateImageFromInstance.imageId }}", "region": "us-west-2", "complianceLevel": "high", "requiredScans": ["cve", "benchmark", "configuration"] }

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.ValidateImageCompliance.executionArn

LaunchInstance

使用此步驟動作在 中啟動執行個體 AWS 帳戶。動作會等到執行個體符合指定的運作狀態檢查條件,且 Systems Manager 代理程式正在執行,再繼續進行下一個步驟。啟動動作會使用來自配方和基礎設施組態資源的設定。例如,要啟動的執行個體類型來自基礎設施組態。輸出是啟動之執行個體的執行個體 ID。

waitFor 輸入會設定滿足步驟完成要求的條件。healthCheck 輸入指定在步驟繼續之前必須通過的 EC2 執行個體運作狀態驗證層級。

預設逾時:75 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:對於建置執行個體,回復會執行您在基礎設施組態資源中設定的動作。根據預設,如果映像建立失敗,則會終止建置執行個體。不過,基礎設施組態中有一項設定,可保留建置執行個體以進行故障診斷。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
imageIdOverride 用來啟動執行個體的映像 String

組建階段:映像配方基礎映像

測試階段:從建置階段輸出 AMI

必須是有效的 AMI ID
instanceTypesOverride Image Builder 會嘗試清單中的每個執行個體類型,直到找到成功啟動的執行個體 字串的清單 基礎設施組態中指定的執行個體類型 必須是有效的執行個體類型
waitFor 在完成工作流程步驟並繼續進行下一個步驟之前等待的條件 String Image Builder 支援 ssmAgent
healthCheck 工作流程步驟繼續之前所需的 EC2 運作狀態驗證層級。指定 RUNNING 以最少的驗證加快建置,或STATUS_CHECK_PASSED等待 EC2 狀態檢查通過。 String STATUS_CHECK_PASSED 有效值:RUNNING | STATUS_CHECK_PASSED

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
instanceId 啟動之執行個體的執行個體 ID。 String

範例

在工作流程文件中指定步驟動作。

- name: LaunchStep action: LaunchInstance onFailure: Abort inputs: healthCheck: "RUNNING" waitFor: ssmAgent

使用工作流程文件中步驟動作的輸出。

$.stepOutputs.LaunchStep.instanceId

ModifyImageAttributes

使用此步驟動作來修改分散式 AMIs的屬性,例如啟動許可和其他 AMI 屬性。它在已分發至目標區域和帳戶的 AMIs 上運作。

注意

attributes 輸入是選用的。如果您提供此功能,Image Builder 會使用工作流程輸入,並忽略連接的分佈組態。如果您省略它,Image Builder 會回到連接到管道或映像的分佈組態。

預設逾時:120 分鐘

最大逾時:180 分鐘 (3 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
distributedImages.$ 要修改的分散式映像清單。參考相同工作流程中DistributeImage步驟的distributedImages輸出。 String 開頭為 的 JSONPath 參考 $.stepOutputs.
屬性 要修改的影像屬性,做為清單。每個項目都以一個 AWS 區域為目標。 陣列
屬性:區域 要修改之分散式 AMI AWS 的區域。 String 中每個項目的必要項目attributes
attributes:launchPermission 要套用至分散式 AMI 的啟動許可設定。 Map
attributes:launchPermission:userIds 要從 AMI 的啟動許可新增或移除的帳戶 IDs。 陣列
attributes:launchPermission:userGroups 要從 AMI 的啟動許可新增或移除的使用者群組。 陣列
attributes:launchPermission:organizationArns 要從 AMI 的啟動許可新增或移除的 AWS Organizations ARNs。 陣列
attributes:launchPermission:organizationalUnitArns 要在 AMI 啟動許可中新增或移除的組織單位 (OU) ARNs。 陣列

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
modifiedImages 修改後的映像清單 陣列
modifiedImages:accountId 分散式映像的目的地帳戶 ID。 String
modifiedImages:name AMI 的名稱。 String
modifiedImages:amiId 分散式映像的 AMI ID。 String
modifiedImages:dateStarted 分佈開始的 UTC 時間。 String
modifiedImages:dateStopped 分佈完成時的 UTC 時間。 String
modifiedImages:step 分佈停止的步驟。 已完成|ModifyAmiRunning
modifiedImages:region 影像 AWS 的區域。 String
modifiedImages:status 分佈狀態。 已完成 | 失敗 | 取消 | TimedOut
modifiedImages:errorMessage 錯誤訊息,如果有的話。 String

範例

在工作流程文件中指定步驟動作。

- name: ModifyImageAttributes action: ModifyImageAttributes onFailure: Abort inputs: distributedImages.$: $.stepOutputs.DistributeImageStep.distributedImages attributes: - region: us-west-2 launchPermission: userIds: - "111122223333"

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.ModifyImageAttributesStep.modifiedImages

RegisterImage

此步驟動作會使用 Amazon EC2 RegisterImage API 註冊新的 Amazon Machine Image (AMI)。 RegisterImage 它可讓您從現有的快照或一組快照建立 AMI,並指定各種影像屬性。

預設逾時:540 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
架構 AMI 的架構。 String 有效值:i386、x86_64、arm64、x86_64_mac、arm64_mac
blockDeviceMapping AMI 的區塊型設備映射項目。 陣列
bootMode AMI 的開機模式。 String 有效值: legacy-bios、uefi、uefi-preferred
description AMI 的說明。 String
enaSupport 是否已啟用與 ENA 的增強型聯網。 Boolean
imageLocation AMI 資訊清單的位置。 String S3-backed AMIs
imdsSupport IMDSv2 支援層級。 String 有效值:v2.0
includeSnapshotTags 是否包含區塊型設備映射中定義之第一個快照的標籤。 Boolean FALSE

設為 true 時,標籤會包含如下:

  • blockDeviceMapping 清單中第一個 EBS 磁碟區中包含 SnapshotId的 標籤SnapshotId會與輸出 AMI 標籤合併。

  • 輸出 AMI 標籤優先於具有相同金鑰的快照標籤。

  • AWS 預留標籤 (索引鍵開頭為 的標籤aws:) 會自動排除。

  • 如果定義SnapshotId了具有 的多個 EBS 磁碟區,則只會SnapshotId包含清單中第一個 EBS 磁碟區的標籤。

kernelId 要使用的核心 ID。 String
ramdiskId 要使用的 RAM 磁碟 ID。 String
rootDeviceName 根裝置的裝置名稱。 String 範例:/dev/sda1
sriovNetSupport 使用 Intel 82599 VF 介面增強聯網。 String
tpmSupport TPM 版本支援。 String 有效值:v2.0
uefiData Base64-encoded的 UEFI 資料。 String
virtualizationType 虛擬化類型。 String 有效值:hvm、paravirtual

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
imageId 已註冊映像的 AMI ID。 String

所需的 IAM 許可

您的自訂執行角色必須具有下列許可,才能使用此步驟動作:

允許動作
  • ec2:DescribeSnapshots

  • ec2:CreateTags

範例

在工作流程文件中指定步驟動作。

- name: RegisterNewImage action: RegisterImage onFailure: Abort inputs: architecture: "x86_64" bootMode: "uefi" blockDeviceMapping: - DeviceName: "/dev/sda1" Ebs: SnapshotId: "snap-1234567890abcdef0" VolumeSize: 100 VolumeType: "gp3" rootDeviceName: "/dev/sda1" virtualizationType: "hvm"

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.RegisterNewImage.imageId

範例包含來自另一個步驟的 SnapshotId,以及包含在產生的 AMI 中的快照標籤

- name: CreateSnapshot action: RunCommand onFailure: Abort inputs: instanceId: "i-1234567890abcdef0" documentName: "AWS-RunShellScript" parameters: commands: - "aws ec2 create-snapshot --volume-id vol-1234567890abcdef0 --description 'Snapshot for AMI' --query 'SnapshotId' --output text" - name: RegisterImageFromSnapshot action: RegisterImage onFailure: Abort inputs: architecture: "x86_64" bootMode: "uefi" blockDeviceMapping: - DeviceName: "/dev/sda1" Ebs: SnapshotId.$: "$.stepOutputs.CreateSnapshot.output[0]" VolumeSize: 100 VolumeType: "gp3" includeSnapshotTags: true rootDeviceName: "/dev/sda1" virtualizationType: "hvm"

RunCommand

此步驟動作會為您的工作流程執行命令文件。Image Builder 會使用 Systems Manager API sendCommand中的 為您執行。如需詳細資訊,請參閱AWS Systems Manager 執行命令

預設逾時:720 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
instanceId 執行命令文件的執行個體 ID。 String 這必須是啟動此工作流程執行個體之工作流程步驟的輸出執行個體 ID。
documentName 要執行的 Systems Manager 命令文件名稱。 String
parameters 命令文件所需任何參數的索引鍵值對清單。 字典 <string, list<string>> 有條件
documentVersion 要執行的命令文件版本。 String $DEFAULT

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
runCommandId 在執行個體上執行sendCommand命令文件的 Systems Manager ID。 String
status 從 Systems Manager 傳回的狀態sendCommand String
output 從 Systems Manager 傳回的輸出sendCommand 字串清單

範例

在工作流程文件中指定步驟動作。

- name: RunCommandDoc action: RunCommand onFailure: Abort inputs: documentName: SampleDocument parameters: osPlatform: - "linux" instanceId.$: $.stepOutputs.LaunchStep.instanceId

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.RunCommandDoc.status

RunSysPrep

此步驟動作會使用 Systems Manager API sendCommand中的 ,在建置執行個體關閉快照之前執行 Windows 執行個體AWSEC2-RunSysprep的文件。這些動作遵循AWS 強化和清理映像的最佳實務

預設逾時:60 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
instanceId 要執行AWSEC2-RunSysprep文件的執行個體 ID。 String 這必須是啟動此工作流程執行個體之工作流程步驟的輸出執行個體 ID。

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
runCommandId 在執行個體上執行sendCommandAWSEC2-RunSysprep文件的 Systems Manager ID。 String
status 從 Systems Manager 傳回的狀態sendCommand String
output 從 Systems Manager 傳回的輸出sendCommand String

範例

在工作流程文件中指定步驟動作。

- name: RunSysprep action: RunSysPrep onFailure: Abort inputs: instanceId.$: $.stepOutputs.LaunchStep.instanceId

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.RunSysprep.status

SanitizeInstance

此步驟動作會在建置執行個體關閉快照之前,為 Linux 執行個體執行建議的淨化指令碼。淨化指令碼有助於確保最終映像遵循安全最佳實務,並移除不應傳遞至快照的建置成品或設定。如需指令碼的詳細資訊,請參閱 必要的建置後清除。此步驟動作不適用於容器映像。

Image Builder 使用 Systems Manager API sendCommand中的 來執行此指令碼。如需詳細資訊,請參閱AWS Systems Manager 執行命令

預設逾時:60 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
instanceId 要淨化的執行個體 ID。 String 這必須是啟動此工作流程執行個體之工作流程步驟的輸出執行個體 ID。

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
runCommandId 在執行個體上執行sendCommand淨化指令碼的 Systems Manager ID。 String
status 從 Systems Manager 傳回的狀態sendCommand String
output 從 Systems Manager 傳回的輸出sendCommand String

範例

在工作流程文件中指定步驟動作。

- name: SanitizeStep action: SanitizeInstance onFailure: Abort inputs: instanceId: $.stepOutputs.LaunchStep.instanceId

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.SanitizeStep.status

TerminateInstance

此步驟動作會終止您使用instanceId輸入指定的執行個體。根據預設,它會啟動終止,並在不等待的情況下移至下一個步驟。如果終止遇到 EC2 服務錯誤,背景程序會處理清除。若要等待完全終止再繼續,請將waitForTermination輸入設定為 true

預設逾時:30 分鐘

最大逾時:720 分鐘 (12 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
instanceId 要終止的執行個體 ID。 String
waitForTermination 指定步驟是否等待執行個體達到終止狀態再繼續。設為 時true,步驟會等待完全終止 (10 秒到幾分鐘)。 Boolean false true | false

輸出:此步驟動作沒有輸出。

範例

在工作流程文件中指定步驟動作。

- name: TerminateInstance action: TerminateInstance onFailure: Continue inputs: instanceId.$: i-1234567890abcdef0 waitForTermination: false

WaitForAction

此步驟動作會暫停執行中的工作流程,並等待從映像建置器 SendWorkflowStepAction API 動作接收外部動作。此步驟會將 EventBridge 事件發佈至具有詳細資訊類型 的預設 EventBridge 事件匯流排EC2 Image Builder Workflow Step Waiting。如果您提供 SNS 主題 ARN,步驟也可以傳送 SNS 通知,或者如果您提供 Lambda 函數名稱,也可以非同步叫用 Lambda 函數。

暫停和繼續的運作方式

步驟WaitForAction執行時,Image Builder 會將步驟狀態設定為 ,WAITING並發佈 EventBridge 事件 (詳細資訊類型 EC2 Image Builder Workflow Step Waiting)。如果您提供 snsTopicArn,也會傳送 Amazon SNS 通知。如果您提供 lambdaFunctionName,它會以非同步方式叫用該函數。工作流程會保持暫停,直到發生下列其中一種情況:

  • 您呼叫 SendWorkflowStepAction RESUME以繼續,或STOP呼叫 以結束工作流程。

  • 步驟達到其逾時 (預設 3 天,最多 7 天),工作流程會失敗。

您傳遞至 reasonSendWorkflowStepAction會與 步驟一起存放,並可供後續步驟做為步驟的reason輸出。

預設逾時:3 天

最大逾時:7 天 (604,800 秒)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
snsTopicArn 選擇性 SNS 主題 ARN,可在工作流程步驟擱置時傳送通知給 。 String
lambdaFunctionName Lambda 函數的選用名稱或 ARN,可在工作流程步驟待定時以非同步方式叫用。 String
payload 用作 SNS 訊息和 Lambda 承載的 JSON 字串。如果提供,自訂承載會包裝在預設訊息/承載中,分別用於 SNS 和 Lambda。如果未提供, 會產生預設訊息/承載。 String 必須是有效的 JSON 字串,上限為 16 KiB

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
動作 SendWorkflowStepAction API 動作傳回的動作。 字串 (RESUMESTOP)
reason 傳回動作的原因。 String

所需的 IAM 許可

您的自訂執行角色必須具有下列許可,才能使用此步驟動作:

允許動作
  • lambda:InvokeFunction

指定資源
  • arn:aws:lambda:us-west-2:111122223333:function:function-name

  • arn:aws:lambda:us-west-2:111122223333:function:*

範例

使用 SNS 通知在工作流程文件中指定步驟動作。

- name: SendEventAndWait action: WaitForAction onFailure: Abort inputs: snsTopicArn: arn:aws:sns:us-west-2:111122223333:ExampleTopic

使用 Lambda 函數調用在工作流程文件中指定步驟動作。

- name: SendEventAndWaitWithLambda action: WaitForAction onFailure: Abort inputs: lambdaFunctionName: ExampleFunction payload: | { "imageId": "{{ $.stepOutputs.CreateImageFromInstance.imageId }}", "region": "us-west-2" }

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.SendEventAndWait.reason

WaitForSSMAgent

在預期的無回應期間之後,此步驟動作會等待 EC2 執行個體變成可由 AWS Systems Manager 管理。對於已知執行個體中斷的工作流程特別重要,例如系統重新啟動、作業系統升級,或暫時中斷執行個體與 SSM 連線的平台特定操作。Image Builder 會監控執行個體,直到它重新取得 SSM 連線或逾時為止。

預設逾時:60 分鐘

最大逾時:180 分鐘 (3 小時)

您可以使用 覆寫預設值timeoutSeconds,最多可達顯示的最大值。超過上限的值會驗證失敗。

回復:此步驟動作沒有回復。

輸入:下表包含此步驟動作支援的輸入。

輸入名稱 Description (描述) Type 必要 預設 Constraints
instanceId 要監控 SSM 連線的執行個體 ID。 String 必須是有效的 EC2 執行個體 ID

輸出:下表包含此步驟動作的輸出。

輸出名稱 Description (描述) Type
status SSM Agent 的連線狀態。 String

範例

在工作流程文件中指定步驟動作。

- name: WaitForInstanceAfterReboot action: WaitForSSMAgent onFailure: Abort timeoutSeconds: 900 inputs: instanceId.$: $.stepOutputs.LaunchStep.instanceId

使用工作流程文件中步驟動作值的輸出。

$.stepOutputs.WaitForInstanceAfterReboot.status