全部產品
Search
文件中心

CloudOps Orchestration Service:ACS::ExecuteHttpRequest

更新時間:Jun 25, 2025

用途

使用該動作可以在營運任務中調用外部HTTP/HTTPS請求,以實現雲資源營運任務與外部HTTP服務的互動。

以下是 ACS::ExecuteHttpRequest 動作的一些可能的情境:

  1. API 整合:您可以使用 ACS::ExecuteHttpRequest 動作調用第三方服務API,從而查詢資訊、執行操作或整合第三方服務。

  2. 自訂通知:如果您需要在指令碼執行的特定階段發送通知,可以通過 ACS::ExecuteHttpRequest 發送 HTTP 要求到自訂的Webhook或通知服務,實現諸如發送郵件、簡訊或推播通知等功能。

  3. 資料收集與報告:藉助 ACS::ExecuteHttpRequest 動作,您可以將營運任務執行資訊發送到遠程伺服器或資料平台,以用於審計、監控或報告。

  4. 自動化流程觸發:您可以利用 ACS::ExecuteHttpRequest 在 OOS 模板執行時觸發其他自動化工具或指令碼的執行,如調用 CI/CD 系統中的部署流程,或者啟動其他外部系統的營運任務。

  5. 外部驗證與授權:在營運過程中,您可能需要對操作進行驗證。您可以通過 ACS::ExecuteHttpRequest 向外部認證系統發送請求以驗證操作者的身份或校正操作許可權。

  6. 等待非同步任務完成或校正調用結果:在調用HTTP請求時,存在一些非同步任務情境,需要輪詢檢查Response的特殊欄位,或針對調用結果進行校正,您可以通過WaitFor/CheckFor欄位實現。

文法

Tasks:
  - Name: executeHttpRequestExample
    Action: ACS::ExecuteHttpRequest
    Properties:
      Method: POST # 可選,HTTP方法,支援POST和GET,預設為POST
      URL: 'https://example.com' # 必填,HTTP請求的統一資源定位器
      Headers: # 可選,HTTP要求標頭資訊
        Content-Type: 'application/json'
      Query: # 可選,HTTP請求參數資訊
        Parameter1: value1
        Parameter2: value2
      Body: # 可選,HTTP請求體,當Method為POST時有效
        Parameter3: value3
        Parameter4: value4
      CheckFor: # 可選,對Http請求返回結果進行校正
        # Rules下可添加多個對比組別,組別之間為"AND"關係
        Rules:
          - PropertySelector: "jq selector" # JQ文法
            Operator: "Equals" # 比較子,支援"Equals", "In", "NotIn"
            Value: "1" #期望值
      WaitFor: # 可選,對Http請求返回結果進行輪詢校正
        # Rules同上
        Rules:
          - PropertySelector: "jq selector" 
            Operator: "Equals"
            Value: "1"
        FailRules:
        # 滿足條件直接失敗
          - PropertySelector: "jq selector" 
            Operator: "Equals"
            Value: "1"
        # Retry模組設定重試相關參數
        Retry:
          Retries: #可選,表示最大重試次數,預設值10,填寫正整數,如5,取值範圍[0,300]。
          DelayType: #Exponential(預設),Constant,Linear。Exponential類型的稍候再試為:2 ^ times(重試次數);Constant類型的稍候再試固定為Delay;Linear類型的稍候再試為:Delay + BackOff * times(重試次數)。
          Delay: #DelayType為Constant或Linear時需要添加此屬性,表示稍候再試時間,填寫正整數,如10,表示稍候再試為10s,預設值2,取值範圍[1,3600]。
          BackOff: #DelayType為Linear時需要添加此屬性,表示稍候再試補償時間,填寫正整數,預設值為2,取值範圍[1,3600]。
          MaxRetryInterval: #最大稍候再試, 單位秒,預設值為1800,填寫正整數,取值範圍[1, 1800]。
    Outputs:
      OutputParameter1:
        ValueSelector: 'jq selector' # jq的選取器文法,以OpenAPI的返回作為JSON輸入,jq的文法請參考 https://stedolan.github.io/jq/
        Type: String/Boolean/List/Number/Object
{
  "Tasks": [
    {
      "Name": "executeHttpRequestExample",
      "Action": "ACS::ExecuteHttpRequest",
      "Properties": {
        "Method": "POST",
        "URL": "https://example.com",
        "Headers": {
          "Content-Type": "application/json"
        },
        "Query": {
          "Parameter1": "value1",
          "Parameter2": "value2"
        },
        "Body": {
          "Parameter3": "value3",
          "Parameter4": "value4"
        },
        "CheckFor": {
          "Rules": [
            {
              "PropertySelector": "jq selector",
              "Operator": "Equals",
              "Value": "1"
            }
          ]
        },
        "WaitFor": {
          "Rules": [
            {
              "PropertySelector": "jq selector",
              "Operator": "Equals",
              "Value": "1"
            }
          ],
          "FailRules": [
            {
              "PropertySelector": "jq selector",
              "Operator": "Equals",
              "Value": "1"
            }
          ],
          "Retry": {
            "Retries": null,
            "DelayType": null,
            "Delay": null,
            "BackOff": null,
            "MaxRetryInterval": null
          }
        }
      },
      "Outputs": {
        "OutputParameter1": {
          "ValueSelector": "jq selector",
          "Type": "String/Boolean/List/Number/Object"
        }
      }
    }
  ]
}

樣本

以下為通過調用HTTP請求觸發github action將分支代碼部署到指定執行個體的樣本模板。

FormatVersion: OOS-2019-06-01
Description: 
    en: OOS template for deploying ECS instances using GitHub Actions.
    zh-cn: OOS模板,用於使用GitHub Actions部署ECS執行個體
Parameters:
  regionId:
    Type: String
    Label:
      en: RegionId
      zh-cn: 地區ID
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  targets:
    Type: Json
    Label:
      en: TargetInstance
      zh-cn: 目標執行個體
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: ALIYUN::ECS::Instance
      RegionId: regionId
      Status: Running
  gitHubBranch:
    Type: String
    Description:
        en: Branch where the deployment will occur.
        zh-cn: 要部署的git倉庫分支
Tasks:
  - Name: getInstance
    Description:
      en: Views the ECS instances
      zh-cn: 擷取ECS執行個體
    Action: ACS::SelectTargets
    Properties:
      ResourceType: ALIYUN::ECS::Instance
      RegionId: '{{ regionId }}'
      Filters:
        - '{{ targets }}'
    Outputs:
      instanceIds:
        Type: List
        ValueSelector: Instances.Instance[].InstanceId
  - Name: DeployCodeByGitHubAction
    Action: ACS::ExecuteHttpRequest
    Properties:
      Method: POST
      URL: "https://api.github.com/repos/<YOUR-GITHUB-ACCOUNT>/<YOUR-GITHUB-REPO>/actions/workflows/<YOUR-WORKFLOW-ID>/dispatches"
      Headers:
        Accept: application/vnd.github+json
        Authorization: "Bearer <YOUR-TOKEN>"
        X-GitHub-Api-Version: 2022-11-28
      Body: 
        ref: "{{gitHubBranch}}"
        inputs:
          instance_ids: "{{getInstance.instanceIds}}"
{
  "FormatVersion": "OOS-2019-06-01",
  "Description": {
    "en": "OOS template for deploying ECS instances using GitHub Actions.",
    "zh-cn": "OOS模板,用於使用GitHub Actions部署ECS執行個體"
  },
  "Parameters": {
    "regionId": {
      "Type": "String",
      "Label": {
        "en": "RegionId",
        "zh-cn": "地區ID"
      },
      "AssociationProperty": "RegionId",
      "Default": "{{ ACS::RegionId }}"
    },
    "targets": {
      "Type": "Json",
      "Label": {
        "en": "TargetInstance",
        "zh-cn": "目標執行個體"
      },
      "AssociationProperty": "Targets",
      "AssociationPropertyMetadata": {
        "ResourceType": "ALIYUN::ECS::Instance",
        "RegionId": "regionId",
        "Status": "Running"
      }
    },
    "gitHubBranch": {
      "Type": "String",
      "Description": {
        "en": "Branch where the deployment will occur.",
        "zh-cn": "要部署的git倉庫分支"
      }
    }
  },
  "Tasks": [
    {
      "Name": "getInstance",
      "Description": {
        "en": "Views the ECS instances",
        "zh-cn": "擷取ECS執行個體"
      },
      "Action": "ACS::SelectTargets",
      "Properties": {
        "ResourceType": "ALIYUN::ECS::Instance",
        "RegionId": "{{ regionId }}",
        "Filters": [
          "{{ targets }}"
        ]
      },
      "Outputs": {
        "instanceIds": {
          "Type": "List",
          "ValueSelector": "Instances.Instance[].InstanceId"
        }
      }
    },
    {
      "Name": "DeployCodeByGitHubAction",
      "Action": "ACS::ExecuteHttpRequest",
      "Properties": {
        "Method": "POST",
        "URL": "https://api.github.com/repos/<YOUR-GITHUB-ACCOUNT>/<YOUR-GITHUB-REPO>/actions/workflows/<YOUR-WORKFLOW-ID>/dispatches",
        "Headers": {
          "Accept": "application/vnd.github+json",
          "Authorization": "Bearer <YOUR-TOKEN>",
          "X-GitHub-Api-Version": "2022-11-28T00:00:00.000Z"
        },
        "Body": {
          "ref": "{{gitHubBranch}}",
          "inputs": {
            "instance_ids": "{{getInstance.instanceIds}}"
          }
        },
        "Query": {}
      }
    }
  ]
}