首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Helloworld示例lambda或api网关程序未在docker Windows 10中运行

Helloworld示例lambda或api网关程序未在docker Windows 10中运行
EN

Stack Overflow用户
提问于 2019-08-16 00:30:40
回答 1查看 1.1K关注 0票数 1

我是AWS和docker的新手。我在Windows2.1中使用SAM和docker在Windows10企业版笔记本电脑上尝试了basic helloworld程序,但它不工作。我使用的是开箱即用的项目,并且没有更改文件中的任何内容。

我尝试了以下几种方法:

代码语言:javascript
复制
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版本如下所示。

代码语言:javascript
复制
SAM CLI, version 0.19.0
Docker version 19.03.1, build 74b1e89

以下命令可以正常工作:

代码语言:javascript
复制
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

以下两个命令不会运行:

代码语言:javascript
复制
sam local generate-event apigateway > testApiRequest.json

Visual studio Function.cs是

代码语言:javascript
复制
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是

代码语言:javascript
复制
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-31

sam本地生成事件apigateway > testApiRequest.json

代码语言:javascript
复制
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")

对于此命令:

代码语言:javascript
复制
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)"]}
EN

回答 1

Stack Overflow用户

发布于 2019-09-06 02:55:37

我在sam local invoke...上也遇到了同样的问题

但是为了让sam local start-api正常工作,我使用了这个命令sam local generate-event apigateway aws-proxy > testApiRequest.json

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57512990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档