我正在尝试从一个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) 我正在尝试直接将已编译的CloudFormation文件与SAM Local一起使用。我找不到办法,有人成功做到了吗?
按照阅读的说明,它说:
# 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) 我想使用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和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)
这将创建一个小的虚拟应用程序。但是,我想知道如何使用其他实用程序,AWS如Body Mapping定义模型等。请帮助我了解这些。
谢谢...
amazon-web-services aws-lambda aws-api-gateway aws-sam-cli aws-sam
我正在尝试使用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)
有谁知道为什么 山姆 …
仍在等待对此的实际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
嗨,我有一个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文件。
我有以下文件夹结构
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
我正在尝试使用aws-sam在本地开发/模拟我的API网关。我的API网关充分利用了HTTP代理集成。生产资源如下所示:
所有的AWS-SAM的例子其中 我 发现,以及相关的文档和Q&A,使用LAMBDA集成/对lambda函数作为代理的资源硬依赖,对一个HTTP代理服务器的整合。
有没有办法为aws-sam应用程序定义HTTP代理资源?(而不是Lambda代理资源?)
有关:
aws-sam-cli ×10
aws-lambda ×5
aws-sam ×3
docker ×2
lambda ×1
node.js ×1
python ×1
python-3.x ×1
serverless ×1