aws / aws/aws-sam-cli

Configure docker image for aws stepfunctions local [guidance]

Open
#3,538 3 comments 0 reactions 0 assignees View on GitHub
area/local/start-lambda maintainer/need-followup stage/needs-investigation
Dominant language
Python
Stars
6.7k
Forks
1.2k
Avg merge
1d 10h
Merged PRs (30d)
52

Description

As mentioned in a issue I submitted to aws/aws-cli#6615, I am struggling to configure the docker build that occurs when running the `aws stepfunction start-execution` command, which I believe invokes a `docker build` in the other terminal running `sam local start-lambda` as per https://docs.aws.amazon.com/step-functions/latest/dg/sfn-local-lambda.html .

If anyone could provide insight into how to set up local testing of stepfunctions with multiple lambda functions with various modules and dependencies? The current structure that is used for local functional testing with `sam build` `sam local invoke` is as follows:

```
├── index.py
├──modules1
│ ├── some_module.py
│ └── other_module.py
├──modules2
│ ├── some_module2.py
│ └── other_module2.py
├── requirements.txt
├── template.yaml
├── Dockerfile.yaml
```

`template.yaml` :

```
Parameters:
EnvironmentName:
Type: String
Description: Environment name to prefix on resource names in this stack
Memory:
Type: Number
Description: Memory (MB) allocated the lambda. This directly affects the CPU allocated
Default: 512
Timeout:
Type: Number
Description: Timeout (seconds)
Default: 300

Resources:
MyLambdaFunction:
Type: AWS::Serverless::Function
Metadata:
DockerTag: python3.8-v1
DockerContext: ../../../
Dockerfile: ./lambdas/path/to/Dockerfile
Properties:
Description: My Lambda Function
PackageType: Image
Environment:
Variables:
AWS_ENVIRONMENT_NAME:
Ref: EnvironmentName
MemorySize:
Ref: Memory
Timeout:
Ref: Timeout
```

`Dockerfile` :

```
FROM amazon/aws-lambda-python:3.8

COPY lambdas/path/to/index.py lambdas/path/to/requirements.txt ./
ADD ./modules/somemodules ./somemodules
ADD ./modules/somemodules2 ./somemodules2
RUN python3.8 -m pip install -r requirements.txt -t .

CMD ["index.lambda_handler"]
```

This works correctly just using `sam build` and `sam local invoke -e` for functional testing, (and for debugging in VSCode after creating a `launch.json`.

I have multiple of these Lambda functions, each composing a portion of a step function defined in a `.json` template, along with everything else in a cloudformation `.json` template.

Is it possible to use the `aws stepfunctions` local tool with multiple lambdas defined in this way? Currently, it seems to just build the image from some default settings, and I cant seem to configure it as I have with the individual tests.

If this is too off-topic for this issue I am happy to open a new issue, I was directed here as the build process seems to be from the SAM CLI but the stepfunctions portion of the workflow if from the AWS CLI, please advise! Thanks :)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.