标签: aws-step-functions

如何使用AWS Step函数将路径参数传递到AWS api网关?

在aws步骤函数中,我需要使用先前状态值的路径参数来调用api网关端点。 在此输入图像描述

步骤功能代码(Api网关调用)

"API Gateway Request": {
  "Type": "Task",
  "Resource": "arn:aws:states:::apigateway:invoke",
  "Parameters": {
    "ApiEndpoint": "****.amazonaws.com",
    "Method": "GET",
    "Headers": {
      "Accept": [
        "application/json"
      ]
    },
    "Stage": "dev",
    "Path": "/sample/$.id",
    "AuthType": "IAM_ROLE"
  },
  "InputPath": "$.id",
  "Next": "Lambda Invoke",
  "ResultPath": "$.myStateInput"
}
Run Code Online (Sandbox Code Playgroud)

该状态的输入:

{ "id": "1231" }
Run Code Online (Sandbox Code Playgroud)

它不是将“$.id”替换为“1231”,而是像下面这样调用 url 在此输入图像描述 API网关:

在此输入图像描述

请告诉我做错了什么?

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

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

使用 Serverless.yml 通过环境变量传递 StateMachine ARN

在测试时我收到以下消息:

 Serverless Warning --------------------------------------
 A valid service attribute to satisfy the declaration     
'self:resources.Outputs.StateMachine.Value' could not be found.
Run Code Online (Sandbox Code Playgroud)

serverless.yml 的摘录

  name: aws
  runtime: nodejs12.x
  stage: ${opt:stage, 'dev'}
  region: us-east-1 
  lambdaHashingVersion: 20201221
  versionFunctions: false
  environment:
    statemachine_arn: ${self:resources.Outputs.StateMachine.Value}
Run Code Online (Sandbox Code Playgroud)

国家职能

stepFunctions:
  stateMachines:
    updateMetric:
       name: updateMetric
       definition:
         Comment: "A state machine to update data"
         StartAt: getMetric
          ........
          ........
           
              
Run Code Online (Sandbox Code Playgroud)

输出

resources:
  - ${file(./resources/dynamodb-table.yml)}
  - Outputs:
      StateMachine:
        Value:
          Ref: UpdateMetric
Run Code Online (Sandbox Code Playgroud)

我只是试图传递状态机的 ARN,以便我可以从 lamda 函数启动状态机。

看来我在输出部分的参考不起作用,或者我没有在这里正确调用它:

 environment:
    statemachine_arn: ${self:resources.Outputs.StateMachine.Value}
Run Code Online (Sandbox Code Playgroud)

aws-lambda serverless-framework aws-step-functions serverless-framework-step-functions

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

AWS Step Functions:列表定义替换

我在 CloudFormation 中定义了一个步骤函数,它使用arn:aws:states:::ecs:runTask.waitForTaskToken. 此任务采用子网列表作为参数,并且需要至少定义 1 个子网。例子:

# Step Function
MyECSTask:
  Type: Task
  Resource: arn:aws:states:::ecs:runTask.waitForTaskToken
  Parameters:
    ...    
    NetworkConfiguration:
      AwsvpcConfiguration:
        ...
        Subnets:
          - <subnet 1>
          - <subnet 2>

Run Code Online (Sandbox Code Playgroud)

我在 StringList SSM 参数中定义了多个子网,我试图通过属性使用 Cloud Formation 将其传递到步骤函数DefinitionSubstitutions。但是,我无法将 SSM StringList 参数作为列表传递到 Step Function 工作流程。将值按原样直接传递到 Step Functions 中不起作用:它要么出错,要么将其作为单个字符串值传递(这是不久前的事,所以我无法准确记住结果)。

相反,唯一对我有用的解决方案是在 CloudFormation 中拆分 StringList 值,并将每个子网作为单独的替换传递到 Step Function:

# Step Function
MyECSTask:
  Type: Task
  Resource: arn:aws:states:::ecs:runTask.waitForTaskToken
  Parameters:
    ...    
    NetworkConfiguration:
      AwsvpcConfiguration:
        ...
        Subnets:
          - ${Subnet1}
          - ${Subnet2}
          - ${Subnet3}
Run Code Online (Sandbox Code Playgroud)
# Cloud Formation
Parameters:
  ListOfSubnets:
    Type: AWS::SSM::Parameter::Value<CommaDelimitedList> …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-step-functions

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

AWS Step 函数和 Athena:我可以从输入路径配置查询字符串吗?

在我的步骤函数中,我想执行 Athena 查询。我能够定义一个步骤并成功执行查询。但是,我想传递一些参数作为输入并在查询字符串中使用它们。例如。

假设我的查询字符串是:

select * from <Data Source>.<database>.<tablename> where partition_0 = '2021';

我希望能够将年份作为输入 json 传递给步骤函数,例如:

{
"YYYY": 2021
}
Run Code Online (Sandbox Code Playgroud)

是否可以在查询字符串中插入输入“YYYY”?如果是这样,怎么办?

步骤函数配置示例:

{
  "Comment": "Start athena exececution",
  "StartAt": "athena",
  "States": {
    "athena": {
      "Type": "Task",
      "InputPath": "$",
      "Resource": "arn:aws:states:::athena:startQueryExecution.sync",
      "Parameters": {
        "QueryString": "select * from mycatalog.mydatabase.mytable where partition_0 = '2021'",
        "WorkGroup": "primary",
        "ResultConfiguration": {
          "OutputLocation": "s3://mys3bucket"
        }
      },
      "Next": "Pass"
    },
    "Pass": {
      "Comment": "A Pass state passes its input to its output, without performing work. Pass states are useful …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-step-functions amazon-athena

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

在 AWS Step Functions 中,可以使用静态字符串格式化参数值吗?

在 AWS Step Functions 中,我们可以使用以下语法将之前步骤中的参数用作输入。

"Parameters": {
        "Details": {
          "weight.$": "$.product.weight",
          "unit": "grams"
        }
      }
Run Code Online (Sandbox Code Playgroud)

举个例子,说product.weight.500。我可以配置一个将接收值的参数500 grams吗?

例如,这样的事情:

"Parameters": {
        "Details": {
          "formatted_weight.$": "{$.product.weight} grams",
        }
      }
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-step-functions

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

AWS Step Functions States.DataLimitExceeded 错误

我目前正在创建一个 Step Functions 工作流程,其中包含一些 Lambda 和其他在一个任务与其他任务之间共享状态的服务。

我主要是在 Lambda 上执行一些外部请求,并在任务之间共享来处理这些数据。

当我尝试测试 Step Functions 工作流程时,收到以下错误:States.DataLimitExceeded,但当我在 Lambda 控制台上测试时,一切正常。

错误:

在此输入图像描述

谁能帮助我了解我在 Step Functions 工作流程中做错了什么?

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

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

AWS Step Functions 等待 CodeBuild 完成

如何等待 CodeBuild 在 Step Functions 状态机内完成?

我现在能想到的唯一等待是使用循环和计时器,就像下面的流程一样,但这是唯一的方法吗?没有“WaitForBuild”操作或类似的操作吗?

在此输入图像描述

拼写错误:BatchGetBuildBatches 应该是 BatchGetBuilds。

amazon-web-services aws-codebuild aws-step-functions

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

我如何调用“sendTaskSuccess”将令牌返回到stepfunction中的等待状态。不使用 lambda 函数

我有一个由 aws 步骤函数中的状态调用的外部服务,现在我想从这个外部服务发送“sendTaskSuccess”到特定的 aws 步骤机器。我怎样才能做到这一点。我知道我们可以从 lambda 调用“sendSuccessToken”,但想知道如何在没有 lambda 的情况下使用“sendSuccessToken”。

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

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

如何用亚马逊国家语言追加到数组?

假设我有一个状态,其输入是

{'myList': ['foo', 'bar']}
Run Code Online (Sandbox Code Playgroud)

其结果是hello,我想将结果附加到列表中,以便状态的输出变为

{'myList': ['foo', 'bar', 'hello']}
Run Code Online (Sandbox Code Playgroud)

我实际上想对几个连续的状态执行此操作,以便每个状态将其结果附加到存储在输入对象中的列表中。

有没有办法做到这一点?通过阅读输入和输出处理以及数组的内在函数,我没有看到解决方案。

amazon-web-services aws-step-functions

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

使用 aws stepfunctions 的内在函数从分割字符串中获取值

我创建了这样的东西:

{
  "Comment": "A description of my awesome state machine",
  "StartAt": "Splitter",
  "States": {
    "Splitter": {
      "Type": "Pass",
      "End": true,
      "Parameters": {
        "out.$": "States.ArrayGetItem(States.StringSplit($.url, '//'), 1)"
      },
      "ResultPath": "$.test"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我需要在分割字符串后获取第二个元素,但它失败并出现以下错误:

An error occurred while executing the state 'Splitter' (entered at the event id #2).
There was an error while evaluating the intrinsic function: States.ArrayGetItem(States.Array(States.StringSplit($.url, '//')),1). 
Invalid arguments in States.ArrayGetItem
Run Code Online (Sandbox Code Playgroud)

我也尝试过这样的:

"States.ArrayGetItem(States.Array(States.StringSplit($.url, '//')),1)"
Run Code Online (Sandbox Code Playgroud)

但错误仍然存​​在。

我想这可以在两种状态下完成Pass,但应该可以在一种状态下完成。

amazon-web-services aws-step-functions

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