2

我有以下一段脚本,它为触发的新步骤函数连续汇集一个活动 ARN。我还有一个每 1 分钟触发一次的 cloudwatch 事件触发器。

import boto3
import time

region = 'ap-southeast-1'
activity_arn = 'xxxxxxxx'  #correct arn is filled here

while True:
    client = boto3.client('stepfunctions', region_name=region)
    response = client.get_activity_task(activityArn=activity_arn,
                                        workerName='daily_market_data_batch')    
    activity_token = response['taskToken']
    input_params = json.loads(response['input'])

    # simulating running some long tasks by sending heartbeats
    for i in range(10):
        client.send_task_heartbeat(taskToken=activity_token)
        time.sleep(1)

    print("================")
    print(input_params)
    client.send_task_success(taskToken=activity_token, output='true')

这就是状态机的设置方式

{
  "Comment": "An example using a Task state.",
  "StartAt": "getGreeting",
  "Version": "1.0",
  "TimeoutSeconds": 300,
  "States":
  {
    "getGreeting": {
      "Type": "Task",
      "Resource": "arn:aws:states:ap-southeast-1:XXXXXXXXXX:activity:get_greeting",
      "End": true
    }
}

我期望看到的:

因为脚本有一个永无止境的 while 循环,所以我希望每当 Cloud Watch 触发一个新的 step 函数时脚本就会运行。当每个步骤函数运行时,我希望在脚本的服务器端看到“input_params”的相应打印输出。

我实际观察到的:

云手表确实按照规定每 1 分钟触发一次阶跃函数。但是,我的脚本没有捕捉到所有步骤函数的运行。正如您所看到的,有时步进函数会超时。在我的脚本服务器上,那些错过的步骤函数运行没有打印输出。

在此处输入图像描述

我需要确保我的活动脚本不会错过任何触发的步骤函数。谁能指出我的脚本服务器端无法捕获某些步骤函数运行的原因是什么?非常感谢。

4

0 回答 0