本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 EventBridge 排程器中使用通用目標
通用目標是一組可自訂的參數,可讓您為許多 AWS 服務調用更廣泛的 API 操作。例如,您可以使用通用目標參數 (UTP),使用 CreateQueue操作建立新的 Amazon SQS 佇列。
若要使用 AWS CLI或其中一個 EventBridge 排程器SDKs來設定排程的通用目標,您需要指定下列資訊:
-
RoleArn – 您要用於目標之執行角色的 ARN。您指定的執行角色必須具有呼叫您希望排程設為目標之 API 操作的許可。
-
Arn – 完整的服務 ARN,包括您想要鎖定的 API 操作,格式如下:
arn:aws:scheduler:::aws-sdk:。service:apiAction例如,對於 Amazon SQS,您指定的服務名稱為
arn:aws:scheduler:::aws-sdk:。sqs:sendMessage注意
通用目標 ARN 中的
服務值必須符合目標服務的 AWS SDK 服務識別符。此識別符可能與服務的端點字首不同。例如,對於 Amazon Cognito 身分提供者,請使用cognitoidentityprovider(而非cognito-idp)。若要尋找正確的服務識別符,請參閱您要鎖定之服務的 AWS SDK 文件。 -
輸入 – 您使用 EventBridge 排程器傳送至目標 API 的請求參數指定的格式良好的 JSON。您在 中設定的 JSON 參數和形狀
Input取決於您的排程調用的服務 API。若要尋找此資訊,請參閱您要鎖定之服務的 API 參考。
不支援的動作
EventBridge 排程器不支援唯讀 API 動作,例如以下列字首清單開頭的常見GET操作:
get describe list poll receive search scan query select read lookup discover validate batchGet batchDescribe batchRead transactGet adminGet adminList testMigration retrieve testConnection translateDocument isAuthorized invokeModel
例如,GetQueueUrlAPI 動作的服務 ARN 如下:arn:aws:scheduler:::aws-sdk:sqs:。由於 API 動作以 getQueueURLget字首開頭,EventBridge 排程器不支援此目標。同樣,ListBrokers不支援 Amazon MQ 動作做為目標,因為操作以字首 開頭list。
使用通用目標的範例
您在排程Input欄位中傳遞的參數取決於您要叫用的服務 API 接受的請求參數。例如,若要以 Lambda 為目標Invoke,您可以設定 AWS Lambda API 參考中列出的參數。這包括您可以傳遞給 Lambda 函數的選用 JSON 承載。
若要判斷您可以為不同 APIs設定的參數,請參閱該服務的 API 參考。與 Lambda 類似Invoke,某些 APIs接受 URI 參數,以及請求內文承載。在這種情況下,您可以在排程 中指定 URI 路徑參數和 JSON 承載Input。
下列範例示範如何使用通用目標,透過 Lambda、Amazon SQS 和 Step Functions 叫用常見的 API 操作。
範例 Lambda
$aws scheduler create-schedule --name lambda-universal-schedule --schedule-expression 'rate(5 minutes)' \ --target '{"RoleArn": "ROLE_ARN", "Arn":"arn:aws:scheduler:::aws-sdk:lambda:invoke" "Input": "{\"FunctionName\":\"arn:aws:lambda:REGION:123456789012:function:HelloWorld\",\"InvocationType\":\"Event\",\"Payload\":\"{\\\"message\\\":\\\"testing function\\\"}\"}" }' \ --flexible-time-window '{ "Mode": "OFF"}'
範例 Amazon SQS
import boto3 scheduler = boto3.client('scheduler') flex_window = { "Mode": "OFF" } sqs_universal= { "RoleArn": "<ROLE_ARN>", "Arn": "arn:aws:scheduler:::aws-sdk:sqs:sendMessage", "Input": "{\"MessageBody\":\"My message\",\"QueueUrl\":\"<QUEUE_URL>\"}"} } scheduler.create_schedule( Name="sqs-sdk-test", ScheduleExpression="rate(5 minutes)", Target=sqs_universal, FlexibleTimeWindow=flex_window)
範例步驟函數
package com.example; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.scheduler.SchedulerClient; import software.amazon.awssdk.services.scheduler.model.*; public class MySchedulerApp { public static void main(String[] args) { final SchedulerClient client = SchedulerClient.builder() .region(Region.US_WEST_2) .build(); Target stepFunctionsUniversalTarget = Target.builder() .roleArn("<ROLE_ARN>") .arn("arn:aws:scheduler:::aws-sdk:sfn:startExecution") .input("{\"Input\":\"{}\",\"StateMachineArn\":\"<STATE_MACHINE_ARN>\"}") .build(); CreateScheduleRequest createScheduleRequest = CreateScheduleRequest.builder() .name("<SCHEDULE_NAME>") .scheduleExpression("rate(10 minutes)") .target(stepFunctionsUniversalTarget) .flexibleTimeWindow(FlexibleTimeWindow.builder() .mode(FlexibleTimeWindowMode.OFF) .build()) .clientToken("<Token GUID>") .build(); client.createSchedule(createScheduleRequest); System.out.println("Created schedule with rate expression and Step Function universal target"); } }