Coder Social home page Coder Social logo

serverless-operations / serverless-step-functions Goto Github PK

View Code? Open in Web Editor NEW
1.0K 20.0 204.0 5.05 MB

AWS Step Functions plugin for Serverless Framework ⚡️

License: Other

JavaScript 100.00%
serverless serverless-plugin serverless-framework serverless-architectures aws step-functions

serverless-step-functions's People

Contributors

akshaydk avatar alanfb avatar bahrmichael avatar bayoudhi avatar bucha09 avatar cm-kajiwara avatar deconltd avatar dependabot[bot] avatar eoinsha avatar hassaku63 avatar horike37 avatar hubertpompecki avatar j0k3r avatar juancarle avatar kitsuyui avatar kuhiga avatar lolbyte-code avatar lopburny avatar maafk avatar medikoo avatar noxharmonium avatar paolorossig avatar raphaeldeem-acorns avatar shota avatar stevecaldwell77 avatar theburningmonk avatar tvhees avatar vlewin avatar yudao avatar zirkelc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

serverless-step-functions's Issues

Can not get the stateMachine Arn as the environment virables

Hi,
I have followed the tutorial in the end of the README and I'm trying to get the stateMachine's arn. However, there seems a error:
Template format error: Unresolved resource dependencies
[MyStateMachine] in the Resources block of the template

Could you help me to figure it out? I just followed the same code as the tutorial.

Feature Request: Not 0 exit status when fail.

$ sls invoke stepf -t hello_automation
Serverless: Start function hello_automation...


Execution Result -----------------------------------------

{ ...
  status: 'FAILED',
  input: '{}' }

Error Log ------------------------------------------------

{ cause: 'some error' }
$ echo $?
0

現状このように、成功・失敗にかかわらず
終了ステータスコードが 0 になっていると思います。
Unix 的な伝統にもとづき、失敗した時は 0 以外で終了するような機能があるとよいな、と思います。

Minor issue with empty activies in v1.0.0

I dont' have any activities and as a result my servlerless file looks sort of like:

stepFunctions:
  stateMachines:
    hello: ...

As a result I am getting this error:

Serverless: Packaging service...

  Serverless Error ---------------------------------------

     activities property is not an array Please check the
     README for more info.

Simply changing my file to this fixes it:

stepFunctions:
  activities: []
  stateMachines:
    hello: ...

But it seems like activities should default to an empty array automatically instead of null in this case.

Chosing the IAM Role

It would be great to enable us to pick the name of the execution role:

e.g.

stepFunctions:
  role: arn:aws:iam:::role/InsertYourFavoriteRoleNameHere
  stateMachines:
    myStateMachine:
      Comment: 'A state machine'
...```

is it possible to keep the "Sample statemachines setting in serverless.yml" section into the README?

hey!

I was searching how to use another types like catch , wait and parallel with this plugin sadly with any good information until found this one https://github.com/horike37/serverless-step-functions/blob/6d3ebb3acc149e975c77c4db41fb4a95d014b7fb/README.md#sample-statemachines-setting-in-serverlessyml . Actually I fixed my issues following those examples.

I think those examples are pretty useful to have at hand.

What do you think to keep it into the master README of this plugin?

Thanks!

Custom name not working

I'm very excited to be able to use a custom name! I just gave it a go and am getting an error.

The CloudFormation template is invalid: Template format error: Unresolved resource dependencies [Hellostepfunc1StepFunctionsStateMachine] in the Resources block of the template

It appears that the step function is getting created with correct name, but the resource is being referenced using the old, compiled name.

Here is an example of the serverless.yml that will cause the issue:

service: step-functions
custom:
  accountId: xxxxxxxx
plugins:
  - serverless-step-functions
provider:
  name: aws
  runtime: nodejs6.10
functions:
  hellofunc:
    handler: handler.hello
stepFunctions:
  stateMachines:
    hellostepfunc1:
      events:
        - http:
            path: api/track
            method: post
      name: myStateMachine
      definition:
        Comment: "A Hello World example of the Amazon States Language using an AWS Lambda Function"
        StartAt: HelloWorld1
        States:
          HelloWorld1:
            Type: Task
            Resource: arn:aws:lambda:${opt:region}:${self:custom.accountId}:function:${self:service}-${opt:stage}-hello
            End: true

Thanks!

Using Version 1.0.3

Error creating IAM Role for Step Functions

It looks like there are some bugs when creating IAM Role for Step Functions. This plugin try to create IAM Role when it can't find statesExecutionRole-us-east-1 role, but always fail because of some reasons.

  1. this.iamRoleName is not defined.

When createRole is invoked, this.iamRoleName variable is not set, so failing with this error message.

$ sls deploy stepf -t hellostepfunc -v
Serverless: Start to deploy hellostepfunc step function...

  Serverless Error ---------------------------------------

     Missing required key 'RoleName' in params

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues

  Your Environment Information -----------------------------
     OS:                 darwin
     Node Version:       7.1.0
     Serverless Version: 1.4.0
  1. Invalid Policy Document

Also assumeRolePolicyDocument, passed to createRole as a param, is not valid policy document. It's value must be assume role policy, not policy for invoking Lambda function. Here is a error message with passing string to this.iamRoleName.

$ sls deploy stepf -t hellostepfunc -v
Serverless: Start to deploy hellostepfunc step function...

  Serverless Error ---------------------------------------

     Has prohibited field Resource

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues

  Your Environment Information -----------------------------
     OS:                 darwin
     Node Version:       7.1.0
     Serverless Version: 1.4.0

I think it's JSON object should be looks like this.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "states.<region-defined-in-provider>.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

And I don't know how to implement, but you have to define poliicy for invoking Lambda function somewhere in code.

Thanks for very useful plugin!

Adding step functions to existing project fails with undefined error

I'm updating to v1.0.0 and I hit an error where its trying to, presumably, update step functions in an existing stack that I have previously deployed but the step functions don't yet exist in that stack.

  Type Error ---------------------------------------------

     Cannot read property 'forEach' of undefined

     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

  Stack Trace --------------------------------------------

TypeError: Cannot read property 'forEach' of undefined
    at _.forEach (/Users/justin/code/input-system/node_modules/serverless-step-functions/lib/index.js:140:29)
    at arrayEach (/Users/justin/code/input-system/node_modules/lodash/lodash.js:537:11)
    at Function.forEach (/Users/justin/code/input-system/node_modules/lodash/lodash.js:9359:14)
    at ServerlessStepFunctions.display (/Users/justin/code/input-system/node_modules/serverless-step-functions/lib/index.js:138:7)
    at runCallback (timers.js:637:20)
    at tryOnImmediate (timers.js:610:5)
    at processImmediate [as _immediateCallback] (timers.js:582:5)
From previous event:
    at PluginManager.invoke (/Users/justin/code/input-system/node_modules/serverless/lib/classes/PluginManager.js:210:22)
    at PluginManager.run (/Users/justin/code/input-system/node_modules/serverless/lib/classes/PluginManager.js:225:17)
    at Serverless.run (/Users/justin/code/input-system/node_modules/serverless/lib/Serverless.js:97:31)
    at serverless.init.then (/Users/justin/code/input-system/node_modules/serverless/bin/serverless:23:50)

Variables are not being replaced

Variables replaced. So something like this dosent work:

stepFunctions:
  hellostepfunc:
    Comment: "A Hello World example of the Amazon States Language using an AWS External Lambda Function"
    StartAt: HelloWorld
    States: 
      HelloWorld: 
        Type: Task
        Resource: arn:aws:lambda:${self:provider.region}:${self:custom.accountid}:function:external_hello_lambda_function
        End: true

Provided ARN for resource is invalid

hey guys!

I'm getting an error with the following data using the plugin after start the state machine
{"error":"States.Runtime","cause":"An error occurred while scheduling the state 'CreatePhotoDocument'. The provided ARN 'create' is invalid."}

screen shot 2017-04-19 at 16 26 24

This is part of my YML file

    provider:
      iamRoleStatements:
        - Effect: Allow
          Action:
            - states:*
          Resource: "*"

    functions:
      create:
        handler: handler.create
      resize:
        handler: handler.resize

    stepFunctions:
      stateMachines:
        photoResizeWatermark:
          events:
            - http:
                path: ''
                method: POST
                cors: true
          definition:
            StartAt: CreatePhotoDocument
            States:
              CreatePhotoDocument:
                Type: Task
                Resource: create
                Next: ResizeThumbAndPreview
              ResizeThumbAndPreview:
                Type: Task
                Resource: resize
                End: true

could you give me a hand on this please?

Thanks

Specification with v1.0

Hi everyone.
We discussed about including the step functions feature into Serverless Core for a while.
However, We decided to postpone that finally. The reason for that we should decide how to manage a plovider specific feature(Serverless is multi-provider support)
See the detail: serverless/serverless#3024

Therefore I will update the plugin to v1.0 and out of beta, based feedback I got.
Here is specification for v1.0. If you have any ideas, please comment here!

Specification for v1.0

serverless.yml

provider:
  name: aws
  runtime: nodejs4.3

functions:
  hellofunc:
    handler: handler.hello

stepFunctions:
  stateMachines:
    myStateMachine1:
      role: arn:aws:iam:::role/InsertYourFavoriteRoleNameHere #Optional, you can chose the existing IAM Role
      events: #Here is events for stepfunctions. You can define http, schedule and cloudwatchEvent.
        - http:
          method: GET
          path: executeMyStateMachine
        - schedule: rate(2 hours)
        - cloudwatchEvent:
          event:
            source:
              - "aws.ec2"
            detail-type:
              - "EC2 Instance State-change Notification"
            detail:
              state:
                - pending
      definition: #Required. Here is the Amazon States Language definition.
        Comment: "A Hello World example of the Amazon States Language using an AWS Lambda Function"
        StartAt: HelloWorld1
        States: 
          HelloWorld1:
            Type: Task
            Resource: [lambda name | activity name | lambda ARN | activity ARN | Fn::GetAtt (lambda) | Fn::Ref (activity) | Fn::ImportValue]
            End: true
  activities: #Here is Task activites
    - myTask

deploy

Include this in sls deploy without adding new commands.

invoke

Add sls invoke --stepfunction <statemachin name> option. -sf is as short version.

deploy fails with node 6.9.2. that.sdk[service] is not a constructor

I am receiving the following error:

sls deploy stepf --state stepFuncSteps -v
Serverless: Start to deploy stepFuncSteps step function...

Type Error ---------------------------------------------

 that.sdk[service] is not a constructor

 For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

Stack Trace --------------------------------------------

TypeError: that.sdk[service] is not a constructor
at persistentRequest (/usr/local/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:149:26)
at doCall (/usr/local/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:134:9)
at BbPromise (/usr/local/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:145:14)
at Promise._execute (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/debuggability.js:299:9)
at Promise._resolveFromExecutor (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:481:18)
at new Promise (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:77:14)
at persistentRequest (/usr/local/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:132:38)
at AwsProvider.request (/usr/local/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:148:12)
at ServerlessStepFunctions.deleteStateMachine (/Users/marc/dev/message-step-functions/node_modules/serverless-step-functions/index.js:307:26)
at ServerlessStepFunctions.tryCatcher (/Users/marc/dev/message-step-functions/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/marc/dev/message-step-functions/node_modules/bluebird/js/release/promise.js:510:31)
at Promise._settlePromise (/Users/marc/dev/message-step-functions/node_modules/bluebird/js/release/promise.js:567:18)
at Promise._settlePromise0 (/Users/marc/dev/message-step-functions/node_modules/bluebird/js/release/promise.js:612:10)
at Promise._settlePromises (/Users/marc/dev/message-step-functions/node_modules/bluebird/js/release/promise.js:691:18)
at Async._drainQueue (/Users/marc/dev/message-step-functions/node_modules/bluebird/js/release/async.js:133:16)
at Async._drainQueues (/Users/marc/dev/message-step-functions/node_modules/bluebird/js/release/async.js:143:10)
at Immediate.Async.drainQueues (/Users/marc/dev/message-step-functions/node_modules/bluebird/js/release/async.js:17:14)
at runCallback (timers.js:637:20)
at tryOnImmediate (timers.js:610:5)
at processImmediate [as _immediateCallback] (timers.js:582:5)

Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues

 Please report this error. We think it might be a bug.

Your Environment Information -----------------------------
OS: darwin
Node Version: 6.9.2
Serverless Version: 1.3.0

Step function names have changed

Example serverless file:

service: example
plugins:
  - serverless-step-functions # 1.0
stepFunctions:
  stateMachines:
    foo:
      definition: ...

Expected
The generated lambda should be named: example-justin-foo

Actual
The generated lambda is FooStepFunctionsStateMachine-2C1XDD2NCZCR

Is there any way to control the name so I can have what it was before? Specifically for my usecases it must have the stage in it, it must start with the service name and it cannot have randomness in the name.

AWS Region not read from provider.region

Great plugin! I noticed one problem. I have this in serverless.yml:

provider:
  stage: dev
  region: eu-west-1
  profile: xxx

When I run sls deploy stepf, the state machine itself is deployed to eu-west-1, but the Lambda ARNs point to us-east-1 so they don't work and execution fails.

It works correctly when I manually specify sls deploy stepf -r eu-west-1 .

Add the current `stage` name into the State Machine name

I have multiple stages deployed to my account and currently this:

stepFunctions:
  stateMachines:
    Example: ...

Will create a StateMachine like this:

ExampleStepFunctionsStateMachine-QWUYMJP6O0QH

The problem is that I have maybe half a dozen stages in a single account and I cannot tell the difference between them now. I would have 6 ExampleStepFunctionStateMachine-* state machines and there is no way to distinguish which is staging and which is prod for example.

What would be really nice is just if the name of the created state machine also had the stage in it, for example:

ExampleProdStepFunctionsStateMachine-QWUYMJP6O0QH
ExampleStagStepFunctionsStateMachine-IOUME4NGKVE2

etc.

Parallel tasks do not have their arn identifiers resolved

When I try to use a parallel task the Resource's aren't being resolved within the Parallel task's Branches key.

Example serverless configuration

stepFunctions:
  createOrderStepFunc:
    Comment: "Step function that creates a new order"
    StartAt: FirstTask
    States:
      FirstTask:
        Type: Task
        Resource: firstTaskFunc
        Next: GetReports
      GetReports:
        Type: Parallel
        End: true
        Branches:
          -
            StartAt: GetReport1
            States:
              GetReport1:
                Type: Task
                Resource: getReport1Func
                End: true
          -
            StartAt: GetReport2
            States:
              GetReport2:
                Type: Task
                Resource: getReport2Func
                End: true

When this step function gets deployed to AWS, the following code is generated:

{
    "Comment": "Step function that creates a new order",
    "StartAt": "FirstTask",
    "States": {
        "FirstTask": {
            "Type": "Task",
            "Resource": "arn:aws:lambda:us-west-2:<id>:function:dev-firstTaskFunc",
            "Next": "GetReports"
        },
        "GetReports": {
            "Type": "Parallel",
            "End": true,
            "Branches": [{
                "StartAt": "GetReport1",
                "States": {
                    "GetReport1": {
                        "Type": "Task",
                        "Resource": "getReport1Func",
                        "End": true
                    }
                }
            }, {
                "StartAt": "GetReport2",
                "States": {
                    "GetReport2": {
                        "Type": "Task",
                        "Resource": "getReport2Func",
                        "End": true
                    }
                }
            }]
        }
    }
}

This step function does not work correctly, as the Resource entry within the nested States tag needs to be resolved for it to work.

Support Tasks Deployment

It would be cool to be able to create new tasks and reference them from the workflow
Maybe something like this:

tasks
  MyTask:
    name: my_task_custom_name_${self:provider.stage}

Invalid principal deploying IamRoleStateMachineExecution Role

Hi,
using
[email protected]
[email protected]

found a problem while deploying a state machine

IamRoleStateMachineExecution Invalid principal in policy: "SERVICE":"states.${opt:region, self:custom.defaultRegion}.amazonaws.com"

I'm a noob at nodejs but I managed to fix it doing in the serverless-step-functions/lib/deploy/stepFunctions/compileIamRole.js file :

- iamRoleStateMachineExecutionTemplate.replace('[region]', this.region)
+ iamRoleStateMachineExecutionTemplate.replace('[region]', this.options.region)

please see the attached patch
local_history.patch.txt

sorry for not submitting PR, but I'm not sure if the fix is right :)

Regards and keep up with this good work!

Roberto

Serverless service prefix not included in state machine name

When I deploy "myproject" with Serverless, Lambda functions are prefixed with the service name and suffixed by stage, so they are called "myproject-myfunc-dev" etc.

Perhaps serverless-step-functions should also do the same, so that state machines are called "myproject-mymachine-dev" instead of just "mymachine-dev"? Otherwise there will be conflicts.

Cloudwatch schedule events are not created

The Cloudwatch schedule events are not being created when deploying. Manual creation works. (aka seems its an allowed action)

stepFunctions:
  stateMachines:
    myMachine:
      events:
        - schedule: rate(5 minutes)
      definition:
        StartAt: MyStart
        States:
          MyStart:
            Type: Task
            Resource: "arn:aws:lambda:${opt:region}:${self:custom.accountId}:function:${self:service}-${opt:stage}-myFunction"
            End: true

Since 1.0.3 no more cf step is generated

When i upgrade to 1.0.3/1.0.4, the plugin has stopped generating the step function. The definition hasn't changed, find here an extract :

stepFunctions:
  stateMachines:
    fullIndex:
      name: myStateMachine
      role: arn:aws:iam::${self:custom.${opt:stage}.accountId}:role/service-role/StatesExecutionRole-${opt:region} 
      events:
        - http:
            path: /admin/trigger-full-index
            method: GET
      definition:
        Comment: ""
        StartAt: FullIndex
        States:
          FullIndex:
            Type: Task
            Resource: arn:aws:lambda:${opt:region}:${self:custom.${opt:stage}.accountId}:function:service-${opt:stage}-FullIndex
            Next: DeleteIndexes
          DeleteIndexes:
            Type: Task
            Resource: arn:aws:lambda:${opt:region}:${self:custom.${opt:stage}.accountId}:function:service-${opt:stage}-DeleteIndexes        
            End: true

Have you an idea ?
How to see the logs ?

version state machines

Currently this plugin replaces a state machine when deploying a change. This could be problematic for state machines that are under heavy load as it won't delete till all executions have been completed, while this also blocks any future executions till it has been deleted.

What do you think about implementing a way of versioning state machines for example, append a version to the name (.e.g myservice-dev-mystatemachine-v1)?

that.sdk[service] is not a constructor

using version 0.2.0

 sls deploy stepf  --state <stepfunctionname>

Serverless: Start to deploy registerFlow step function...

Type Error ---------------------------------------------

 that.sdk[service] is not a constructor

 For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues

 Please report this error. We think it might be a bug.

Your Environment Information -----------------------------
OS: darwin
Node Version: 6.2.1
Serverless Version: 1.3.0

recommended way of packaging SFN project

Hi, I have a project, which has 7 steps (functions) with a shared node_modules directory.

What is the recommended way of packaging this, do you create a separate package.json for each function and deploy this individually and use the ARNs or put all functions as sun-folders with shared node_modules?

ServerlessError: Invalid State Machine Definition: 'SCHEMA_VALIDATION_FAILED

Hi I'm trying to get a simple Step Function to be mapped with http endpoint

stepFunctions:
  stateMachines:
    Issue2FAToken:
      events:
        - http:
            path: 2fa/step
            method: GET
      definition:
        Comment: "Issuing 2FA token to user via SMS"
        StartAt: CreateToken
        States:
          CreateToken:
            Type: Task
            Resource: createToken
            Next: SendToken
          SendToken:
            Type: Task
            Resource: sendToken
            End: true

I do get the following error. Ive checked the syntax against the examples in but cant figure out whats wrong

ServerlessError: Invalid State Machine Definition: 'SCHEMA_VALIDATION_FAILED at , SCHEMA_VALIDATION_FAILED at , SCHEMA_VALIDATION_FAILED at '
    at provider.request.then.catch (/---/two-factor-authentication/node_modules/serverless-step-functions/lib/stateMachine.js:86:13)
From previous event:
    at ServerlessStepFunctions.createStateMachine (/---/two-factor-authentication/node_modules/serverless-step-functions/lib/stateMachine.js:79:11)
    at BbPromise.map (/---/two-factor-authentication/node_modules/serverless-step-functions/lib/stateMachine.js:97:36)
    at runCallback (timers.js:649:20)
    at tryOnImmediate (timers.js:622:5)
    at processImmediate [as _immediateCallback] (timers.js:594:5)

Appreciate any help that I could get to get this working. Thanks

Choice Steps

How can I create choice states?

I'm using this way:

States:
    Task1:
      Type: Task
      Resource: arn:aws:lambda:...
      Next: ChoiceState
    
    ChoiceState:
      Type: Choice
      Choices:
        - Variable: $.var
          NumericEquals: 0
          Next: Task2
          
        - Variable: $.var
          NumericEquals: 1
          End: true

    Task2:
      Type: Task
      Resource: arn:aws:lambda:...
      End: true

Deprecation warnings upon deploy

Nice work you're doing here. You probably already know this but FYI:

$ sls --version
1.12.1

$ SLS_DEBUG=* sls deploy
Serverless: WARNING: Plugin ServerlessStepFunctions uses deprecated hook deploy:initialize
Serverless: WARNING: Plugin ServerlessStepFunctions uses deprecated hook deploy:compileFunctions
Serverless: WARNING: Plugin ServerlessStepFunctions uses deprecated hook deploy:compileEvents
Serverless: Packaging service...

Accessing provisioned name of a state machine

Does anyone have a way to access the provisioned name of a state machine?

The situation I'm considering is where we modify a state machine and re-deploy. A new state machine is created with a new postfix. We have an API function that creates a new execution that needs access to the state machine name in order to create the execution. When there are multiple state machines names [machine_name]-XXXXX with different postfix hashes we can't identify the new state machine in order to create a new execution.

Note also that the old state machine is in 'deleting' state and we can't create new executions for that either.

Do we need to create two projects, one provisioning the state machines and one provisioning everything else and using the Cloud Formation ability to reference outputs across stacks? (haven't done this before).

Name is getting changed

I set a custom name "ProcessImage-s3" to my step function.
Now it turns out the created function is actually named "ProcessImageDashs3".

I noticed this because I tried refererncing the step function using ${self:resources.Outputs.processImageStepFunction.Value} and I got the following error:

The CloudFormation template is invalid: Template format error: Unresolved resource dependencies [ProcessImage-s3] in the Resources block of the template

Support Fn::Join for resource ARN

Other parts of the serverless.yml file can be configured to use the Fn::Join syntax to pull out the ARN for a resource. Can the plugin support the following syntax?

Resource:
  Fn::Join:
    - ":"
    - - arn
      - aws
      - lambda
      - Ref: AWS::Region
      - Ref: AWS::AccountId
      - function
      - ${self:service}-${opt:stage}-myFunction

Add integration test

do integration test when pushing master branch and release new version.
Here is test patterns

  • http event
  • no event, only plane setting

choice "type" in step-functions workflow

I was playing around with serverless-step-functions and I did not find a way to configure "choice" as part of the workflow.

To accomplish something like below.
"CheckInventory": {
"Type" : "Choice",
"Choices": [
{
"Variable": "$.inventoryExists",
"BooleanEquals": true,
"Next": "ProcessOrder"
},
{
"Variable": "$.inventoryExists",
"BooleanEquals": false,
"Next": "DeclineOrderBranch"
}
]
}

Schema Validation

I've noticed that I can only name my states certain things. Several characters are excluded. I would appreciate not having to name my States in CamelCasingBecauseItIsntFun.

If there is a way you can change how we have to structure the yml in a different way so we can use spaces between words, it would be appreciated.

BTW, thanks for the fix for not requiring a state name to be passed.

v1.0.2 not showing commands

I have been trying to upgrade our latest project to use serverless v1.11.0 with serverless-step-functions (SSF) v1.0.2 from v0.4.0. If I try to upgrade SSF to v1.0.2/latest it no longer shows the command serverless deploy stepf.

Here is the output of running serverless

Commands
* Serverless documentation: http://docs.serverless.com
* You can run commands with "serverless" or the shortcut "sls"
* Pass "--help" after any <command> for contextual help

config credentials ............ Configures a new provider profile for the Serverless Framework
create ........................ Create new Serverless service
install ....................... Install a Serverless service from GitHub
deploy ........................ Deploy a Serverless service
deploy function ............... Deploy a single function from the service
deploy list ................... List deployed version of your Serverless Service
invoke ........................ Invoke a deployed function
invoke local .................. Invoke function locally
invoke stepf .................. Invoke Step functions
info .......................... Display information about the service
logs .......................... Output the logs of a deployed function
metrics ....................... Show metrics for a specific function
remove ........................ Remove Serverless service and all resources
rollback ...................... Rollback the Serverless service to a specific deployment
slstats ....................... Enable or disable stats

Plugins
AwsCompileAlexaSkillEvents, AwsCompileApigEvents, AwsCompileCloudWatchEventEvents, AwsCompileCloudWatchLogEvents, AwsCompileFunctions, AwsCompileIoTEvents, 
AwsCompileS3Events, AwsCompileSNSEvents, AwsCompileScheduledEvents, AwsCompileStreamEvents, AwsConfigCredentials, AwsDeploy, AwsDeployFunction, AwsDeployList,
 AwsInfo, AwsInvoke, AwsInvokeLocal, AwsLogs, AwsMetrics, AwsProvider, AwsRemove, AwsRollback, Config, Create, Deploy, Info, Install, Invoke, Logs, Metrics, Package, Plugin, Remove,
 Rollback, ServerlessStepFunctions, SlStats

As you can see ServerlessStepFunctions is registered as a plugin but isn't listed under the deploy section of commands.

> serverless deploy stepf statemachines --stage $NODE_ENV -n


  Serverless Error ---------------------------------------

     Command "deploy stepf" not found, Run "serverless help"
     for a list of all available commands.

  Stack Trace --------------------------------------------

ServerlessError: Command "deploy stepf" not found, Run "serverless help" for a list of all available commands.
    at _.reduce (/Users/colton/git/vs/fusion2.0/etl/node_modules/serverless/lib/classes/PluginManager.js:176:13)
    at arrayReduce (/Users/colton/git/vs/fusion2.0/etl/node_modules/serverless/node_modules/lodash/lodash.js:704:21)
    at Function.reduce (/Users/colton/git/vs/fusion2.0/etl/node_modules/serverless/node_modules/lodash/lodash.js:9683:14)
    at PluginManager.getCommand (/Users/colton/git/vs/fusion2.0/etl/node_modules/serverless/lib/classes/PluginManager.js:166:14)
    at PluginManager.validateCommand (/Users/colton/git/vs/fusion2.0/etl/node_modules/serverless/lib/classes/PluginManager.js:233:10)
    at Serverless.run (/Users/colton/git/vs/fusion2.0/etl/node_modules/serverless/lib/Serverless.js:83:24)
    at serverless.init.then (/Users/colton/git/vs/fusion2.0/etl/node_modules/serverless/bin/serverless:23:50)
From previous event:
    at runCallback (timers.js:666:20)
    at tryOnImmediate (timers.js:639:5)
    at processImmediate [as _immediateCallback] (timers.js:611:5)
From previous event:
    at __dirname (/Users/colton/git/vs/fusion2.0/etl/node_modules/serverless/bin/serverless:15:28)
    at Object.<anonymous> (/Users/colton/git/vs/fusion2.0/etl/node_modules/serverless/bin/serverless:27:4)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:393:7)
    at startup (bootstrap_node.js:150:9)
    at bootstrap_node.js:508:3

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Forums:        forum.serverless.com
     Chat:          gitter.im/serverless/serverless

  Your Environment Information -----------------------------
     OS:                 darwin
     Node Version:       6.10.1
     Serverless Version: 1.11.0

Activities?

Can you declare activities?

I realize the implementation of the activity would not be serverless, and therefore out of the scope of this, but how would you declare an activity task in the step-function with this plugin?

Add support for optional name parameter

Would be nice if you could add support for an optional name property.
E.g.:

stepFunctions:
  stateMachines:
    - name: myMachineName
      MyMachine:
         <description>

I would prefer to name the step function dynamically in order reference it from within a lambda that starts executing it, instead of having to hardcode the name into the lambda

Great job with the plugin btw 👍

Don't remove superceded State machines

I'd like to suggest that we don't remove a superceded state machine when it is modified and redeployed.

It's highly likely, over the life of a solution employing step functions, that a step function will be modified where there are completed and in-progress executions. I understand that the step function won't be deleted until all executions are complete, however we want to keep the history of a step function and retain access to completed executions.

With the current behaviour of the plugin we remove the old version as soon as all executions are completed (at least as far as I can see).

Interested in other opinions or other ways to retain history of executions.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.