在 EventBridge 排程器中使用通用目標 - EventBridge 排程器

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 EventBridge 排程器中使用通用目標

通用目標是一組可自訂的參數,可讓您針對許多 AWS 服務叫用更廣泛的API作業集。例如,您可以使用通用目標參數 (UTP) 使用該CreateQueue操作建立新的 Amazon SQS 佇列。

若要使用或其中一個排程器設定 AWS CLI EventBridge 排程的通用目標SDKs,您必須指定下列資訊:

  • RoleArn— 您要用ARN於目標的執行角色。您指定的執行角色必須具有呼叫您要排程鎖定之API作業的權限。

  • Arn — 完整的服務ARN,包括您要定位的API作業,格式如下:arn:aws:scheduler:::aws-sdk:service:apiAction

    例如,對於 AmazonSQS,您指定的服務名稱為arn:aws:scheduler:::aws-sdk:sqs:sendMessage

  • 輸入 — JSON 您使用「 EventBridge 排程器」傳送至目標API的要求參數來指定格式良好。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:getQueueURL。由於API動作以get前置詞開始,因此「 EventBridge 排程器」不支援此目標。同樣地,Amazon MQ 動作不支援做為目標,因為作業ListBrokers是從前置詞開始的。list

使用通用目標的範例

您在排程Input欄位中傳遞的參數取決於您要叫用之服務所接受的API要求參數。例如,若要以 Lambda 為目標 Invoke,您可以設定「參AWS Lambda API考」中列出的參數。這包括您可以傳遞給 Lambda 函數的選用JSON承載

若要決定您可以為其他設定的參數APIs,請參閱該服務的參API考資料。類似於 LambdaInvoke,一些APIs接受URI參數,以及請求主體有效載荷。在這種情況下,您可以在排程中指定URI路徑參數以及JSON有效負載Input

下列範例說明如何使用通用目標來叫用 Lambda SQS、Amazon 和 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)
範例 Step Functions
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"); } }