Appelez des endpoints HTTP/HTTPS externes depuis les tâches d'exploitation et de maintenance (O&M) pour intégrer des services tiers, envoyer des notifications, collecter des données et vérifier les résultats.
Description
Cette action exécute des requêtes HTTP/HTTPS externes lors des tâches O&M, permettant l'interaction entre la gestion des ressources cloud et les services HTTP externes.
Scénarios d'utilisation typiques :
Intégration d'API : utilisez l'action
ACS::ExecuteHttpRequestpour appeler les API de services tiers, interroger des informations, effectuer des opérations ou intégrer ces services.Notification personnalisée : pour envoyer une notification à une étape précise de l'exécution d'un script, servez-vous de l'action
ACS::ExecuteHttpRequestafin d'adresser une requête HTTP à un webhook ou à un service de notification spécifié. La notification peut ainsi être diffusée par e-mail, SMS ou notification push.Collecte et reporting de données : transmettez les informations relatives à une tâche O&M vers un serveur distant ou une plateforme de données pour l'audit, la surveillance et le reporting.
Déclenchement automatisé de processus : lancez l'exécution d'autres outils automatisés ou scripts lors de l'exécution d'un modèle CloudOps Orchestration Service (OOS). Par exemple, démarrez un processus de déploiement dans un système d'intégration continue/déploiement continu (CI/CD) ou initiez des tâches O&M dans d'autres systèmes externes.
Vérification et autorisation externes : si l'authentification des identités et la vérification des autorisations sont nécessaires durant le processus O&M, utilisez l'action
ACS::ExecuteHttpRequestpour envoyer une requête à un système d'authentification externe. Cela permet de valider l'identité de l'opérateur ou de confirmer les autorisations requises.Attente de la fin d'une tâche asynchrone ou vérification des résultats d'appel : dans les scénarios impliquant des tâches asynchrones via des requêtes HTTP, il est souvent nécessaire d'interroger périodiquement certains champs de la réponse ou de vérifier les résultats. Utilisez les champs
WaitForouCheckForpour répondre à ces besoins.
Syntaxe
Tasks:
- Name: executeHttpRequestExample
Action: ACS::ExecuteHttpRequest
Properties:
Method: POST # Optional. The HTTP method used to submit the request. Valid values: POST and GET. Default value: POST.
URL: 'https://example.com' # Required. The HTTP URL used to specify the location of a specific resource.
Headers: # Optional. The HTTP request headers.
Content-Type: 'application/json'
Query: # Optional. The HTTP request parameters.
Parameter1: value1
Parameter2: value2
Body: # Optional. The HTTP request body. This parameter is valid only if the HTTP method is POST.
Parameter3: value3
Parameter4: value4
CheckFor: # Optional. Verifies the HTTP response results.
# You can add multiple comparison groups under Rules. The relationship between groups is "AND".
Rules:
- PropertySelector: "jq selector" # JQ syntax
Operator: "Equals" # Comparison operator. Valid values: "Equals", "In", "NotIn"
Value: "1" # Expected value
WaitFor: # Optional. Polls and verifies the HTTP response results.
# Rules are the same as above
Rules:
- PropertySelector: "jq selector"
Operator: "Equals"
Value: "1"
FailRules:
# When conditions are met, the task fails immediately
- PropertySelector: "jq selector"
Operator: "Equals"
Value: "1"
# The Retry module configures retry-related parameters
Retry:
Retries: # Optional. The maximum number of retries. The value must be a positive integer, such as 5. Valid values: 0 to 300. Default value: 10.
DelayType: # Exponential(Default), Constant, Linear. For Exponential type, the retry interval is: 2 ^ times(retry count); For Constant type, the retry interval is fixed at Delay; For Linear type, the retry interval is: Delay + BackOff * times(retry count).
Delay: # The retry interval. The value must be a positive integer, such as 10. A value of 10 indicates that the retry interval is 10 seconds. Valid values: 1 to 3600. Default value: 2. This parameter is required if the DelayType attribute is set to Constant or Linear.
BackOff: # The retry interval compensation. The value must be a positive integer. Valid values: 1 to 3600. Default value: 2. This parameter is required if the DelayType attribute is set to Linear.
MaxRetryInterval: # The maximum retry interval. The value must be a positive integer. Valid values: 1 to 1800. Default value: 1800. Unit: seconds.
Outputs:
OutputParameter1:
ValueSelector: 'jq selector' # The jQuery selector for selecting the data to return. The jQuery selector extracts information from the JSON data returned by the API operation. For more information about the jq syntax, visit 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"
}
}
}
]
}Exemples
L'exemple suivant illustre le déclenchement d'un workflow GitHub Actions depuis un modèle OOS afin de déployer des instances Elastic Compute Service (ECS) spécifiques :
FormatVersion: OOS-2019-06-01
Description:
en: OOS template for deploying ECS instances using GitHub Actions.
Parameters:
regionId:
Type: String
Label:
en: RegionId
AssociationProperty: RegionId
Default: '{{ ACS::RegionId }}'
targets:
Type: Json
Label:
en: TargetInstance
AssociationProperty: Targets
AssociationPropertyMetadata:
ResourceType: ALIYUN::ECS::Instance
RegionId: regionId
Status: Running
gitHubBranch:
Type: String
Description:
en: Branch where the deployment will occur.
Tasks:
- Name: getInstance
Description:
en: Views the ECS instances
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.",
},
"Parameters": {
"regionId": {
"Type": "String",
"Label": {
"en": "RegionId",
},
"AssociationProperty": "RegionId",
"Default": "{{ ACS::RegionId }}"
},
"targets": {
"Type": "Json",
"Label": {
"en": "TargetInstance",
},
"AssociationProperty": "Targets",
"AssociationPropertyMetadata": {
"ResourceType": "ALIYUN::ECS::Instance",
"RegionId": "regionId",
"Status": "Running"
}
},
"gitHubBranch": {
"Type": "String",
"Description": {
"en": "Branch where the deployment will occur.",
}
}
},
"Tasks": [
{
"Name": "getInstance",
"Description": {
"en": "Views the ECS instances",
},
"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": {}
}
}
]
}