标签: aws-step-functions

终止 AWS Lambda 函数的上下文

我有一个 AWS Lambda 函数,当它出现特定错误时,我需要终止它的上下文,因为如果上下文与上次调用相同,再次调用该错误将使 Lambda 函数无法正常工作。

根据我的理解,如果我抛出一个新的,RuntimeException它应该杀死上下文,但它并没有这样做。

知道如何从代码内部杀死上下文吗?

public class IncorrectFileExtensionException 
  extends RuntimeException {
    public IncorrectFileExtensionException(String errorMessage, Throwable err) {
        super(errorMessage, err);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道 Lambda 函数上下文没有被破坏/杀死,因为在我下次调用它时抛出该自定义运行时异常后,它使用相同的上下文,我可以确认这一点,因为它使用相同的 CloudWatch 日志流并且不再执行冷启动。

我需要实现的是杀死该调用的 Lambda 函数上下文,并使其在下次冷启动时启动。

java amazon-web-services aws-lambda aws-step-functions

2
推荐指数
1
解决办法
1504
查看次数

在步骤函数 params.json 的参数中包含日期时间

我的 params.json 输入中有一部分用于一组步骤函数,并且我想修改一些参数以包含在输入参数中呈现的日期时间。

"Predictor": {
    "PredictorName": "normal_name_/*DATETIME HERE*/",
    "ForecastHorizon": 181,
    . . . 
    },
Run Code Online (Sandbox Code Playgroud)

我目前正在通过修改函数第一步中的输入参数来完成此操作,但是这是有问题的,因为每次运行它时,它都会重新渲染日期时间,并且我想“锁定”日期,就像步骤一样函数执行已创建。这可能吗?

python json aws-step-functions serverless aws-sam

2
推荐指数
1
解决办法
4384
查看次数

使用maven为aws lambda创建python部署包

我目前正在致力于在 aws lambda 上部署 python 包。使用 virtualenv 和 zip 工具,我可以轻松创建 lambda zip 文件,上传到 aws 并运行它。我使用以下博客来创建包: https: //joarleymoraes.com/hassle-free-python-lambda-deployment/

但是,我需要使用构建工具将我的代码与公司中的 Jenkins 集成。我们使用 Maven 进行构建,我也需要遵循同样的方法。

我查看了maven-exec-plugin,了解如何按照博客中的步骤使用虚拟环境并创建 zip 文件。但是,我无法按照 Maven 教程中提到的步骤进行操作。

有人遇到过同样的问题吗?如果是这样,你是如何解决的?例如,您如何配置 pom.xml 来为 python aws lambdas 创建部署包?

快速帮助将受到高度赞赏。谢谢

python deployment maven aws-lambda aws-step-functions

1
推荐指数
1
解决办法
2522
查看次数

AWS Step Function 将整个输入作为 lambda java 中的有效负载传递

在我的一个步骤中,我使用 lambda 函数作为任务,并且希望将整个输入作为 传递,以便payload它可以转换为我定义的强类型 Java 对象。

我的数据类型为对象:

@Data
public class JobMetaData {

    public JobMetaData() {

    }

    private String jobName;
    private String jobId;
Run Code Online (Sandbox Code Playgroud)

拉姆达函数:

@Override
public JobMetaData handleRequest(final JobMetaData jobMetaData,
                                 final Context context) {
Run Code Online (Sandbox Code Playgroud)

步:

"Preparing Job": {
  "Next": "Submitting Job",
  "InputPath": "$",
  "OutputPath": "$.bakeJobResult",
  "Type": "Task",
  "Comment": "Preparing Job",
  "Parameters": {
    "FunctionName": "MyLambdaFunctionName",
    "Payload": {
      "$": "$"
    }
  },
  "Resource": "arn:aws:states:::lambda:invoke",
  "ResultPath": "$.bakeJobResult"
}
Run Code Online (Sandbox Code Playgroud)

上述步骤将导致JobMetaData传入 as null。我只能通过将其更改为:

    "Payload": {
      "jobName.$": "$.jobName",
      "jobId.$": "$.jobId"
    }
Run Code Online (Sandbox Code Playgroud)

但是如果我有很多字段,这意味着我需要提取所有 …

aws-step-functions

1
推荐指数
2
解决办法
4717
查看次数

Go Lambda 的 AWS Step Function 错误处理

我找不到如何根据 Go 处理程序返回的错误在 Step 函数中定义错误条件匹配器的详细说明。

handler是一个标准的 Go 函数,error如果从上游服务获取 503 则返回:

func HandleHotelBookingRequest(ctx context.Context, booking HotelBookingRequest) (
    confirmation HotelBookingResponse, err error) {
    
    ...
        if statusCode == http.StatusServiceUnavailable {
            err = errors.New("TransientError")
        } else {

Run Code Online (Sandbox Code Playgroud)

我可以控制函数返回的内容以及它如何格式化字符串;我找不到任何关于在这里使用什么的真实信息(或者在一个Catch子句中),所以这与上面的内容相匹配:

      "Retry": [
        {
          "ErrorEquals": [
            "TransientError"
          ],
          "BackoffRate": 1,
          "IntervalSeconds": 1,
          "MaxAttempts": 3,
          "Comment": "Retry for Transient Errors (503)"
        }
      ]
Run Code Online (Sandbox Code Playgroud)

当我在控制台中测试 Lambda 时,当上游返回 503 时,我得到的结果(如预期):

{
  "errorMessage": "TransientError",
  "errorType": "errorString"
}
Run Code Online (Sandbox Code Playgroud)

我有一个明显的印象(但不太确定如何验证这一点),如果我更改为:

          "ErrorEquals": [
            "errorString"
          ],
Run Code Online (Sandbox Code Playgroud)

有效Retry(至少,查看 …

go aws-lambda aws-step-functions aws-serverless

1
推荐指数
1
解决办法
1560
查看次数

使用同步 StepFunctions 处理 API Gateway 中的错误

我正在开发一个具有以下工作流程的项目:API 网关(使用开放 api 定义)触发来自 AWS 的 Step 函数。有 2 个步骤,如果出现错误,状态机定义中有一个 catch 块。

但我面临错误处理的问题。即使我的代码抛出错误(例如 400),我的 Postman(或其他 REST API 测试工具)也会响应 200。我想要 500/400...

这是代码:

Step 函数定义为无服务器

stepFunctions:
  stateMachines:
    PostPayment:
      name: testfunction
      type: EXPRESS
      definition:
        Comment: 'test'
        StartAt: Function1
        States:
          Function1:
            Type: Task
            Resource: !GetAtt Function1.Arn
            Catch:
              - ErrorEquals: ['HandledError']
                Next: Fallback
            Next: Function2
          Function2:
            Type: Task
            Resource: !GetAtt Function2.Arn
            Catch:
              - ErrorEquals: ['HandledError']
                Next: Fallback
            End: true
          Fallback:
            Type: Fail
            Cause: "Error occured",
            Error: "Error"
Run Code Online (Sandbox Code Playgroud)

这是我的 openapi yml

x-amazon-apigateway-request-validator: all
x-amazon-apigateway-integration:
  requestParameters:
    integration.request.path.id: …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-api-gateway openapi aws-step-functions

1
推荐指数
1
解决办法
1763
查看次数

AWS Step Function 停留在某个状态

我正在尝试用状态机触发粘合作业。当它触发作业时,几秒钟后我可以从glue控制台看到作业已完成,但在状态机中它仍然停留在进行中状态,我等了1小时但它仍然保持在进行中状态。这是我的状态机,

状态机流程图

这是状态机的代码,

{
  "StartAt": "Glue: Convert Raw to JSON",
  "States": {
    "Glue: Convert Raw to JSON": {
      "Type": "Task",
      "Resource": "arn:aws:states:::glue:startJobRun.sync",
      "Parameters": {
        "JobName": "ConvertLandingToRaw",
        "Arguments": {
          "--bucket.$": "$.detail.requestParameters.bucketName",
          "--key.$": "$.detail.requestParameters.key"
        }
      },
      "Next": "Glue: Convert JSON to Parquet"
    },
    "Glue: Convert JSON to Parquet": {
      "Type": "Task",
      "Resource": "arn:aws:states:::glue:startJobRun.sync",
      "Parameters": {
        "JobName": "ConvertJsonToParquet"
      },
      "End": true
    }
  },
  "Comment": "Re-partitioning the data and changing the data type."
}
Run Code Online (Sandbox Code Playgroud)

谁能帮我解决这个问题。我尝试了很多链接但无法得到满意的答案。谢谢

amazon-web-services aws-step-functions aws-glue

1
推荐指数
1
解决办法
1231
查看次数

AWS Step Functions 中的超时和心跳有什么区别?

我在 AWS Step Functions 中使用回调模式,并且正在研究 AWS Step Functions 中关键“超时”和“心跳”之间的区别。

CDK代码:

  queue: sqsStack.queue,
  heartbeat: Duration.minutes(15),
  timeout: Duration.minutes(25),
Run Code Online (Sandbox Code Playgroud)

有什么区别,有哪些最佳实践?

amazon-web-services aws-step-functions

1
推荐指数
1
解决办法
1711
查看次数

在步骤函数 AWS 中使用日期变量

我创建了一个用于创建 EMR 集群的步骤函数,我希望步骤中的日期根据我执行步骤函数的日期进行更改。(如果我今天运行 - 2023 年 6 月 13 日,我希望它在 2023 年 6 月 12 日之前运行)我该怎么做?这是我的代码:

{
  "Comment": "A description of my state machine",
  "StartAt": "EMR CreateCluster",
  "States": {
    "EMR CreateCluster": {
      "Type": "Task",
      "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
      "Parameters": {
        "Name": "IOretrieve",
        "ServiceRole": "EMR_DefaultRole",
        "JobFlowRole": "EMR_EC2_DefaultRole",
        "ReleaseLabel": "emr-6.8.0",
        "Applications": [
          {
            "Name": "Spark"
          }
        ],
        "LogUri": "s3://",
        "VisibleToAllUsers": true,
        "Instances": {
          "Ec2SubnetId": "subnet",
          "Ec2KeyName": "",
          "EmrManagedMasterSecurityGroup": "",
           "EmrManagedSlaveSecurityGroup": "",
          "KeepJobFlowAliveWhenNoSteps": true,
          "InstanceFleets": [
            {
              "InstanceFleetType": "MASTER",
              "Name": "Master",
              "TargetOnDemandCapacity": 1,
              "InstanceTypeConfigs": [ …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-emr aws-step-functions

1
推荐指数
1
解决办法
1234
查看次数

使用选择状态的 AWS Step Function 未达到所有任务状态

我想按照第一次调用,第二次,第三次,第四次,最后结束的顺序调用函数。

我正在使用AWS 管理控制台中的选择示例。

为什么第三个和第四个电话没有被击中?

AWS 步骤函数代码 (JSON)

{
  "Comment": "state functionality",
  "StartAt": "FirstCall",
  "States": {
    "FirstCall": {
      "Type": "Choice",
      "Choices": [
        {
          "Not": {
            "Resource": "rnName",
            "Variable": "$.response",
            "InputPath": "$",
            "ResultPath": "$",
            "OutputPath": "$",
            "StringEquals": "Success Import"
          },
          "Next": "SecondCall"
        },
        {
          "Variable": "$.response",
          "StringEquals": "Success Import ",
          "Next": "ThirdCall"
        },
        {
          "And": [
            {
              "Variable": "$.response",
              "StringEquals": "Success Import"
            },
            {
              "Variable": "$.response",
              "StringEquals": "Success Import"
            }
          ],
          "Next": "FourthCall"
        }
      ]
    },
    "SecondCall": {
      "Type": "Task", …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-step-functions

0
推荐指数
1
解决办法
5273
查看次数

AWS Step Function 的 StartExecution api 是异步的吗?

我有一个用例,我想从现有的 lambda 函数之一异步启动一个步骤函数。为此,我使用 StartExecution API。( https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html )

这个API也是异步启动step函数的。如果是这样,有人可以指出我正确的文档,其中提到了这一点。

amazon-web-services aws-step-functions

0
推荐指数
1
解决办法
2042
查看次数

AWS 步骤功能:动态选择资源

我想根据上一步的结果动态选择 AWS Lambda 工作人员。类似的东西{"Resource": "$.worker_arn"}

"RunWorkers": {
      "Type": "Map",
      "MaxConcurrency": 0,
      "InputPath": "$.output",
      "ResultPath": "$.raw_result",
      "Iterator": {
        "StartAt": "CallWorkerLambda",
        "States": {
          "CallWorkerLambda": {
            "Type": "Task",
            "Resource": "$$.worker_arn",
            "End": true
          }
        }
      },
      "Next": "Aggregate"
    },
Run Code Online (Sandbox Code Playgroud)

上一步的输入预期如下: [{"worker_arn":..., "output":1}, {"worker_arn":..., "output":1}, ...],其中worker_arn所有工人都相同。

当我编写这样的管道时,linter 抱怨它需要一个 ARN。

有没有比将我的工人 lambda 包装到另一个 lambda 更好的选择?

aws-lambda aws-step-functions

0
推荐指数
1
解决办法
144
查看次数