使用範本化目標 - EventBridge 排程器

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

使用範本化目標

範本化目標是跨一組核心 AWS 服務 (例如 Amazon SQS、Lambda 和 Step Functions) 的一組通用 API 操作。例如,您可以透過提供函數 ARN 來鎖定 Lambda 的Invoke作業,或使用佇列 ARN 提供 Amazon SQS 的SendMessage作業。若要設定範本化目標,您還必須授與排程執行角色的權限,才能執行目標 API 作業。

若要使用 AWS CLI 或其中一個 S EventBridge cheduler SDK 以程式設計方式設定範本目標,您需要指定執行角色的 ARN、目標資源的 ARN、您希望 EventBridge 排程器傳遞至目標的選擇性輸入,以及某些範本化目標的唯一參數集,以及該目標的其他組態選項。當您指定範本化目標資源的 ARN 時, EventBridge 排程器會自動假設您要呼叫該服務支援的 API 作業。如果您希望 EventBridge 排程器針對服務以不同的 API 作業為目標,則必須將目標設定為通用目標

以下是 EventBridge Scheduler 支援的所有樣板化目標的完整清單,以及每個目標的唯一相關參數集 (如果適用)。選擇每個參數集的連結,以查看「EventBridge 排程器 API 參考」中的必要欄位和選用欄位。

使用下列範例來瞭解如何設定不同的範本化目標,以及每個描述目標的必要 IAM 許可。

Amazon SQS SendMessage

範例 執行角色的權限原則
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sqs:SendMessage" ], "Effect": "Allow", "Resource": "*" } ] }
範例 AWS CLI
$ aws scheduler create-schedule --name sqs-templated --schedule-expression 'rate(5 minutes)' \ --target '{"RoleArn": "ROLE_ARN", "Arn":"QUEUE_ARN", "Input": "Message for scheduleArn: '<aws.scheduler.schedule-arn>', scheduledTime: '<aws.scheduler.scheduled-time>'" }' \ --flexible-time-window '{ "Mode": "OFF"}'
範例 Python SDK
import boto3 scheduler = boto3.client('scheduler') flex_window = { "Mode": "OFF" } sqs_templated = { "RoleArn": "<ROLE_ARN>", "Arn": "<QUEUE_ARN>", "Input": "Message for scheduleArn: '<aws.scheduler.schedule-arn>', scheduledTime: '<aws.scheduler.scheduled-time>'" } scheduler.create_schedule( Name="sqs-python-templated", ScheduleExpression="rate(5 minutes)", Target=sqs_templated, FlexibleTimeWindow=flex_window)
範例 Java 開發套件
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 sqsTarget = Target.builder() .roleArn("<ROLE_ARN>") .arn("<QUEUE_ARN>") .input("Message for scheduleArn: '<aws.scheduler.schedule-arn>', scheduledTime: '<aws.scheduler.scheduled-time>'") .build(); CreateScheduleRequest createScheduleRequest = CreateScheduleRequest.builder() .name("<SCHEDULE NAME>") .scheduleExpression("rate(10 minutes)") .target(sqsTarget) .flexibleTimeWindow(FlexibleTimeWindow.builder() .mode(FlexibleTimeWindowMode.OFF) .build()) .build(); client.createSchedule(createScheduleRequest); System.out.println("Created schedule with rate expression and an Amazon SQS templated target"); } }

Lambda Invoke

範例 執行角色的權限原則
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Effect": "Allow", "Resource": "*" } ] }
範例 AWS CLI
$ aws scheduler create-schedule --name lambda-templated-schedule --schedule-expression 'rate(5 minutes)' \ --target '{"RoleArn": "ROLE_ARN", "Arn":"FUNCTION_ARN", "Input": "{ \"Payload\": \"TEST_PAYLOAD\" }" }' \ --flexible-time-window '{ "Mode": "OFF"}'
範例 Python SDK
import boto3 scheduler = boto3.client('scheduler') flex_window = { "Mode": "OFF" } lambda_templated = { "RoleArn": "<ROLE_ARN>", "Arn": "<LAMBDA_ARN>", "Input": "{ 'Payload': 'TEST_PAYLOAD' }"} } scheduler.create_schedule( Name="lambda-python-templated", ScheduleExpression="rate(5 minutes)", Target=lambda_templated, FlexibleTimeWindow=flex_window)
範例 Java 開發套件
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 lambdaTarget = Target.builder() .roleArn("<ROLE_ARN>") .arn("<Lambda ARN>") .input("{ 'Payload': 'TEST_PAYLOAD' }") .build(); CreateScheduleRequest createScheduleRequest = CreateScheduleRequest.builder() .name("<SCHEDULE_NAME>") .scheduleExpression("rate(10 minutes)") .target(lambdaTarget) .flexibleTimeWindow(FlexibleTimeWindow.builder() .mode(FlexibleTimeWindowMode.OFF) .build()) .clientToken("<Token GUID>") .build(); client.createSchedule(createScheduleRequest); System.out.println("Created schedule with rate expression and Lambda templated target"); } }

Step Functions StartExecution

範例 執行角色的權限原則
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "states:StartExecution" ], "Effect": "Allow", "Resource": "*" } ] }
範例 AWS CLI
$ aws scheduler create-schedule --name sfn-templated-schedule --schedule-expression 'rate(5 minutes)' \ --target '{"RoleArn": "ROLE_ARN", "Arn":"STATE_MACHINE_ARN", "Input": "{ \"Payload\": \"TEST_PAYLOAD\" }" }' \ --flexible-time-window '{ "Mode": "OFF"}'
範例 Python SDK
import boto3 scheduler = boto3.client('scheduler') flex_window = { "Mode": "OFF" } sfn_templated= { "RoleArn": "<ROLE_ARN>", "Arn": "<STATE_MACHINE_ARN>", "Input": "{ 'Payload': 'TEST_PAYLOAD' }" } scheduler.create_schedule(Name="sfn-python-templated", ScheduleExpression="rate(5 minutes)", Target=sfn_templated, FlexibleTimeWindow=flex_window)
範例 Java 開發套件
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 stepFunctionsTarget = Target.builder() .roleArn("<ROLE_ARN>") .arn("<STATE_MACHINE_ARN>") .input("{ 'Payload': 'TEST_PAYLOAD' }") .build(); CreateScheduleRequest createScheduleRequest = CreateScheduleRequest.builder() .name("<SCHEDULE_NAME>") .scheduleExpression("rate(10 minutes)") .target(stepFunctionsTarget) .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 templated target"); } }