标签: aws-sam-cli

AWS Lambda Node.js运行时:IO:在封闭管道上读取/写入

我正在尝试从一个lambda函数执行几个异步请求。第一个调用resolveEndpoints()成功,第二个调用失败

2017/11/03 17:13:27 Function oauth.callbackHandler timed out after 3 seconds

2017/11/03 17:13:27 Error invoking nodejs6.10 runtime: io: read/write on closed pipe
Run Code Online (Sandbox Code Playgroud)

处理程序是:

exports.callbackHandler = async (event, context, callback) => {
    context.callbackWaitsForEmptyEventLoop = false;

    let endpoints: any = await resolveEnpoints();

    config.accessTokenUri = endpoints.token_endpoint;

    let tokenRequestPath =
    `http://localhost:7001${event.path}?code=${event.queryStringParameters.code}&realmId=${event.queryStringParameters.realmId}&`;

    let accessToken: any = await getAuthToken(tokenRequestPath);

    callback(undefined, {statusCode: 200, body: JSON.stringify(accessToken.data)});
};
Run Code Online (Sandbox Code Playgroud)

如果我删除resolveEndpoint()呼叫,则getAuthToken()成功。

resolveEndpoint() 返回请求完成后将解决的promise。

const resolveEnpoints = async () => {
    return new Promise((resolve, reject) …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-lambda aws-sam-cli

5
推荐指数
1
解决办法
1033
查看次数

SAM Local:是否可以直接使用CloudFormation文件代替SAM模板?

我正在尝试直接将已编译的CloudFormation文件与SAM Local一起使用。我找不到办法,有人成功做到了吗?

aws-cloudformation aws-sam-cli

5
推荐指数
1
解决办法
84
查看次数

如何销毁一个SAM本地lambda?

按照阅读的说明,它说:

# AWS SAM Hello World Example #

A simple AWS SAM template that specifies a single Lambda function.

## Usage ##

To create and deploy the SAM Hello World example, first ensure that you've met the requirements described in the [root README](../../README.md). Then
follow the steps below.

### Test your application locally ###

Use [SAM Local](https://github.com/awslabs/aws-sam-local) to run your Lambda function locally:

    sam local invoke "HelloWorldFunction" -e event.json

### Package artifacts ###

Run the following command, replacing `BUCKET-NAME` with …
Run Code Online (Sandbox Code Playgroud)

lambda amazon-web-services aws-sam-cli

5
推荐指数
1
解决办法
1786
查看次数

如何为Api方法启用ApiKeyRequired?

我想使用API​​网关的标准API密钥功能.如果我使用标准的cloudformation,可以通过将方法的属性ApiKeyRequired设置为true来实现.我怎样才能用SAM做到这一点?

我尝试使用swagger,但似乎不起作用:

    swagger: "2.0"
    info:
      title: !Ref AWS::StackName

    paths:
      "/machines/{resourceid}":
        get:
          parameters: 
            - name: resourceid 
              in: path 
              type: string 
              required: true 
          x-amazon-apigateway-integration:
            httpMethod: POST
            type: aws_proxy
            uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${MyLambda.Arn}/invocations
            responses: {}
          security:
            - authorizer: []

    securityDefinitions:
      authorizer:
        type: apiKey
        name: Authorization
        in: header
Run Code Online (Sandbox Code Playgroud)

有什么建议?

aws-api-gateway aws-sam-cli serverless

5
推荐指数
1
解决办法
1213
查看次数

使用SAM应用程序如何定义身体贴图模板

我是AWS和SAM的新手。我正在使用AWS服务开发虚拟后端。为此,我正在使用SAM应用程序在本地编写代码。我定义了APIs 的结构,Lambda其中

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
    sam-app

    Sample SAM Template for sam-app

Globals:
    Function:
        Timeout: 300
    Api:
        Cors:
            AllowHeaders: "'content-type, authorization'"
            AllowOrigin: "'*'"


Resources:

    HelloWorldFunction:
        Type: AWS::Serverless::Function
        Properties:
            CodeUri: hello_world
            Handler: app.lambda_handler
            Runtime: nodejs8.10
            Environment:
                Variables:
                    PARAM1: VALUE
            Events:
                HelloWorld:
                    Type: Api
                    Properties:
                        Path: /hello2
                        Method: get

Outputs:
    HelloWorldFunction:
      Description: "Hello World Lambda Function ARN"
      Value: !GetAtt HelloWorldFunction.Arn
Run Code Online (Sandbox Code Playgroud)

这将创建一个小的虚拟应用程序。但是,我想知道如何使用其他实用程序,AWSBody Mapping定义模型等。请帮助我了解这些。

谢谢...

amazon-web-services aws-lambda aws-api-gateway aws-sam-cli aws-sam

5
推荐指数
1
解决办法
2512
查看次数

AWS Lambda Sam找不到Docker

我正在尝试使用aws-sam-cli在项目根文件夹中使用以下命令来测试我的世界lambda函数:

sam local start-api --debug
Run Code Online (Sandbox Code Playgroud)

这在控制台中提供了以下输出:

2018-07-11 16:13:15 local start-api command is called
2018-07-11 16:13:15 2 resources found in the template
2018-07-11 16:13:15 Found Serverless function with name='Hello' and CodeUri='.'
2018-07-11 16:13:15 Trying paths: ['/home/jamiro/.docker/config.json', '/home/jamiro/.dockercfg']
2018-07-11 16:13:15 No config file found
2018-07-11 16:13:15 Trying paths: ['/home/jamiro/.docker/config.json', '/home/jamiro/.dockercfg']
2018-07-11 16:13:15 No config file found
Error: Running AWS SAM projects locally requires Docker. Have you got it installed?
Run Code Online (Sandbox Code Playgroud)

据我了解,我确实安装了docker,因为执行docker --version会导致以下输出:

Docker version 18.03.1-ce, build 9ee9f40
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么 山姆 …

amazon-web-services docker aws-lambda aws-sam-cli

5
推荐指数
1
解决办法
1611
查看次数

sam.yml文件中的多个Lambda函数

仍在等待对此的实际AWS支持:https : //github.com/aws-samples/aws-serverless-samfarm/issues/5

这应该如何工作?

我的用例是我的API网关前端有lambda,可将事件写入SNS主题。我有另一个lambda订阅了该主题。

这些lambda是否可以放在单独的存储库中?是。首先使用发布/订阅模式来分离这两个应用程序的目的的一部分吗?是。

但是,这是一个简单的应用程序。该主题将不会与其他功能共享,并且整个过程都是自包含的。理想情况下,应将其全部部署在同一模板中。

我可以轻松地将所需的所有功能添加到SAM模板中,但是如何部署它们呢?它们是否应该各自具有不同的CodeURI?这意味着我需要脚本复制并将每个lambda依赖项安装到不同的文件夹中,然后将模板中每个lambda的codeuri指向不同的文件夹。

有没有更好的支持呢?

amazon-web-services aws-cloudformation aws-lambda aws-sam-cli aws-sam

5
推荐指数
1
解决办法
1720
查看次数

sam local start-api在本地测试SAM应用程序时出现错误

嗨,我有一个sam应用程序,该应用程序具有一个lambda函数,可以按预期工作的其余端点调用它,但是当我尝试使用sam local start-lambda或sam local start-api或sam local invoke本地测试sam应用程序时,我得到了错误为:

    self.connect()
  File "C:\Users\divyanayan.awasthi\AppData\Roaming\Python\Python37\site-packages\docker\transport\npipeconn.py", line 31, in connect
    sock.connect(self.npipe_path)
  File "C:\Users\divyanayan.awasthi\AppData\Roaming\Python\Python37\site-packages\docker\transport\npipesocket.py", line 22, in wrapped
    return f(self, *args, **kwargs)
  File "C:\Users\divyanayan.awasthi\AppData\Roaming\Python\Python37\site-packages\docker\transport\npipesocket.py", line 50, in connect
    win32pipe.WaitNamedPipe(address, self._timeout)
pywintypes.error: (2, 'WaitNamedPipe', 'The system cannot find the file specified.')
Run Code Online (Sandbox Code Playgroud)

使用的山姆版本

SAM CLI, version 0.7.0
Run Code Online (Sandbox Code Playgroud)

这是因为我没有在本地运行的docker或需要其他配置。我为SAM应用程序提供了一个.py类和template.yml文件。

amazon-web-services python-3.x docker aws-sam-cli

5
推荐指数
1
解决办法
1074
查看次数

在sam应用程序的template.yaml中的codeUri中导入通用python文件

我有以下文件夹结构

src
-- foo
  --lambda1.py
-- blah
   --lambda2.py
-- util
    --util.py
Run Code Online (Sandbox Code Playgroud)

现在我要使用template.yaml创建在lambda函数代码uri中都包含util.py,这样我就不必在lambda1文件夹和lambda2文件夹中维护同一util.py的两个副本。

这是我正在使用的template.yaml:

AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  SAMDEMOLAMBDA1:
    Type: AWS::Serverless::Function
    Properties:
      Handler: samdemoLambda1.lambda_handler
      Runtime: python2.7
      CodeUri: ./src/foo
      Events:
                HelloWorld:
                    Type: Api 
                    Properties:
                        Path: /hello
                        Method: get

  SAMDEMOLAMBDA2:
    Type: AWS::Serverless::Function
    Properties:
      Handler: samdemoLambda2.lambda_handler
      Runtime: python2.7
      CodeUri: ./src/blah
      CodeUri: ./src/util
Run Code Online (Sandbox Code Playgroud)

我如何在Lambda 2中导入此常见util.py

python amazon-web-services aws-lambda aws-sam-cli

5
推荐指数
0
解决办法
205
查看次数

API网关HTTP代理与aws-sam集成(非Lambda代理)

我正在尝试使用aws-sam在本地开发/模拟我的API网关。我的API网关充分利用了HTTP代理集成。生产资源如下所示:

API网关资源方法上的HTTP代理集成的屏幕截图

所有的AWS-SAM的例子其中 发现,以及相关的文档和Q&A,使用LAMBDA集成/对lambda函数作为代理的资源硬依赖,对一个HTTP代理服务器的整合。

有没有办法为aws-sam应用程序定义HTTP代理资源?(而不是Lambda代理资源?)

有关:

aws-api-gateway aws-sam-cli aws-sam

5
推荐指数
1
解决办法
398
查看次数