amazon-web-services - AWS step 函数可以执行超过 25000 次吗?

标签 amazon-web-services aws-lambda aws-sdk aws-step-functions

我目前正在评估可以处理单个文档的 AWS 状态机。状态机需要 5-10 分钟来处理单个文档。

{
  "Comment":"Process document",
  "StartAt": "InitialState",
  "States": {
          //the document goes through multiple states here
  }
}

C# 代码通过为每个文档传递一些 json 来调用状态机。就像是
      // max 100 documents
      public Task Process(IEnumerable<Document> documents)
      {   
          var amazonStepFunctionsConfig = new AmazonStepFunctionsConfig { RegionEndpoint = RegionEndpoint.USWest2 };
          using (var amazonStepFunctionsClient = new AmazonStepFunctionsClient(awsAccessKeyId, awsSecretAccessKey, amazonStepFunctionsConfig))
          {
            foreach(var document in documents)
            {
                var jsonData1 = JsonConvert.SerializeObject(document);
                var startExecutionRequest = new StartExecutionRequest
                {
                  Input = jsonData1,
                  Name = document.Id, 
                  StateMachineArn = "arn:aws:states:us-west-2:<SomeNumber>:stateMachine:ProcessDocument"
                };
                var taskStartExecutionResponse = await amazonStepFunctionsClient.StartExecutionAsync(startExecutionRequest);                
            }
          }
      }

我们批量处理文件100 .所以在上面的循环中,最大文档数将为 100 .然而,我们每周处理数以千计的文件(25000+)。

根据 AWS documentation Maximum execution history size is 25,000 events. If the execution history reaches this limit the execution will fail .

这是否意味着我们不能执行单个状态机超过 25000 次?
为什么状态机的执行应该取决于它的历史,为什么 AWS 不能只清除历史?

我知道有一种方法可以到 continue as new execution但我只是想了解历史限制及其与状态机执行的关系,我的理解是否正确?

更新 1
我不认为这是重复的问题。我试图找出我对历史极限的理解是否正确?为什么历史与状态机可以执行的次数有关?当状态机执行时,它会创建历史记录,如果历史记录超过 25000+,则清除它们或归档它们。为什么 AWS 会停止执行状态机。那没有意义。

所以问题是,单状态机(唯一的 arn)可以在循环中执行超过 25000 次吗?
如果我必须创建新的状态机(在 25000 次执行之后),那个状态机不会有不同的 arn 吗?

如果我必须关注 linked SO post我在哪里可以获得当前的执行次数?他也在 step 函数中循环,而我在循环中调用 step 函数

更新 2
所以只是为了测试我创建了以下状态机
{
  "StartAt": "HelloWorld",
  "States": {
    "HelloWorld": {
      "Type": "Pass",
      "Result": "Hello World!",
      "End": true
    }
  }
}

并执行了 26000 次,没有失败
    public static async Task Main(string[] args)
    {
        AmazonStepFunctionsClient client = new AmazonStepFunctionsClient("my key", "my secret key", Amazon.RegionEndpoint.USWest2);
        for (int i = 1; i <= 26000; i++)
        {
            var startExecutionRequest = new StartExecutionRequest
            {
                Input = JsonConvert.SerializeObject(new { }),
                Name = i.ToString(),
                StateMachineArn = "arn:aws:states:us-west-2:xxxxx:stateMachine:MySimpleStateMachine"
            };

            var response = await client.StartExecutionAsync(startExecutionRequest);
        }

        Console.WriteLine("Press any key to continue");
        Console.ReadKey();
    }

在 AWS 控制台上,我能够提取所有 26000 次执行的历史记录
enter image description here

所以我不确定 Maximum execution history size is 25,000 events 到底是什么意思

最佳答案

我不认为你做对了。 25,000 限制用于状态机执行历史记录。您已经测试了 26,000 次状态机执行。状态机执行限制为 1,000,000 次打开执行。

状态机最多可以运行 1 年,在此期间其执行历史不应超过 25,000。

希望能帮助到你。

关于amazon-web-services - AWS step 函数可以执行超过 25000 次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54259775/

相关文章:

javascript - 拒绝访问 : Not authorized to perform sts:AssumeRoleWithWebIdentity

python - AWS S3 + Django : Files stored in S3 accesible by user

android - 如何在 Android Studio 中添加 Amazon cognito?

amazon-web-services - Neptune 加载程序 FROM_OR_TO_VERTEX_ARE_MISSING

php - 亚马逊商城 PHP 定价 api

java - 如何使用 mockito 进行集成测试

amazon-web-services - 如何连接 VPC 内的 AWS lambda 以连接到 cloudformation 堆栈?

amazon-web-services - 无法修复 Amazon Athena 中的分区

amazon-web-services - 带有 Lambda 代理的 AWS API Gateway 总是产生 base64 字符串响应

node.js - Docker容器内部网络错误: connect ECONNREFUSED 127. 0.0.1:8002