すべてのプロダクト
Search
ドキュメントセンター

Resource Orchestration Service:ALIYUN::ROS::WaitConditionHandle

最終更新日:Jan 16, 2025

ALIYUN::ROS::WaitConditionHandle は、シグナルを受信するために使用されます。ALIYUN::ROS::WaitConditionHandle を ALIYUN::ROS::WaitCondition と共に使用して、スタックの実行プロセスを管理できます。Elastic Compute Service (ECS) インスタンスを作成すると、ユーザーデータの実行中にシグナルが送信されます。

構文

{
  "Type": "ALIYUN::ROS::WaitConditionHandle",
  "Properties": {
    "Mode": String,
    "Count": Integer
  }
}

プロパティ

プロパティ

タイプ

必須

編集可能

説明

制約

Mode

String

いいえ

はい

リソースが更新される前に、システムが既存のシグナルを削除するモード。

有効な値:

  • Increment: リソースが更新される前に、システムは既存のすべてのシグナルを削除します。

    説明

    更新中に ALIYUN::ROS::WaitCondition が待機するシグナルの数は、次の式に基づいて計算されます。シグナルの数 = ALIYUN::ROS::WaitCondition の Count プロパティの値。

  • Full: Count プロパティが有効な場合、システムはリソースが更新される前に既存のシグナルを削除します。それ以外の場合、システムはリソースが更新される前に既存のシグナルを削除しません。

    説明

    更新中に ALIYUN::ROS::WaitCondition が待機するシグナルの数は、次の式に基づいて計算されます。シグナルの数 = ALIYUN::ROS::WaitCondition の Count プロパティの値 - 既存のシグナルが削除された後の残りのシグナルの数。

Count

Integer

いいえ

はい

Mode プロパティを Full に設定すると、システムはリソースが更新される前に、ID が Count プロパティの値より大きい整数である既存のシグナルを削除します。

デフォルト値: -1。

Count プロパティは、次の条件が満たされた場合に有効になります。

  • Mode プロパティが Full に設定されている。

  • Count プロパティが 0 以上の値に設定されている。

Count プロパティが有効な場合、システムはリソースが更新される前に、ID が Count プロパティの値より大きい整数である既存のシグナルを削除します。 ID が整数ではないシグナルが存在する場合、リソースの更新は失敗します。

説明

スタックを更新することでエラステック スケーリングを実行するシナリオでは、ALIYUN::ROS::WaitConditionHandle の Count プロパティを ALIYUN::ROS::WaitCondition の Count プロパティの値に設定することをお勧めします。

戻り値

Fn::GetAtt

  • CurlCli: ALIYUN::ROS::WaitConditionHandle で指定されたリソースから生成された cURL コマンド。 cURL コマンドを実行して、ユーザーデータの実行結果またはステータスを Resource Orchestration Service (ROS) に送信できます。

  • WindowsCurlCli: Windows 用に提供される cURL コマンドプレフィックス。 cURL コマンドを実行して、実行が成功したか失敗したかを示すシグナルを送信できます。 Windows は cURL コマンドをサポートしていません。そのため、コマンドを実行する前に curl.exe をインストールし、PATH に追加する必要があります。 -d "{\"status\": \" SUCCESS \"} を追加して実行が成功したことを示し、-d "{\"status\": \" FAILURE \"} を追加して実行が失敗したことを示すことができます。

  • PowerShellCurlCli: PowerShell 用に提供される cURL コマンドプレフィックス。 cURL コマンドを実行して、実行が成功したか失敗したかを示すシグナルを送信できます。 cmdlet は PowerShell 3.0 で導入されました。そのため、PowerShell 3.0 以後を使用する必要があります。 $PSVersionTable.PSVersion を使用して、PowerShell のバージョン番号を照会できます。 -Body '{"status": " SUCCESS "} を追加して実行が成功したことを示し、-Body '{"status": " FAILURE "} を追加して実行が失敗したことを示すことができます。

  • Headers: HTTP POST リクエストヘッダー。ヘッダーを使用して、実行が成功したか失敗したかを示すシグナルをプログラムに送信できます。

  • URL: HTTP POST リクエスト URL。 URL を使用して、実行が成功したか失敗したかを示すシグナルをプログラムに送信できます。

説明
  • CurlCli、WindowsCurlCli、および PowerShellCurlCli のリクエスト本文では、STRING 形式の id パラメーターを使用してシグナル ID を指定できます。

    例: -d "{\"status\": \" SUCCESS \", \"id\": \"test\"

    シグナルの ID が同じ場合、最後に受信したシグナルが前のシグナルを上書きします。

    シグナル ID を指定しない場合、ROS はシグナル ID として整数を使用します。シグナル ID は、次の式に基づいて計算されます。シグナル ID = 既存のシグナルの数 + 1。

  • CurlCli、WindowsCurlCli、および PowerShellCurlCli のリクエスト本文では、STRING 形式の reason パラメーターを使用して、シグナルの実行が成功または失敗した理由を指定できます。理由は、シグナル通知を記録するスタックイベントに表示されます。

    例: -d "{\"status\": \" SUCCESS \", \"reason\": \"nginx is installed successfully.\"}"

    reason フィールドを指定すると、リクエストされたコンテンツがシグナル通知を記録するスタックイベントに表示されます。

  • CurlCli、WindowsCurlCli、および PowerShellCurlCli のリクエスト本文では、STRING 形式の data パラメーターを使用して、シグナルに関連付けられたデータを指定できます。 ALIYUN::ROS::WaitCondition の戻り値の Data、ErrorData、または JoinedErrorData プロパティを使用して、データを照会できます。

    例: -d "{\"id\" : \"ssh_pub_key\", \"data\" : \"$pub_key\"}"

  • status パラメーターを使用して、SUCCESSFAILUREWARNING などのシグナルタイプを指定できます。シグナルタイプとリソースに対する操作結果の関係については、以下で優先順位の高い順に説明します。

    • 受信したシグナルが FAILURE タイプの場合、リソースに対する操作は失敗しました。

    • 受信したシグナルの数が指定された時間範囲内で Count プロパティの値より少ない場合、リソースに対する操作はタイムアウトしました。

    • 受信したシグナルの数が Count プロパティの値以上で、すべてのシグナルが WARNING タイプの場合、リソースに対する操作は失敗しました。

    • その他の場合、リソースに対する操作は成功です。

  • YAML 形式

    ROSTemplateFormatVersion: '2015-09-01'
    Parameters:
      InstanceId:
        Type: String
        AssociationProperty: ALIYUN::ECS::Instance::InstanceId
    Resources:
      InstallNginx:
        Type: 'ALIYUN::ECS::RunCommand'
        Properties:
          Type: RunShellScript
          CommandContent:
            Fn::Sub: |
                #!/bin/sh
                yum install -y nginx  // nginxをインストールします
                systemctl restart nginx // nginxを再起動します
                if [[ $? -eq 0 ]]; // インストールと起動が成功したかどうかを確認します
                then
                ${InstallNginxWaitConditionHandle.CurlCli} --data-binary "{\"status\": \"SUCCESS\", \"data\": \"Nginx is installed successfully.\"}" // 成功のシグナルを送信します
                else
                ${InstallNginxWaitConditionHandle.CurlCli} --data-binary "{\"status\": \"FAILURE\", \"reason\": \"Failed to install and start nginx.\"}" // 失敗のシグナルを送信します
                fi
          Name: InstallNginxScript
          InstanceIds:
            - Ref:
                InstanceId
          Timeout: 60
      InstallNginxWaitConditionHandle:
        Type: 'ALIYUN::ROS::WaitConditionHandle'
      InstallNginxWaitCondition:
        Type: 'ALIYUN::ROS::WaitCondition'
        Properties:
          Handle:
            Ref: InstallNginxWaitConditionHandle
          Timeout: 60
    Outputs:
      InstallNginxData:
        Description: Received the data sent by the first ecs, JSON serialized dict containing
          data associated with wait condition signals sent to the handle.
        Value:
          Fn::GetAtt:
          - InstallNginxWaitCondition
          - Data
  • JSON 形式

    {
      "ROSTemplateFormatVersion": "2015-09-01",
      "Parameters": {
        "InstanceId": {
          "Type": "String",
          "AssociationProperty": "ALIYUN::ECS::Instance::InstanceId"
        }
      },
      "Resources": {
        "InstallNginx": {
          "Type": "ALIYUN::ECS::RunCommand",
          "Properties": {
            "Type": "RunShellScript",
            "CommandContent": {
              "Fn::Sub": "#!/bin/sh\nyum install -y nginx\nsystemctl restart nginx\nif [[ $? -eq 0 ]];\nthen\n${InstallNginxWaitConditionHandle.CurlCli} --data-binary \"{\\\"status\\\": \\\"SUCCESS\\\", \\\"data\\\": \\\"Nginx is installed successfully.\\\"}\"\nelse\n${InstallNginxWaitConditionHandle.CurlCli} --data-binary \"{\\\"status\\\": \\\"FAILURE\\\", \\\"reason\\\": \\\"Failed to install and start nginx.\\\"}\"\nfi\n" // nginxをインストールし、再起動します。成功/失敗に応じてシグナルを送信します。
            },
            "Name": "InstallNginxScript",
            "InstanceIds": [
              {
                "Ref": "InstanceId"
              }
            ],
            "Timeout": 60
          }
        },
        "InstallNginxWaitConditionHandle": {
          "Type": "ALIYUN::ROS::WaitConditionHandle"
        },
        "InstallNginxWaitCondition": {
          "Type": "ALIYUN::ROS::WaitCondition",
          "Properties": {
            "Handle": {
              "Ref": "InstallNginxWaitConditionHandle"
            },
            "Timeout": 60
          }
        }
      },
      "Outputs": {
        "InstallNginxData": {
          "Description": "Received the data sent by the first ecs, JSON serialized dict containing data associated with wait condition signals sent to the handle.",
          "Value": {
            "Fn::GetAtt": [
              "InstallNginxWaitCondition",
              "Data"
            ]
          }
        }
      }
    }