翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
でループ構文を使用する AWSTOE
このセクションでは、 でループコンストラクトを作成するのに役立つ情報を提供します。 AWSTOE。 ループコンストラクトは、命令の反復シーケンスを定義します。では、次のタイプのループコンストラクトを使用できます。 AWSTOE:
-
for
コンストラクト — 制限付きの整数のシーケンスを反復処理します。 -
forEach
コンストラクト-
入力リストによる
forEach
ループ — 有限数の文字列を反復処理します。 -
区切りリストによる
forEach
ループ — 区切り文字で結合された有限の文字列のコレクションを反復処理します。
-
注記
ループ構文は文字列データ型のみをサポートします。
イテレーション変数の参照
現在のイテレーション変数のインデックスと値を参照するには、ループ構文を含むステップの入力ボディ内で参照式 {{ loop.* }}
を使用する必要があります。この式は、別のステップのループ構文のイテレーション変数を参照する場合には使用できません。
参照式は、次のメンバーで構成されます。
{{ loop.index }}
—0
でインデックスが付けられていまる現在のイテレーションの序数位置。{{ loop.value }}
— 現在のイテレーション変数に関連付けられた値。
ループ名
ループ構文にはすべて、識別用のオプションの名前フィールドがあります。ループ名を指定すると、そのループ名を使用してステップの入力ボディ内のイテレーション変数を参照できます。名前付きループのイテレーションインデックスと値を参照するには、ステップの入力ボディで {{ <loop_name>.* }}
と {{ loop.* }}
を使用してください。この式は、他のステップの名前付きループ構成を参照するために使用することはできない。
参照式は、次のメンバーで構成されます。
{{ <loop_name>.index }}
—0
でインデックスされる指定されたループの現在のイテレーションの序数位置。{{ <loop_name>.value }}
— 指定したループの現在のイテレーション変数に関連付けられた値。
参照式を解決する
- AWSTOE は、次のように参照式を解決します。
{{ <loop_name>.* }}
– AWSTOE は、次のロジックを使用してこの式を解決します。現在実行中のステップのループが
<loop_name>
値と一致すると、参照式は現在実行中のステップのループ構文に変換されます。現在実行中のステップ内に指定されたループ構文がある場合は、
<loop_name>
はそのループ構文に解決されます。
{{ loop.* }}
– AWSTOE は、現在実行中のステップで定義されているループ構文を使用して式を解決します。
ループを含まないステップ内で参照式が使用されている場合、 AWSTOE は式を解決せず、置き換えなしでステップに表示されます。
注記
YAML コンパイラによって正しく解釈されるようにするには、参照式を二重引用符で囲む必要があります。
ループ構文のタイプ
このセクションでは、 で使用できるループコンストラクトタイプに関する情報と例を示します。 AWSTOE.
for
ループ
for
ループは、変数の先頭と末尾で囲まれた境界内で指定された整数の範囲で反復処理を行います。イテレーション値は [start, end]
のセットに含まれており、境界値も含まれます。
AWSTOE は、start
、end
、および updateBy
の値を検証して、組み合わせが無限ループにならないことを確認します。
for
ループスキーマ
- name: "StepName" action: "ActionModule" loop: name: "string" for: start: int end: int updateBy: int inputs: ...
for ループ入力 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
フィールド | 説明 | タイプ | 必須 | [Default] (デフォルト) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ループの一意の名前。同じフェーズの他のループ名と比べると一意でなければなりません。 |
文字列 |
なし |
"" |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
イテレーションの開始値。連鎖式は受け付けません。 |
整数 |
あり |
該当なし |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
反復の終了値。連鎖式は受け付けません。 | 整数 | あり | 該当なし | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
加算によってイテレーション値が更新される場合の違い。負または正の 0 以外の値でなければなりません。連鎖式は受け付けません。 | 整数 | あり | 該当なし |
for
ループ入力の例
- name: "CalculateFileUploadLatencies" action: "ExecutePowerShell" loop: for: start: 100000 end: 1000000 updateBy: 100000 inputs: commands: - | $f = new-object System.IO.FileStream c:\temp\test{{ loop.index }}.txt, Create, ReadWrite $f.SetLength({{ loop.value }}MB) $f.Close() - c:\users\administrator\downloads\latencyTest.exe --file c:\temp\test{{ loop.index }}.txt - AWS s3 cp c:\users\administrator\downloads\latencyMetrics.json s3://bucket/latencyMetrics.json - | Remove-Item -Path c:\temp\test{{ loop.index }}.txt Remove-Item -Path c:\users\administrator\downloads\latencyMetrics.json
forEach
ループ (入力リスト付き)
forEach
ループは明示的な値リスト (文字列でも連鎖式でもかまいません) を繰り返し処理します。
入力リストのスキーマを含む forEach
ループ
- name: "StepName" action: "ActionModule" loop: name: "string" forEach: - "string" inputs: ...
forEach ループ (入力リスト付き) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
フィールド | 説明 | タイプ | 必須 | [Default] (デフォルト) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ループの一意の名前。同じフェーズの他のループ名と比べると一意でなければなりません。 |
文字列 |
なし |
"" |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
反復処理用の文字列のリスト。連鎖式をリスト内の文字列として受け入れます。YAML コンパイラが正しく解釈するには、連鎖式を二重引用符で囲む必要があります。 |
文字列のリスト |
あり |
該当なし |
入力リストによる forEach
ループ (例 1)
- name: "ExecuteCustomScripts" action: "ExecuteBash" loop: name: BatchExecLoop forEach: - /tmp/script1.sh - /tmp/script2.sh - /tmp/script3.sh inputs: commands: - echo "Count {{ BatchExecLoop.index }}" - sh "{{ loop.value }}" - | retVal=$? if [ $retVal -ne 0 ]; then echo "Failed" else echo "Passed" fi
入力リストによる forEach
ループ (例 2)
- name: "RunMSIWithDifferentArgs" action: "ExecuteBinary" loop: name: MultiArgLoop forEach: - "ARG1=C:\Users ARG2=1" - "ARG1=C:\Users" - "ARG1=C:\Users ARG3=C:\Users\Administrator\Documents\f1.txt" inputs: commands: path: "c:\users\administrator\downloads\runner.exe" args: - "{{ MultiArgLoop.value }}"
入力リストによる forEach
ループ (例 3)
- name: "DownloadAllBinaries" action: "S3Download" loop: name: MultiArgLoop forEach: - "bin1.exe" - "bin10.exe" - "bin5.exe" inputs: - source: "s3://bucket/{{ loop.value }}" destination: "c:\temp\{{ loop.value }}"
区切りリストによる forEach
ループ
ループは、区切り文字で区切られた値を含む文字列を繰り返し処理します。文字列の構成要素を反復処理するには、 AWSTOE は区切り文字を使用して、文字列を反復に適した配列に分割します。
区切りリストスキーマによる forEach
ループ
- name: "StepName" action: "ActionModule" loop: name: "string" forEach: list: "string" delimiter: ".,;:\n\t -_" inputs: ...
区切りリスト入力による forEach ループ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
フィールド | 説明 | タイプ | 必須 | [Default] (デフォルト) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ループに付けられた一意の名前。同じフェーズの他のループ名と比較した場合、ユニークでなければならない。 |
文字列 |
なし |
"" |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
構成文字列を共通の区切り文字で結合した文字列です。連鎖式も受け付けます。連鎖式の場合は、YAMLコンパイラが正しく解釈できるように二重引用符で囲まれていることを確認してください。 | 文字列 |
あり |
該当なし |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ブロック内の文字列を区切るために使用する文字。デフォルトはカンマ文字です。与えられたリストで使用できる区切り文字は 1 つだけです。
連鎖式は使用できません。 |
文字列 | なし | カンマ: "," |
注記
list
の値は不変の文字列として扱われます。ランタイムに list
のソースが変更されても、実行中には反映されません。
forEach
区切りリストによるループ 例1
この例では、次の連鎖式パターンを使用して、別のステップの出力 を参照します<phase_name>.<step_name>.[inputs | outputs].<var_name>
。
- name: "RunMSIs" action: "ExecuteBinary" loop: forEach: list: "{{ build.GetAllMSIPathsForInstallation.outputs.stdout }}" delimiter: "\n" inputs: commands: path: "{{ loop.value }}"
forEach
区切りリストによるループ 例2
- name: "UploadMetricFiles" action: "S3Upload" loop: forEach: list: "/tmp/m1.txt,/tmp/m2.txt,/tmp/m3.txt,..." inputs: commands: - source: "{{ loop.value }}" destination: "s3://bucket/key/{{ loop.value }}"
ステップフィールド
ループはステップの一部です。ステップの実行に関連するフィールドは、個々の反復には適用されません。ステップフィールドは、以下のようにステップレベルでのみ適用されます。
-
timeoutSeconds – ループのすべての反復は、このフィールドで指定された期間内に実行する必要があります。ループがタイムアウトした場合、 AWSTOE はステップの再試行ポリシーを実行し、新しい試行ごとにタイムアウトパラメータをリセットします。最大再試行回数に達した後でループ実行がタイムアウト値を超えると、ステップの失敗メッセージにループ実行がタイムアウトになったことが示されます。
-
onFailure – 障害処理は、次のように ステップに適用されます。
-
onFailure が に設定されている場合
Abort
、 AWSTOE はループを終了し、再試行ポリシーに従ってステップを再試行します。最大再試行回数に達すると、 AWSTOE は現在のステップを失敗としてマークし、プロセスの実行を停止します。AWSTOE は、親フェーズとドキュメントのステータスコードを に設定します
Failed
。注記
失敗したステップの後に、それ以上のステップは実行されません。
-
onFailure が に設定されている場合
Continue
、 AWSTOE はループを終了し、再試行ポリシーに従ってステップを再試行します。最大再試行回数に達すると、 AWSTOE は現在のステップを失敗としてマークし、次のステップの実行を続行します。AWSTOE は、親フェーズとドキュメントのステータスコードを に設定します
Failed
。 -
onFailure が に設定されている場合
Ignore
、 AWSTOE はループを終了し、再試行ポリシーに従ってステップを再試行します。最大再試行回数に達すると、 AWSTOE は現在のステップを としてマークしIgnoredFailure
、次のステップの実行を続行します。AWSTOE は、親フェーズとドキュメントのステータスコードを に設定します
SuccessWithIgnoredFailure
。注記
これでも実行は成功したとみなされますが、1 つ以上のステップが失敗して無視されたことを知らせる情報が含まれます。
-
maxAttempts – 再試行のたびに、ステップ全体とすべての反復が最初から実行されます。
status - ステップの実行の全体的なステータス。
status
は個々の反復のステータスを表すものではない。ループを含むステップのステータスは次のように決定されます。1 回のイテレーションが実行に失敗した場合、ステップのステータスは失敗を示します。
すべてのイテレーションが成功すると、ステップのステータスは成功を示します。
startTime – ステップの実行の全体的な開始時間。個々のイテレーションの開始時間を表すものではありません。
endTime – ステップの実行の全体的な終了時間。個々の反復の終了時刻を表すものではない。
failureMessage – タイムアウト以外のエラーが発生した場合に失敗した反復インデックスが含まれます。タイムアウトエラーの場合、メッセージにはループの実行が失敗したことが示されます。失敗メッセージのサイズを最小限に抑えるため、イテレーションごとに個別のエラーメッセージは表示されません。
ステップとイテレーションの出力
すべてのイテレーションには出力が含まれます。ループ実行の最後に、 AWSTOE は、成功したすべての反復出力を に統合しますdetailedOutput.json
。統合出力は、アクションモジュールの出力スキーマで定義されている対応する出力キーに属する値を照合したものです。次の例では、出力の統合方法を示しています。
イテレーション 1 の ExecuteBash
の出力
{ "stdout":"Hello" }
イテレーション 2 の ExecuteBash
の出力
{ "stdout":"World" }
ステップ ExecuteBash
の出力
{ "stdout":"Hello\nWorld" }
例えば、ExecuteBash
、ExecutePowerShell
、および ExecuteBinary
はアクションモジュール出力として STDOUT
を返すアクションモジュールです。 STDOUT
メッセージは改行文字で結合され、detailedOutput.json
のステップの全体的な出力が生成されます。
AWSTOE は、失敗したイテレーションの出力を統合しません。