説明
ACS::ExecuteHttpRequest 操作を使用すると、運用および保守 (O&M) タスク中に外部 HTTP/HTTPS リクエストを呼び出し、クラウド リソース O&M タスクと外部 HTTP サービス間の相互作用を容易にすることができます。
ACS::ExecuteHttpRequest 操作は、以下のシナリオで使用できます。
API 統合: ACS::ExecuteHttpRequest 操作を使用して、サードパーティ サービスの API を呼び出し、情報のクエリ、操作の実行、またはサードパーティ サービスの統合を行うことができます。
カスタム通知: スクリプト実行中の特定の段階で通知を送信する場合、ACS::ExecuteHttpRequest 操作を使用して、指定された Webhook または通知サービスに HTTP リクエストを送信できます。これにより、メール、ショートメッセージ、またはプッシュ通知で通知を送信できます。
データ収集とレポート: ACS::ExecuteHttpRequest 操作を使用して、O&M タスクに関する情報をリモートサーバーまたはデータプラットフォームに送信し、監査、監視、およびレポート作成を行うことができます。
自動プロセス起動: CloudOps Orchestration Service(OOS)テンプレートの実行時に、ACS::ExecuteHttpRequest 操作を使用して、他の自動ツールまたはスクリプトの実行をトリガーできます。たとえば、継続的インテグレーション/継続的デプロイメント(CI/CD)システムでデプロイメントプロセスを開始したり、他の外部システムで O&M タスクを開始したりできます。
外部検証と承認: O&M プロセス中に ID を認証し、操作権限を検証する必要がある場合があります。この場合、ACS::ExecuteHttpRequest 操作を使用して、外部認証システムにリクエストを送信し、オペレーターの ID を検証したり、必要な操作権限を検証したりできます。
非同期タスクの完了を待機する、または呼び出し結果を確認する: HTTP リクエストに非同期タスクが含まれる一部のシナリオでは、レスポンス内の特定のフィールドをポーリングして確認するか、呼び出し結果を確認する必要があります。 WaitFor/CheckFor フィールドを使用して、これらの要件を実装できます。
構文
Tasks:
- Name: executeHttpRequestExample
Action: ACS::ExecuteHttpRequest
Properties:
Method: POST # オプション。リクエストの送信に使用する HTTP メソッド。有効な値: POST および GET。デフォルト値: POST。
URL: 'https://example.com' # 必須。特定のリソースの場所を指定するために使用される HTTP URL。
Headers: # オプション。HTTP リクエスト ヘッダー。
Content-Type: 'application/json'
Query: # オプション。HTTP リクエスト パラメーター。
Parameter1: value1
Parameter2: value2
Body: # オプション。HTTP リクエスト本文。このパラメーターは、HTTP メソッドが 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: # オプション。最大リトライ回数。値は 5 などの正の整数である必要があります。有効な値: 0 ~ 300。デフォルト値: 10。
DelayType: # Exponential(デフォルト)、Constant、Linear。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:
OutputParameter1:
ValueSelector: 'jq selector' # 返すデータを選択するための jQuery セレクター。jQuery セレクターは、API 操作によって返された 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"
}
}
}
]
}例
次のサンプルコードは、GitHub Actions をトリガーして指定された Elastic Compute Service(ECS)インスタンスをデプロイするために使用される OOS テンプレートで使用するコードブランチを指定する HTTP リクエストを送信する方法の例を示しています。
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": {}
}
}
]
}