Hi, I created a new project like this (INSIDE OF GOPATH/src!!!!):
serverless create -t aws-go-dep -p myservice
I go into it and run make
cd myservice
here is my file in hello/main.go:
package main
import (
"bytes"
"context"
"encoding/json"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
// Response is of type APIGatewayProxyResponse since we're leveraging the
// AWS Lambda Proxy Request functionality (default behavior)
//
// https://serverless.com/framework/docs/providers/aws/events/apigateway/#lambda-proxy-integration
type Response events.APIGatewayProxyResponse
// Handler is our lambda handler invoked by the `lambda.Start` function call
func Handler(ctx context.Context) (Response, error) {
var buf bytes.Buffer
body, err := json.Marshal(map[string]interface{}{
"message": "Go Serverless v1.0! Your function executed successfully!",
})
if err != nil {
return Response{StatusCode: 404}, err
}
json.HTMLEscape(&buf, body)
resp := Response{
StatusCode: 200,
IsBase64Encoded: false,
Body: buf.String(),
Headers: map[string]string{
"Content-Type": "application/json",
"X-MyCompany-Func-Reply": "hello-handler",
},
}
return resp, nil
}
func main() {
lambda.Start(Handler)
}
I then run serverless offline:
sls offline start --port 5001
It seems to start up fine:
Serverless: Starting Offline: dev/us-east-1.
Serverless: Routes for hello:
Serverless: GET /hello
Serverless: POST /{apiVersion}/functions/myservice-dev-hello/invocations
Serverless: Routes for world:
Serverless: GET /world
Serverless: POST /{apiVersion}/functions/myservice-dev-world/invocations
Serverless: Offline [HTTP] listening on http://localhost:5001
Serverless: Enter "rp" to replay the last request
Then I try to call to the GET endpoint at http://localhost:5001/help
but I get the error:
Proxy Handler could not detect JSON: Serverless: Packaging service...
Proxy Handler could not detect JSON: Serverless: Excluding development dependencies...
Proxy Handler could not detect JSON: Serverless: Building Docker image...
Proxy Handler could not detect JSON:
Proxy Handler could not detect JSON: Error --------------------------------------------------
Error: spawn docker ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
at onErrorNT (internal/child_process.js:362:16)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
at process._tickDomainCallback (internal/process/next_tick.js:219:9)
Proxy Handler could not detect JSON: For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.
Proxy Handler could not detect JSON: Get Support --------------------------------------------
Docs: docs.serverless.com
Proxy Handler could not detect JSON: Bugs: github.com/serverless/serverless/issues
Issues: forum.serverless.com
Proxy Handler could not detect JSON: Your Environment Information ---------------------------
Operating System: darwin
Node Version: 8.16.0
Proxy Handler could not detect JSON: Framework Version: 1.59.1
Plugin Version: 3.2.5
Proxy Handler could not detect JSON: SDK Version: 2.2.1
Proxy Handler could not detect JSON: Components Core Version: 1.1.2
Proxy Handler could not detect JSON: Components CLI Version: 1.4.0
Serverless: Replying timeout after 30000ms
^CServerless: Got SIGINT signal. Offline Halting...
Serverless: Halting offline server
Also, My serverless.yml then looks like this:
# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
# docs.serverless.com
#
# Happy Coding!
service: myservice
# app and org for use with dashboard.serverless.com
#app: your-app-name
#org: your-org-name
# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"
frameworkVersion: '>=1.28.0 <2.0.0'
provider:
name: aws
runtime: go1.x
# you can overwrite defaults here
# stage: dev
# region: us-east-1
# you can add statements to the Lambda function's IAM Role here
# iamRoleStatements:
# - Effect: "Allow"
# Action:
# - "s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# - Effect: "Allow"
# Action:
# - "s3:PutObject"
# Resource:
# Fn::Join:
# - ""
# - - "arn:aws:s3:::"
# - "Ref" : "ServerlessDeploymentBucket"
# - "/*"
# you can define service wide environment variables here
# environment:
# variable1: value1
package:
exclude:
- ./**
include:
- ./bin/**
functions:
hello:
handler: bin/hello
events:
- http:
path: hello
method: get
world:
handler: bin/world
events:
- http:
path: world
method: get
# The following are a few example events you can configure
# NOTE: Please make sure to change your handler code to work with those events
# Check the event documentation for details
# events:
# events:
# - http:
# path: users/create
# method: get
# - websocket: $connect
# - s3: ${env:BUCKET}
# - schedule: rate(10 minutes)
# - sns: greeter-topic
# - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
# - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
# - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
# - iot:
# sql: "SELECT * FROM 'some_topic'"
# - cloudwatchEvent:
# event:
# source:
# - "aws.ec2"
# detail-type:
# - "EC2 Instance State-change Notification"
# detail:
# state:
# - pending
# - cloudwatchLog: '/aws/lambda/hello'
# - cognitoUserPool:
# pool: MyUserPool
# trigger: PreSignUp
# - alb:
# listenerArn: arn:aws:elasticloadbalancing:us-east-1:XXXXXX:listener/app/my-load-balancer/50dc6c495c0c9188/
# priority: 1
# conditions:
# host: example.com
# path: /hello
# Define function environment variables here
# environment:
# variable2: value2
# you can add CloudFormation resource templates here
#resources:
# Resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
plugins:
- serverless-offline
thank you for raising the issue @JimTheMan
your issue is somewhat related to: https://github.com/dherault/serverless-offline/issues/851#issuecomment-563333227 and hopefully will work with: https://github.com/dherault/serverless-offline/pull/845
Thank you @dnalborczyk, for I now I have dreams of a glorious tomorrow. 馃槃 馃檹 馃檹
@JimTheMan we just released initial docker support with v6.0.0 alpha 54. feel free to give it a try and report back with any bugs or improvements.
Most helpful comment
Thank you @dnalborczyk, for I now I have dreams of a glorious tomorrow. 馃槃 馃檹 馃檹