标签: serverless

销毁通过Serverless创建的资源,而不会破坏Lambda端点

我在serverless.yml文件中定义了以下资源.它非常适合为我所有不同的开发阶段创建资源.

resources:
  Resources:
    uploadBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:service}-${self:custom.stage}-uploads
    visitsTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: ${self:custom.visitsTable}
        AttributeDefinitions:
          - AttributeName: userId
            AttributeType: S
          - AttributeName: visitId
            AttributeType: S
        KeySchema:
          - AttributeName: userId
            KeyType: HASH
          - AttributeName: visitId
            KeyType: RANGE
        ProvisionedThroughput:
            ReadCapacityUnits: ${self:custom.dynamoDbCapacityUnits.${self:custom.stage}}
            WriteCapacityUnits: ${self:custom.dynamoDbCapacityUnits.${self:custom.stage}}
Run Code Online (Sandbox Code Playgroud)

问题是......如果我sls remove在删除数据库时这样做,它还会删除其他所有内容,包括lambda函数及其api网关端点,我需要保留它们,因为我已经为它们明确设置了策略. 如何告诉无服务器我只想删除数据库或S3或其他任何东西而不是其余的?

我试过的事情:

我在AWS上手动删除了,但是如果你这样做并且执行sls部署它不会再次创建数据库!所以不确定最好的方法来做到这一点......

整个Serverless.yml文件

service: mydomain-api

# Use serverless-webpack plugin to transpile ES6/ES7
plugins:
  - serverless-webpack
  - serverless-domain-manager

custom:
  webpackIncludeModules: true
  stage: ${opt:stage, self:provider.stage}
  visitsTable: "${self:service}-visits-${self:custom.stage}"
  domains:
    prod: api.mydomain.com
    staging: staging-api.mydomain.com
    dev: dev-api.mydomain.com …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda aws-api-gateway serverless-framework serverless

6
推荐指数
2
解决办法
4823
查看次数

AWS Lambda Function始终返回null(节点/ Javascript)?

我有一个简单的Lambda函数,该函数应该获取事件数据并将消息发送到SNS主题。

运行时为Node.js 8.10。

这是我完整的Lambda代码:

const AWS = require("aws-sdk");

exports.handler = async (event) => {

const sns = new AWS.SNS();

const emailBody = 
`
New Message

From: ${event.name}
Contact: ${event.contact}

Message: ${event.message}
`;

const snsMessageParams = {
    TopicArn: process.env.snsTopicArn,
    Message: emailBody
};

sns.publish(snsMessageParams, (err, data) => {
    if(err) {
        return err;
    } else {
        return data;
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

每次我运行该函数时,响应总是总是为null。没有错误返回,但我从未从SNS的电子邮件中收到消息,因此这里有问题。我只是不知道是什么。

我能够从SNS控制台以及本地计算机上的Node SDK成功地将消息发布到我的SNS主题。这些完美地工作。通过直接从成功的本地代码和SNS控制台复制并粘贴,我已检查env变量中的snsTopicArn是否正确。

我在Lambda函数上具有执行角色,该角色应允许我在帐户中的任何主题上发布到SNS。在配置Lambda角色以测试所有内容时,我选择了默认的“ SNSPublish”选项。但是,作为参考,以下是我的执行角色的政策:

{
  "roleName": <MyRoleName>,
  "policies": [
    {
       "document": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [ …
Run Code Online (Sandbox Code Playgroud)

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

6
推荐指数
2
解决办法
4220
查看次数

将 multipart/form-data POST 到 Serverless Next.js API(在 Vercel / Now.sh 上运行)

我正在使用 Vercel Serverless 函数来处理上传到 Digital Ocean Spaces 的文件(与 AWS S3 相同的 API)。但是,我在请求处理程序中处理多部分/表单数据时遇到了问题。

在前端,我使用 fetch 来发布带有文件和几个文本字段的 FormData() 对象。当在标题上记录主体和服务器时,我可以按预期看到那里的所有内容,但是当使用 Multer 处理多部分时(我也尝试了其他几个类似的包),我无法检索任何已发布的字段或文件。

另外值得注意的是,当使用 Postman 测试 POST 请求时,我遇到了完全相同的问题,因此我确信问题出在无服务器功能上。

前端:

const handleSubmit = async (values) => {
    const formData = new FormData();

    // build my Form Data from state.
    Object.keys(values).forEach(key => {
      formData.append(key, values[key]);
    });

    const response = await fetch("/api/post-submission", {
      method: "POST",
      headers: {
        Accept: "application/json",
      },
      body: formData,
    });
    const json = await response.json();
  };
Run Code Online (Sandbox Code Playgroud)

无服务器处理程序:

const util = require("util");
const multer = …
Run Code Online (Sandbox Code Playgroud)

forms multipartform-data node.js serverless vercel

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

将多个 Azure Functions 部署到同一应用服务计划的定价(弹性高级计划 - EP1)

我计划将一组 Azure Functions(~15)推广到生产环境。今天,我们将消耗计划用于开发目的,但该计划的冷启动性质可能会影响整体体验。

我一直在寻找部署应用程序的最佳成本效益计划,发现 Elastic Plan EP1 可以满足我们的需求(例如,无冷启动、快速横向扩展、“...在多个功能应用程序之间共享应用程序服务计划” ...“, ETC)。

问题是我没有找到这个计划的具体收费方式......

在所公开的场景中,我是否需要为每个大约 388.67 雷亚尔支付 388.67 雷亚尔的费用。该计划部署了 15 项职能?或者,该费用是针对计划本身而各职能部门将共享该计划的资源吗?

而且,计划中的所有功能应用程序都会预热?

在此输入图像描述


编辑:

即使没有在官方文档中找到明确的答案,我还是创建了 EP1 计划并部署了功能。

  1. 我发现对于给定的应用程序服务计划(例如 Elastic Plan EP1),我可以向其部署许多功能应用程序,但它们共享该计划的资源,从而增加了“应用程序密度”。
  2. 我仍然没有得到冷启动问题的答案:对于该计划,如果我向其部署 15 个功能应用程序,它们会预热吗?我发现我可以在每个功能应用程序中设置“pre-warmed=1”,但仍然遇到冷启动。

azure azure-functions serverless

6
推荐指数
1
解决办法
1372
查看次数

错误无法为无服务器自定义域设置基本域映射

在 serverless.yml 中,在自定义下,我有以下代码(此处带有虚拟值):

customDomain:
    domainName: myhost.mydomain.com
    basePath: ''
    stage: ${self:provider:stage}
    createRouteS3Record: true
    endpointType: 'edge'
    securityPolicy: tls_1_2
    certificateArn: 'arn:aws:acm:.................'
    hostZoneId: 'P4OCK4S1PSTZK' 
Run Code Online (Sandbox Code Playgroud)

当我执行无服务器部署时,一切都很顺利。为我的函数正确生成了 Api。(在我拥有的功能下events: http

但是,在部署 API 生成的 lambda 后,我收到以下错误:

Error: Error: Unable to setup base domain mappings for myhost.mydomain.com
Run Code Online (Sandbox Code Playgroud)

除了https://forum.serverless.com/t/error-unable-to-setup-base-domain-mappings/11395之外,我没有得到太多信息 不知道如何在无服务器中包含 api 版本(如果这是解决方案) 。

amazon-web-services aws-api-gateway serverless custom-domain aws-serverless

6
推荐指数
1
解决办法
5895
查看次数

GCP / Cloud Functions 是否有像 AWS Lambda Layers 这样的库概念?

GCP / Cloud Functions 是否有类似于 AWS Lambda Layers 的库概念?这意味着,如果我们想减少代码重复并为 Google Cloud Functions 推出通用库层,我们会怎么做?

google-cloud-platform google-cloud-functions serverless

6
推荐指数
1
解决办法
2360
查看次数

无法在 Cloudflare Worker 脚本上创建 MD5 哈希

我正在尝试实现请求的自定义授权,在将请求发送到微服务之前,我使用 Cloudflare 工作脚本进行授权,但无法通过工作脚本生成 MD5 哈希。

我在网上浏览了很多博客和文章,但未能达到最终结果。非常感谢任何帮助。

下面提到的是我正在尝试做的事情的一瞥

 addEventListener('fetch', event => {
    importScripts('https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/md5.js');
    let test = CryptoJS.MD5('test').toString();
    console.log(test);
    event.respondWith(handleRequest(event.request))
})
Run Code Online (Sandbox Code Playgroud)

javascript node.js cloudflare serverless

6
推荐指数
1
解决办法
2429
查看次数

AWS CloudFormation 堆栈创建失败,因为堆栈中已存在资源但已被删除

创建新的 CloudFormation 堆栈时,CREATE 失败并出现以下错误:

[RESOURCE] already exists in stack [DELETE_COMPLETE status stack ARN]
Run Code Online (Sandbox Code Playgroud)

我已经验证该资源不再位于 AWS 账户中。

aws-cloudformation serverless

6
推荐指数
1
解决办法
4396
查看次数

NestJS 和 Serverless - 处理程序“handler”不是一个函数

我正在尝试使用无服务器框架将 NestJS 实现为 AWS 无服务器功能。

我正在关注这个官方文档,我的代码与文档中的完全一样。但是,当我启动它时,我收到错误Failure: offline: handler 'handler' in [..] is not a function

如果我进入我编译的源代码main.js并将其更改exports.handler = handler;module.exports.handler = handler;它就开始工作。

我还尝试更改代码main.ts以适应这一点,但这没有帮助,因为 webpack 的编译方式不同。

// main.ts
const handler ...;
module.exports.handler = handler;
Run Code Online (Sandbox Code Playgroud)

这是我的main.ts

import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { Callback, Context, Handler } from 'aws-lambda';
import serverlessExpress from '@vendia/serverless-express';
import { AppModule } from './app.module';

let server: Handler;

async function …
Run Code Online (Sandbox Code Playgroud)

typescript serverless-framework serverless nestjs

6
推荐指数
1
解决办法
2817
查看次数

Python 在尝试无服务器部署时出错

我正在尝试运行命令serverless deploy,但即使我有 python,我也会收到以下错误:

Stack xxxxxx failed to deploy (0s)
Environment: win32, node 14.16.1, framework 3.2.1, plugin 6.0.0, SDK 4.3.1
Docs:        docs.serverless.com
Support:     forum.serverless.com
Bugs:        github.com/serverless/serverless/issues

Error:
Error: `python3 -m pip help install` Exited with code 9009
Run Code Online (Sandbox Code Playgroud)

我的python版本是Python 3.9.6,我的pip版本是pip 21.1.3

论坛里好像没有类似的问题。

python pip serverless-framework serverless

6
推荐指数
0
解决办法
605
查看次数