目的
ACS::WaitFor アクションは、リソースが期待される状態になるまで待機するために使用されます。クラウドサービスの API 操作を呼び出して、指定したリソースが期待される状態になるまで、そのステータスをクエリできます。たとえば、Elastic Compute Service(ECS)の RunInstances 操作を呼び出して ECS インスタンスを作成した後、ACS::WaitFor アクションを実行して、ECS インスタンスが Running 状態になるまで待機できます。これは、ECS インスタンスが作成されたことを示します。
構文
Tasks:
- Name: waitForTaskExample
Action: ACS::WaitFor
Properties:
# 以下の属性は ACS::ExecuteAPI アクションの属性と同じです。詳細については、ACS::ExecuteAPI アクションの構文の説明をご参照ください。
Service: ECS
API: DescribeInstances
Parameters:
InstanceId: i-12345678abcedfg
# 以下の属性は ACS::WaitFor アクションに固有の属性です。
PropertySelector: "jq selector" # 必須。待機する API 結果を選択するためのセレクター。この例では、jq セレクターが使用されています。詳細については、ACS::ExecuteAPI アクションの ValueSelector 属性の説明をご参照ください。
StopRetryValues: # オプション。システムが待機タスクと API 呼び出しの再試行を停止する基準となる値。たとえば、この属性を Stopped に設定すると、Stopped 値が検出されたときにシステムは待機タスクを停止します。
- status1
DesiredValues: # 期待値。PropertySelector 属性によって選択された値が指定された値のいずれかと一致する場合、待機タスクは成功します。PropertySelector 属性によって選択された値が指定された値のいずれとも一致しない場合、待機タスクはタイムアウトして失敗します。DesiredValues 属性と NotDesiredValues 属性のいずれかを指定する必要があります。
- value1
- value2
NotDesiredValues: # 期待されない値。PropertySelector 属性によって選択された値が指定された値のいずれとも一致しない場合、待機タスクは成功します。PropertySelector 属性によって選択された値が指定された値のいずれかと一致する場合、待機タスクはタイムアウトして失敗します。DesiredValues 属性と NotDesiredValues 属性のいずれかを指定する必要があります。
- value3
- value4
Retries: # オプション。最大再試行回数。値は 5 などの正の整数である必要があります。有効な値:0 ~ 300。デフォルト値:10。
DelayType: # 再試行間隔のタイプ。有効な値:Exponential、Constant、および Linear。デフォルト値:Exponential。Exponential タイプの再試行間隔は、次の式を使用して計算されます:2 ^ 再試行回数。Constant タイプの再試行間隔は、Delay 属性によって指定されます。Linear タイプの再試行間隔は、次の式を使用して計算されます:Delay 属性の値 + BackOff 属性の値 × 再試行回数。
Delay: # 再試行間隔。値は 10 などの正の整数である必要があります。値 10 は、再試行間隔が 10 秒であることを示します。有効な値:1 ~ 3600。デフォルト値:2。このパラメーターは、DelayType 属性が Constant または Linear に設定されている場合に必須です。
BackOff: # 再試行間隔の補正。値は正の整数である必要があります。有効な値:1 ~ 3600。デフォルト値:2。このパラメーターは、DelayType 属性が Linear に設定されている場合に必須です。
MaxRetryInterval: # 最大再試行間隔。値は正の整数である必要があります。有効な値:1 ~ 1800。デフォルト値:1800。単位:秒。
Outputs: # 待機タスクの出力パラメーター。NotDesiredValues または DesiredValues 条件が満たされると、待機タスクは成功し、出力パラメーターが返されます。
ValueSelector: # 返すデータを選択するための jq セレクター。jq セレクターは、API 操作によって返された JSON データから情報を抽出します。jq 構文の詳細については、https://stedolan.github.io/jq をご覧ください。
Type: String/Boolean/List(Array)/Number/Object{
"Tasks": [
{
"Name": "waitForTaskExample",
"Action": "ACS::WaitFor",
"Properties": {
"Service": "ECS",
"API": "DescribeInstances",
"Parameters": {
"InstanceId": "i-12345678abcedfg"
},
"PropertySelector": "jq selector",
"StopRetryValues": [
"status1"
],
"DesiredValues": [
"value1",
"value2"
],
"NotDesiredValues": [
"value3",
"value4"
]
},
"Retries": "# オプション。最大再試行回数。値は 5 などの正の整数である必要があります。有効な値:0 ~ 300。デフォルト値:10。",
"DelayType": "# 再試行間隔のタイプ。有効な値:Exponential、Constant、および Linear。デフォルト値:Exponential。Exponential タイプの再試行間隔は、次の式を使用して計算されます:2 ^ 再試行回数。Constant タイプの再試行間隔は、Delay 属性によって指定されます。Linear タイプの再試行間隔は、次の式を使用して計算されます:Delay 属性の値 + BackOff 属性の値 × 再試行回数。",
"Delay": "# 再試行間隔。値は 10 などの正の整数である必要があります。値 10 は、再試行間隔が 10 秒であることを示します。有効な値:1 ~ 3600。デフォルト値:2。このパラメーターは、DelayType 属性が Constant または Linear に設定されている場合に必須です。",
"BackOff": "# 再試行間隔の補正。値は正の整数である必要があります。有効な値:1 ~ 3600。デフォルト値:2。このパラメーターは、DelayType 属性が Linear に設定されている場合に必須です。",
"MaxRetryInterval": "# 最大再試行間隔。値は正の整数である必要があります。有効な値:1 ~ 1800。デフォルト値:1800。単位:秒。",
"Outputs": {
"ValueSelector": "# 返すデータを選択するための jq セレクター。jq セレクターは、API 操作によって返された JSON データから情報を抽出します。jq 構文の詳細については、https://stedolan.github.io/jq をご覧ください。",
"Type": "String/Boolean/List(Array)/Number/Object"
}
}
]
}例
次のテンプレートは、ECS インスタンスを起動し、ACS::WaitFor アクションを実行してインスタンスが Running 状態になるまで待機するために使用されます。
---
FormatVersion: OOS-2019-06-01
Parameters:
InstanceId:
Description: 起動するインスタンス ID。
Type: String
Tasks:
- Name: startInstance
Action: ACS::ExecuteAPI
Description: 指定されたパラメーターでインスタンスを起動します。
Properties:
Service: ECS
API: StartInstance
Parameters:
InstanceId: '{{ InstanceId }}'
- Name: untilInstanceReady
Action: ACS::WaitFor
Description: 指定されたパラメーターでインスタンスを記述します。
MaxRetryInterval: 900
Properties:
Service: ECS
API: DescribeInstances
Parameters:
InstanceIds:
- '{{ InstanceId }}'
PropertySelector: Instances.Instance[].Status
DesiredValues:
- Running{
"FormatVersion": "OOS-2019-06-01",
"Parameters": {
"InstanceId": {
"Description": "起動するインスタンス ID。",
"Type": "String"
}
},
"Tasks": [
{
"Name": "startInstance",
"Action": "ACS::ExecuteAPI",
"Description": "指定されたパラメーターでインスタンスを起動します。",
"Properties": {
"Service": "ECS",
"API": "StartInstance",
"Parameters": {
"InstanceId": "{{ InstanceId }}"
}
}
},
{
"Name": "untilInstanceReady",
"Action": "ACS::WaitFor",
"Description": "指定されたパラメーターでインスタンスを記述します。",
"MaxRetryInterval": 900,
"Properties": {
"Service": "ECS",
"API": "DescribeInstances",
"Parameters": {
"InstanceIds": [ "{{ InstanceId }}"]
},
"PropertySelector": "Instances.Instance[].Status",
"DesiredValues": [ "Running" ]
}
}
]
}