标签: serverless

如何使用 AWS Lambda 安装 Git?

我在代码提交存储库中有代码,我正在编写一个 lambda 函数来为代码提交存储库的每个签入(事件)构建代码。

我无法安装 git,因此无法克隆存储库。

我该怎么办呢。

git amazon-web-services aws-lambda aws-codecommit serverless

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

单个 Go 二进制文件中是否可以有多个 lambda 函数?

我正在 AWS lambda 上试验 Go,我发现每个函数都需要上传一个二进制文件才能执行。

我的问题是,是否有可能有一个二进制文件可以有两个不同的Handler函数,可以由两个不同的 lambda 函数加载。

例如

func Handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    fmt.Println("Received body in Handler 1: ", request.Body)

    return events.APIGatewayProxyResponse{Body: request.Body, StatusCode: 200}, nil
}
func Handler1(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    fmt.Println("Received body in Handler 2: ", request.Body)

    return events.APIGatewayProxyResponse{Body: request.Body, StatusCode: 200}, nil
}

func EndPoint1() {
    lambda.Start(Handler)
}
func EndPoint2() {
    lambda.Start(Handler1)
}
Run Code Online (Sandbox Code Playgroud)

并以注册 和 的方式调用EndPointsin ,并且相同的二进制文件将上传到函数和。mainEndPointsMyFunction1MyFunction2

我知道拥有两个不同的二进制文件是好的,因为它减少了每个函数的负载/大小。

但这只是一个实验。

提前致谢 :)

go aws-lambda serverless

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

无服务器框架 - 将二进制文件上传到 S3 时损坏

我有一个端点,它接收包括文件在内的表单数据。该文件可以是文本文件、图像或 pdf 文件。我正在使用 Busboy (v0.2.14) 来解析表单数据。该代码如下所示:

        let buffers = [];

        file.on('data', data => buffers.push(data));

        file.on('end', () => {
            result.filename = filename;
            result.contentType = mimetype;

            // Concat the chunks into a Buffer
            result.file = new Buffer.concat(buffers);
        });
        // ...
        busboy.write(event.body, event.isBase64Encoded ? 'base64' : 'binary');
        busboy.end();
Run Code Online (Sandbox Code Playgroud)

但是,当我使用 AWS SDK (v2.97.0) 将文件数据推送到 S3 时,当我查看它们时,所有二进制文件都已损坏。文本文件不会发生这种情况。S3上传代码如下所示:

static myPutObject(bucketName, fileName, data, contentType, acl) {
    const params = {
        Bucket: bucketName,
        Key: fileName,
        Body: data,
        ACL: acl,
        ContentType: contentType,
        ContentEncoding: 'base64'
    };

    return new AWS.S3().putObject(params).promise();
} …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 node.js busboy serverless

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

使用无服务器,如何将 Lambda 函数的授权者设置为资源中的 Cognito 用户池?

在我的 serverless.yml 中,我有一个 Lambda 函数,我想将其授权者设置为我在下面的资源部分中声明的 Cognito 用户池。我见过设置授权者的示例,aws_iam但这似乎是错误的。任何帮助都会很棒:)

我想我需要将授权者的 ARN 设置为池的 ARN,但如何获取它?或者说这是正确的吗?

yaml amazon-web-services aws-lambda serverless-framework serverless

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

如何使用 Typescript 的引用和构建模式将 Mono 存储库编译为无服务器捆绑包?

Typescript 最近引入了一项与 monorepos 配合使用的新功能:引用。通过指定引用,您可以使用构建所有相互依赖的包tsc -b(另请参阅此博客文章

这似乎非常适合与大型单一存储库一起使用,其中某些软件包是无服务器服务。这些服务通常依赖于 monorepo 的一个或多个包。我在这里创建了一个示例:

https://github.com/tommedema/serverless-mono-example

虽然使用 构建效果很好tsc -b,但问题是无服务器框架需要上传单个工件 .zip(在我的例子中上传到 AWS)。当构建无服务器服务时,就像这个例子一样,只有最近的源文件的编译文件才会被捆绑。

如何将 Typescript 的引用功能与无服务器 Mono 存储库结合使用?

typescript serverless-framework lerna monorepo serverless

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

无服务器 - 将授权类型设置为 CUSTOM 或 COGNITO_USER_POOLS 需要有效的授权者

我在 API 网关端点上附加自定义授权者时遇到问题。这是我的场景步骤:

\n\n
    \n
  1. 创建自定义授权者(使用 lambda 函数)。
  2. \n
  3. 创建集成类型为 HTTP 的新端点。
  4. \n
  5. 将 AuthorizationType 设置为 CUSTOM
  6. \n
\n\n

如何将自定义授权者附加到无服务器 yaml 上?

\n\n
    \n
  • 我尝试使用 AuthorizerId,收到错误 \xe2\x80\x9cProxyMethod - 指定的授权者 ID 无效。将授权类型设置为 CUSTOM 或 COGNITO_USER_POOLS 需要有效的授权者。\xe2\x80\x9d
  • \n
  • 我没有\xe2\x80\x99在无服务器文档上找到示例代码中找到上述场景的示例代码
  • \n
  • 我尝试遵循AWS 文档。它解释了如何使用 AuthorizerId,但不确定 Serverless 是否支持它。
  • \n
\n\n

有人可以帮助我吗?

\n\n

在此输入图像描述

\n\n

在此输入图像描述

\n

amazon-web-services aws-api-gateway serverless

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

AWS DynamoDB 与 RDS for Lambda 无服务器架构

我所在的团队目前正在为政府办公室和公众(目前范围缩小到卫生部门)之间的通信服务开发概念验证架构/应用程序。客户特别要求通过 AWS 服务采用主要无服务器的方法,我需要有关如何设置此架构(即 Lambda 与数据库关系)的建议。

粗略地说,该架构将利用 API Gateway 来处理请求,这将调用不同的 Lambda 作为微服务来访问数据库。

下图描述了快速关系架构。基本上,患者输入对其病情的描述,这构成了案例的基础。该病例由一名或多位护士在一次或多次会议期间处理,并记录与该病例相关的笔记。DB Schema(声誉不够)

根据我的研究,我发现就 RDS 而言,需要在安全性之间进行权衡(将 Lambda 保留在包含 RDS 实例的公共 VPC 之外,放弃安全最佳实践,这是公共部门的禁忌) )和性能(将 Lambda 放在带有 RDS 实例的私有 VPC 中,并由于 ENI 的配置而导致冷启动时间过长)。不过,可以通过使用 CloudWatch 对冷启动时间进行 ping 来取消冷启动时间,这可能是最佳的,也可能不是最佳的。

就 DynamoDB 而言,我个人非常缺乏经验(比 MySQL 更缺乏经验)并且不确定数据是否适用于 NoSQL 模型。如果是的话,DynamoDB 似乎是更好的方法。但根据我的理解,NoSQL 对涉及 JOIN 等的复杂查询的支持较少,这可能会消除它作为一个选项。

就数据/关系而言,感觉 SQL/RDS 更合适,但如果找到合适的数据模型,DynamoDB 会给 Lambda/AWS 服务带来更少的问题。所以我的问题是,是否最好选择私有 RDS 实例并尝试通过预热最关键的 Lambda 来消除冷启动,或者是否有一个不会导致复杂查询等问题的 NoSQL 模型事物?我是否遗漏了任何可能改变局面的关键方面?

amazon-web-services amazon-rds amazon-dynamodb aws-lambda serverless

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

无法配置将无服务器堆栈部署到 localstack

我正在使用无服务器来部署 AWS 无服务器堆栈。(即:lambda、sqs、sns)。我想在尝试部署到 AWS 之前先在本地运行。我已经搜索并看到localstack适合我的用例。这是我部署系统的步骤:

  1. 克隆项目并使用 docker 运行整个堆栈。(命令:docker-compose up
  2. 在我的项目中安装库serverless-localstack并更新serverless.yml

这是我的配置:

plugins:
  - serverless-localstack

custom:
  localstack:
    host: http://localhost
    debug: false
    endpoints:
    stages:
      - local
      - dev
    lambda:
      mountCode: False # Enable this flag to improve performance
Run Code Online (Sandbox Code Playgroud)

之后,我使用命令部署此堆栈:serverless deploy --stage local。但我总是遇到例外。

Serverless: Updating Stack...
Serverless: Recoverable error occurred (502), sleeping for 5 seconds. Try 1 of 4
Serverless: Recoverable error occurred (502), sleeping for 5 seconds. Try 2 of 4 …
Run Code Online (Sandbox Code Playgroud)

aws-sdk serverless localstack

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

Terraform cloudwatch 保留逻辑

我正在尝试向我的 terraform 脚本添加逻辑,以便在创建 lambda 时添加 CW 保留逻辑,以便我们的日志在 30 天后清除。我看到的是,当运行 terraform 来更新现有的 lambda(在添加新的保留逻辑之前部署的)时,我的工作失败并出现以下错误。

  • aws_cloudwatch_log_group.lambda-deploy:发生 1 个错误:

  • aws_cloudwatch_log_group.lambda-deploy:创建 CloudWatch 日志组失败:ResourceAlreadyExistsException:指定的日志组已存在状态代码:400,请求 ID:e500eb50-4a81-11e9-9c08-7152b4a0ad31:CloudWatch 日志组'/aws/lambda/{lambda -name}'已经存在。

以下是我设置 terraform 代码的方式:

resource "aws_lambda_function" "lambda-deploy" {
  filename      = "${var.filename}"
  function_name = "${var.functionname}"
  role          = "${var.role}"
  handler       = "${var.handler}"
  runtime       = "${var.runtime}"
  publish       = "${var.publish}"
  memory_size   = "${var.memory_size}"
  timeout       = "${var.timeout}"
  description   = "${var.description}"

  layers = "${var.layers}"

  environment {
    variables = "${var.envVars}"
  }

  tags {
    PLATFORM        = "${var.tag_PLATFORM}"
    BUSINESS_UNIT   = "${var.tag_BUSINESS_UNIT}"
    CLIENT          = "${var.tag_CLIENT}"
    BUSINESS_REGION = "${var.tag_BUSINESS_REGION}"
  }

  vpc_config …
Run Code Online (Sandbox Code Playgroud)

lambda terraform serverless

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

AWS Code Build 抛出错误“CLIENT_ERROR:未找到主要源和源版本的参考增量”

我正在使用 aws codebuild,它工作正常,我只有一个分支 master,并且构建正在从代码提交存储库的 master 分支获取代码,但突然构建失败并出现错误“CLIENT_ERROR:未找到主要的参考增量”源和源版本”。

这是我的构建规范文件代码

version: 0.2
phases:
  install:
    commands:
      - python -V
      - node -v
      - npm install serverless -g
      - sls plugin install -n serverless-python-requirements
      - npm install serverless-pseudo-parameters
      - npm install --save-dev serverless-step-functions
 
  build:
    commands:
      - SLS_DEBUG=* sls deploy --stage dev --region us-east-2
Run Code Online (Sandbox Code Playgroud)

预期日志, 预期日志

日志来了
错误发生后的日志

amazon-web-services aws-codecommit aws-codebuild serverless

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