dherault / dherault/serverless-offline
Boto3/Python can't invoke lambda function.
- Dominant language
- JavaScript
- Stars
- 5.3k
- Forks
- 811
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 3
Description
## Bug Report
**Current Behavior**
- Boto3 client runs into `Conneciton timed out`when trying to invoke serverless-offline's lambda port.
- Error log: ` Could not connect to the endpoint URL: "http://localhost:4006/2015-03-31/functions/slackService-dev-slack-service/invocations`
Using postman for httpPort triggers local lambda correctly.
**Sample Code**
`serverless.yml`:
```
service: slackService
frameworkVersion: "3"
provider:
name: aws
runtime: python3.8
stackName: ${opt:stage, 'dev'}-${self:service}
deploymentBucket:
name: ${opt:stage, 'dev'}-slack-service
plugins:
- serverless-python-requirements
- serverless-deployment-bucket
- serverless-latest-layer-version
- serverless-offline
functions:
slack-service:
handler: app.dispatcher.dispatcher
events:
- httpApi: "POST /slack-service"
custom:
pythonRequirements:
dockerizePip: true
serverless-offline:
lambdaPort: 4006
httpPort: 4005
```
- file: dispatcher.py
```
import json
def dispatcher(event, context):
body = {
"message": "Go Serverless v3.0! Your function executed successfully!",
"input": event,
}
print("event")
print(event)
record = event["Records"][0]
response = {"statusCode": 200, "body": json.dumps(body)}
return response
```
Output from running `sls offline start`:
```
Starting Offline at stage dev (us-east-1)
Offline [http for lambda] listening on http://localhost:4006
Function names exposed for local invocation by aws-sdk:
* slack-service: slackService-dev-slack-service
│ POST | http://localhost:4005/slack-service │
│ POST | http://localhost:4005/2015-03-31/functions/slack-service/invocations │
```
How I'm invoking it:
```
lambda_client = boto3.client(
"lambda",
region_name="local",
aws_access_key_id="test",
aws_secret_access_key="test2",
endpoint_url="http://localhost:4006",
)
lambda_client.invoke(
FunctionName="slackService-dev-slack-service",
Payload=(json.dumps({"eventId": event.id})),
)
```
error msg:
**Expected behavior/code**
- I believe we are supposed to use the `lambdaPort` when we want to invoke the function thru lambda client, but it's not working.
- Tried httpPorts just in case as well but those are failling as well.
**Environment**
- `serverless` version:
- Framework Core: 3.25.1
- Plugin: 6.2.2
- SDK: 4.3.2
- `serverless-offline` version: 12.0.4
- `node.js` version: v16.14.0
- `OS`: macOS 12.2.1
_optional, if you are using any of the following frameworks to invoke handlers_
- `python` version: 3.8.9
**Possible Solution**
**Additional context/Screenshots**
Contributor guide
Assessment
This issue has not been assessed yet.