You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java SDK创建AWS EventBridge一次性调度器遇ScheduleExpression无效错误

解决AWS EventBridge一次性调度器ScheduleExpression无效问题

问题根源及修复步骤

1. 移除ScheduleExpression中的多余单引号

你的代码构造表达式时末尾多了一个单引号,导致格式非法:

// 错误写法
String scheduleExpression =  "at(" + scheduleTime + ")'";

修正为:

// 正确写法
String scheduleExpression =  "at(" + scheduleTime + ")";

2. 确保时间格式符合ISO 8601标准(带时区)

AWS EventBridge的at()表达式要求时间必须包含时区信息,推荐使用UTC时区的Z后缀:

String scheduleTime = "2025-01-18T11:00:00Z";

也可以指定具体时区偏移,比如美国东部时间:

String scheduleTime = "2025-01-18T11:00:00-05:00";

3. 修正API Gateway Target的ARN格式

当前代码直接用URL作为Target的ARN是无效的,需要替换为API Gateway的ARN格式:

// 正确的ARN格式
String apiGatewayArn = "arn:aws:apigateway:us-east-2::/restapis/nbdl323one/resources/fvkez3y11b/methods/GET";

修正后的完整代码片段

package com.example.kafkademo.service;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import software.amazon.awssdk.services.eventbridge.EventBridgeClient;
import software.amazon.awssdk.services.eventbridge.model.*;

@Service
@Slf4j
@RequiredArgsConstructor
public class AWSEventCreatorService {

    private final EventBridgeClient eventBridgeClient;

    public void createEvent() {

        String ruleName = "one-time-rule";
        // 带UTC时区的ISO 8601时间格式
        String scheduleTime = "2025-01-18T11:00:00Z";
        // 正确的API Gateway ARN
        String apiGatewayArn = "arn:aws:apigateway:us-east-2::/restapis/nbdl323one/resources/fvkez3y11b/methods/GET";
        
        String scheduleExpression = "at(" + scheduleTime + ")";
        log.info("scheduleExpression: {}", scheduleExpression);
        
        try {
            // Step 1: 创建规则
            PutRuleResponse ruleResponse = eventBridgeClient.putRule(
                    PutRuleRequest.builder()
                            .name(ruleName)
                            .scheduleExpression(scheduleExpression)
                            .state(RuleState.ENABLED)
                            .build()
            );

            log.info("Rule ARN:{} ", ruleResponse.ruleArn());

            // Step 2: 为规则添加目标
            PutTargetsResponse targetsResponse = eventBridgeClient.putTargets(
                    PutTargetsRequest.builder()
                            .rule(ruleName)
                            .targets(Target.builder()
                                    .id("1")
                                    .arn(apiGatewayArn)
                                    .build())
                            .build()
            );

            if (targetsResponse.failedEntryCount() > 0) {
                log.error("添加目标失败: {} ", targetsResponse.failedEntries());
            } else {
                log.info("目标已成功添加到规则。");
            }

        } catch (EventBridgeException e) {
            log.error("发生错误: {} ", e.awsErrorDetails().errorMessage());
        } finally {
            eventBridgeClient.close();
        }
    }
}

内容的提问来源于stack exchange,提问作者techmagister

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:02:42