我是AWS和docker的新手。我在Windows2.1中使用SAM和docker在Windows10企业版笔记本电脑上尝试了basic helloworld程序,但它不工作。我使用的是开箱即用的项目,并且没有更改文件中的任何内容。
我尝试了以下几种方法:
1. Mock lambda test tool works fine.
2. dotnet testing through CLI works fine.
but sam local start-api or sam local invoke or sam local invoke-lambda etc commands are giving errors. 我没有添加任何代码。只是Visual studio中的AWS Lambda项目附带的代码。
SAM和docker版本如下所示。
SAM CLI, version 0.19.0
Docker version 19.03.1, build 74b1e89以下命令可以正常工作:
sam build
sam package --output-template template.yaml --profile personal --s3-bucket wp-bucket
aws cloudformation deploy --template-file C:\Projects\apitest\apitesting\sam-app\template.yaml --profile personal --region us-east-1 --stack-n
ame mystackapi --capabilities CAPABILITY_IAM
sam local generate-event apigateway > testApiRequest.json以下两个命令不会运行:
sam local generate-event apigateway > testApiRequest.jsonVisual studio Function.cs是
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
using Amazon.Lambda.APIGatewayEvents;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace apitesting
{
public class Functions
{
/// <summary>
/// Default constructor that Lambda will invoke.
/// </summary>
public Functions()
{
}
/// <summary>
/// A Lambda function to respond to HTTP Get methods from API Gateway
/// </summary>
/// <param name="request"></param>
/// <returns>The list of blogs</returns>
public APIGatewayProxyResponse Get(APIGatewayProxyRequest request, ILambdaContext context)
{
context.Logger.LogLine("Get Request\n");
var response = new APIGatewayProxyResponse
{
StatusCode = (int)HttpStatusCode.OK,
Body = "Hello AWS Serverless",
Headers = new Dictionary<string, string> { { "Content-Type", "text/plain" } }
};
return response;
}
}
}Template.yaml是
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Sample SAM Template for sam-app
'
Globals:
Function:
Timeout: 10
Resources:
HelloWorld:
Properties:
CodeUri: s3://wp-bucket/c0851f265e7cd94536333e901f8054e2
Environment:
Variables:
PARAM1: VALUE
Events:
HelloWorld:
Properties:
Method: get
Path: /hello
Type: Api
Handler: apitesting::apitesting.Functions::Get
Runtime: dotnetcore2.1
Type: AWS::Serverless::Function
Transform: AWS::Serverless-2016-10-31sam本地生成事件apigateway > testApiRequest.json
Getting following error:
2019-08-15 12:24:23 Invoking app.lambdaHandler (nodejs8.10)
2019-08-15 12:24:23 Found credentials in shared credentials file: ~/.aws/credentials
Fetching lambci/lambda:nodejs8.10 Docker container image......
2019-08-15 12:24:24 Mounting C:\Projects\apitest\apitesting\sam-app\.aws-sam\build\HelloWorldFunction as /var/task:ro,delegated inside runtime container
Traceback (most recent call last):
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\api\client.py", line 261, in _raise_for_status
response.raise_for_status()
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\requests\models.py", line 940, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: http+docker://localnpipe/v1.35/containers/1d2500666d8536d247c6935727f517240b575dab2274c1b5e8bfdc2068ee9da2/start
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "runpy.py", line 193, in _run_module_as_main
File "runpy.py", line 85, in _run_code
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\__main__.py", line 12, in <module>
cli(prog_name="sam")
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 697, in main
rv = self.invoke(ctx)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 535, in invoke
return callback(*args, **kwargs)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\decorators.py", line 64, in new_func
return ctx.invoke(f, obj, *args[1:], **kwargs)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 535, in invoke
return callback(*args, **kwargs)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\telemetry\metrics.py", line 94, in wrapped
raise exception # pylint: disable=raising-bad-type
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\telemetry\metrics.py", line 65, in wrapped
return_value = func(*args, **kwargs)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\invoke\cli.py", line 58, in cli
parameter_overrides) # pragma: no cover
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\invoke\cli.py", line 102, in do_cli
stderr=context.stderr)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\lib\local_lambda.py", line 93, in invoke
self.local_runtime.invoke(config, event, debug_context=self.debug_context, stdout=stdout, stderr=stderr)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\local\lambdafn\runtime.py", line 86, in invoke
self._container_manager.run(container)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\local\docker\manager.py", line 98, in run
container.start(input_data=input_data)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\local\docker\container.py", line 189, in start
real_container.start()
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\models\containers.py", line 392, in start
return self.client.api.start(self.id, **kwargs)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\utils\decorators.py", line 19, in wrapped
return f(self, resource_id, *args, **kwargs)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\api\container.py", line 1091, in start
self._raise_for_status(res)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\api\client.py", line 263, in _raise_for_status
raise create_api_error_from_http_exception(e)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\errors.py", line 31, in create_api_error_from_http_exception
raise cls(e, response=response, explanation=explanation)
docker.errors.APIError: 500 Server Error: Internal Server Error ("OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"setenv: invalid argument\"": unknown")对于此命令:
sam local start-api
2019-08-15 12:26:35 Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
2019-08-15 12:26:35 You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template
2019-08-15 12:26:35 * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
2019-08-15 12:26:56 Invoking app.lambdaHandler (nodejs8.10)
2019-08-15 12:26:56 Found credentials in shared credentials file: ~/.aws/credentials
Fetching lambci/lambda:nodejs8.10 Docker container image......
2019-08-15 12:26:58 Mounting C:\Projects\apitest\apitesting\sam-app\.aws-sam\build\HelloWorldFunction as /var/task:ro,delegated inside runtime container
[32mSTART RequestId: bef53df5-4308-10b6-9922-b4dc94ea0885 Version: $LATEST[0m
[31mUnable to import module 'app': Error[0m
[31m at Function.Module._resolveFilename (module.js:547:15)
at Function.Module._load (module.js:474:25)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)[0m
[32mEND RequestId: bef53df5-4308-10b6-9922-b4dc94ea0885[0m
[32mREPORT RequestId: bef53df5-4308-10b6-9922-b4dc94ea0885 Duration: 2.94 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 31 MB [0m
2019-08-15 12:27:01 Invalid API Gateway Response Keys: {'errorType', 'stackTrace', 'errorMessage'} in {'errorMessage': "Cannot find module '/var/task/app'", 'errorType': 'Error', 'stackTrace': ['Function.Module._load (module.js:474:25)', 'Module.require (module.js:596:17)', 'require
internal/module.js:11:18)']}
2019-08-15 12:27:01 Function returned an invalid response (must include one of: body, headers, multiValueHeaders or statusCode in the response object). Response received: {"errorMessage":"Cannot find module '/var/task/app'","errorType":"Error","stackTrace":["Function.Module._load (module.js:474:25)","Module.require (module.js:596:17)","require (internal/module.js:11:18)"]}发布于 2019-09-06 02:55:37
我在sam local invoke...上也遇到了同样的问题
但是为了让sam local start-api正常工作,我使用了这个命令sam local generate-event apigateway aws-proxy > testApiRequest.json。
https://stackoverflow.com/questions/57512990
复制相似问题