标签: serverless-framework

在Lambless.yml中将Lambda函数分配给特定的VPC ID

我使用无服务器框架将一个Python lambda函数部署到AWS.在我的serverless.yml文件中,我已经定义了一个我需要部署到具有特定ID的VPC的功能,因为只有VPC具有从lambda函数发出一些与业务相关的请求所需的网络连接.

  customer_callback:
    vpc:
      subnetIds:
        - subnet-something
    handler: myservice/event_stream.customer_callback
Run Code Online (Sandbox Code Playgroud)

在文档中,上面的示例是他们提到的将函数附加到VPC的方法:

https://serverless.com/framework/docs/providers/aws/guide/functions/

但是,该功能根本没有部署到VPC,例如我最终得到:

在此输入图像描述

我试过像这样直接指定VPC ID:

  customer_callback:
    vpc:
      id: vpc-something
    handler: myservice/event_stream.customer_callback
Run Code Online (Sandbox Code Playgroud)

但这没有任何作用.这个问题的文档基本上不存在,我尝试了很多搜索,所以我最后要在这里发帖寻求帮助.

amazon-web-services aws-lambda serverless-framework

13
推荐指数
1
解决办法
3556
查看次数

如何使用无服务器框架从节点JS AWS lambda后端将二进制内容传递给API网关?

众所周知,API Gateway和lambda支持二进制请求/响应,但我对节点JavaScript中的后端编程有一个疑问.

环境:

  • 使用无服务器框架,与lambda(非lambda-proxy)集成.
  • 响应头映射是:
    Content-Type:integration.response.body.headers.Content-Type
  • 响应模板映射为:
    image/png:$ input.path('$.body')
    image/jpeg:$ input.path('$.body')
  • 为image/png和image/jpeg启用二进制支持

在上述环境中,在我的代码中,我将响应内容作为二进制(缓冲对象数组).
但是,如果我直接将Buffer对象数组作为响应,

callback(null,{
    headers: {'Content-Type': 'image/jpeg'},
    body: body
});
Run Code Online (Sandbox Code Playgroud)

收到回复是这样的:

Content-type: image/jpeg
{type=Buffer, data=[255,216,255,224,0,16,74,70,73,70,0...
Run Code Online (Sandbox Code Playgroud)

如果我通过base64编码将Buffer对象数组作为响应,

callback(null,{
    headers: {'Content-Type': 'image/jpeg'},
    body: body.toString('base64')
});
Run Code Online (Sandbox Code Playgroud)

收到回复是这样的:

Content-type: image/jpeg
/9j/4AAQSkZJRgABAQEASABIAAD/2wBDA...
Run Code Online (Sandbox Code Playgroud)

如何使用无服务器框架从节点JS后端向API网关提供二进制响应?

== PostScript ==

根据此文档:
没有Accept标头的AWS API Gateway二进制输出
我们必须将Integration响应的"Content Handling"更改为"CONVERT TO BINARY",以响应二进制响应.
但是我该怎么设置呢?
我不知道serverless.yml和AWS控制台GUI.

如果我成功设置了Content Handling => CONVERT TO BINARY,我可以解决响应二进制响应吗?

== 1月17日编辑==

嗨@ ka-hou-ieong

你写了rest-api-id和resource-id,它们在下面的图片中,对吗?

在此输入图像描述

但是使用这些id,命令结果说:

$aws apigateway put-integration-response --rest-api-id XXXXXXXX --resource-id XXXXXX --http-method GET --status-code 200 --content-handling CONVERT_TO_BINARY

An error occurred …
Run Code Online (Sandbox Code Playgroud)

aws-lambda aws-api-gateway serverless-framework

12
推荐指数
1
解决办法
2079
查看次数

是否可以保持AWS Lambda功能的温暖?

我的应用程序中有一些部分无法承受由Lambda功能在新的或未使用一段时间后经历的"冻融"循环引起的额外1-2秒延迟.

如何保持这些Lambda函数的温暖,以便AWS不必一直重新配置它们?这适用于1)不经常使用的功能和2)最近部署的功能.

理想情况下,有一个我错过的设置称为"保持温暖",这增加了Lambda函数的成本,但始终保持函数温暖并准备响应,但我很确定这不存在.

我想一个选择是使用CloudWatch计时器来经常ping这些函数......但这对我来说是错误的.此外,我不知道AWS用于将Lambda函数置于冰上的时间间隔.

amazon-web-services aws-lambda serverless-framework

12
推荐指数
2
解决办法
3671
查看次数

读取由s3事件触发的文件

这是我想要做的:

  1. 用户将csv文件上载到AWS S3存储桶.
  2. 上传文件后,S3存储桶调用我创建的lambda函数.
  3. 我的lambda函数读取csv文件内容,然后发送包含文件内容和信息的电子邮件

当地环境

无服务器框架版本1.22.0

Python 2.7

这是我的serverless.yml文件

service: aws-python # NOTE: update this with your service name

provider:
  name: aws
  runtime: python2.7
  stage: dev
  region: us-east-1
  iamRoleStatements:
        - Effect: "Allow"
          Action:
              - s3:*
              - "ses:SendEmail"
              - "ses:SendRawEmail"
              - "s3:PutBucketNotification"
          Resource: "*"

functions:
  csvfile:
    handler: handler.csvfile
    description: send mail whenever a csv file is uploaded on S3 
    events:
      - s3:
          bucket: mine2
          event: s3:ObjectCreated:*
          rules:
            - suffix: .csv
Run Code Online (Sandbox Code Playgroud)

这是我的lambda函数:

import json
import boto3
import botocore
import logging
import …
Run Code Online (Sandbox Code Playgroud)

python csv amazon-s3 aws-lambda serverless-framework

12
推荐指数
1
解决办法
1万
查看次数

12
推荐指数
1
解决办法
4148
查看次数

AWS Lambda - Runtime.ImportModuleError:错误:找不到模块“jmespath”

我正在使用无服务器框架使用 aws lambda,我将运行时从 更改nodejs8.10nodejs10.x,然后我得到了一个错误跟踪,

{"errorType":"Runtime.ImportModuleError","errorMessage":"Error: Cannot find module 'jmespath'","stack":["Runtime.ImportModuleError: Error: Cannot find module 'jmespath'","    at _loadUserApp (/var/runtime/UserFunction.js:100:13)","    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)","    at Object.<anonymous> (/var/runtime/index.js:36:30)","    at Module._compile (internal/modules/cjs/loader.js:701:30)","    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)","    at Module.load (internal/modules/cjs/loader.js:600:32)","    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)","    at Function.Module._load (internal/modules/cjs/loader.js:531:3)","    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)","    at startup (internal/bootstrap/node.js:283:19)"]}
Run Code Online (Sandbox Code Playgroud)

这个问题的原因是什么,如何解决?

amazon-web-services node.js aws-lambda serverless-framework

12
推荐指数
1
解决办法
1万
查看次数

如何在 serverless.yml 中引用秘密管理器中的对象值?

我正在通过serverless. 并且需要在部署期间从secretmanager读取值。我已阅读此文档:https://www.serverless.com/framework/docs/providers/aws/guide/variables/#reference-variables-using-the-ssm-parameter-store

它显示了如何阅读它:

custom: supersecret: ${ssm:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager~true} 但是,它可用于从秘密管理器读取字符串值。我的秘密是一个包含key/value成对的对象。我怎样才能读懂key里面的秘密?

我尝试过这样的事情:

custom: supersecret: ${ssm:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager:MY_KEY~true}

custom: supersecret: ${ssm:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager/MY_KEY~true}

但他们都没有工作。

amazon-web-services serverless-framework aws-secrets-manager

12
推荐指数
1
解决办法
1万
查看次数

在 AWS 上部署无服务器 Flask 应用程序时出错,没有名为“werkzeug._compat”的模块

我创建了一个简单的 Flask 应用程序并成功将其部署到 AWS Lambda。我正在遵循本教程的第一步。

运行Lambda时,日志中出现以下错误:

Unable to import module 'wsgi_handler': No module named 'werkzeug._compat'
Run Code Online (Sandbox Code Playgroud)

我已经安装了 serverless-python-requirements 和 serverless-wsgi。这些文件夹位于上传到 AWS 的 zip 文件夹中。

我在 serverless_wsgi.py 中找到了对 werkzeug._compat 的引用:

from werkzeug._compat import BytesIO, string_types, to_bytes, wsgi_encoding_dance
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法在可能找到此函数的 Werkzeug 文件夹中的任何位置找到“_compat”。我是否缺少包裹或其他东西?

这是我的 serverless.yml:

# serverless.yml

service: serverless-flask

plugins:
  - serverless-python-requirements
  - serverless-wsgi

custom:
  wsgi:
    app: app.app
    packRequirements: false
  pythonRequirements:
    dockerizePip: non-linux

provider:
  name: aws
  runtime: python3.6
  stage: dev
  region: us-east-1

functions:
  app:
    handler: wsgi_handler.handler
    events:
      - http: ANY /
      - http: …
Run Code Online (Sandbox Code Playgroud)

python werkzeug flask aws-lambda serverless-framework

12
推荐指数
1
解决办法
1539
查看次数

无服务器框架 - 变量解析错误

我有 serverless.yaml 脚本,用于在更新到较新版本的 SLS (2.72.0) 之前 - 接下来工作,我开始收到警告:

Cannot resolve serverless.yaml: Variables resolution errored with:
  - Cannot resolve variable at "custom.S3_BUCKET_NAME": Value not found at "self" source
Run Code Online (Sandbox Code Playgroud)

我的自定义部分如下所示:

custom:
  S3_BUCKET_NAME: ${self:service}-data-${opt:stage, self:provider.stage}
  s3Sync:
    - bucketName: ${self:custom.S3_BUCKET_NAME}-website
      localDir: ./dist
      deleteRemoved: true
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个警告?

yaml amazon-web-services serverless-framework

12
推荐指数
2
解决办法
2万
查看次数

无服务器:指定的存储桶不存在

我愚蠢地删除了无服务器项目的s3存储桶.当我现在尝试部署或删除我的应用程序时,我收到此错误:The specified bucket does not exist如何从Serverless重新创建s3存储桶?

lambda serverless-framework serverless-architecture

11
推荐指数
1
解决办法
4807
查看次数