我在代码提交存储库中有代码,我正在编写一个 lambda 函数来为代码提交存储库的每个签入(事件)构建代码。
我无法安装 git,因此无法克隆存储库。
我该怎么办呢。
git amazon-web-services aws-lambda aws-codecommit serverless
我正在 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
我知道拥有两个不同的二进制文件是好的,因为它减少了每个函数的负载/大小。
但这只是一个实验。
提前致谢 :)
我有一个端点,它接收包括文件在内的表单数据。该文件可以是文本文件、图像或 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) 在我的 serverless.yml 中,我有一个 Lambda 函数,我想将其授权者设置为我在下面的资源部分中声明的 Cognito 用户池。我见过设置授权者的示例,aws_iam但这似乎是错误的。任何帮助都会很棒:)
我想我需要将授权者的 ARN 设置为池的 ARN,但如何获取它?或者说这是正确的吗?
yaml amazon-web-services aws-lambda serverless-framework serverless
Typescript 最近引入了一项与 monorepos 配合使用的新功能:引用。通过指定引用,您可以使用构建所有相互依赖的包tsc -b(另请参阅此博客文章)
这似乎非常适合与大型单一存储库一起使用,其中某些软件包是无服务器服务。这些服务通常依赖于 monorepo 的一个或多个包。我在这里创建了一个示例:
https://github.com/tommedema/serverless-mono-example
虽然使用 构建效果很好tsc -b,但问题是无服务器框架需要上传单个工件 .zip(在我的例子中上传到 AWS)。当构建无服务器服务时,就像这个例子一样,只有最近的源文件的编译文件才会被捆绑。
如何将 Typescript 的引用功能与无服务器 Mono 存储库结合使用?
我在 API 网关端点上附加自定义授权者时遇到问题。这是我的场景步骤:
\n\n如何将自定义授权者附加到无服务器 yaml 上?
\n\n有人可以帮助我吗?
\n\n\n\n\n我所在的团队目前正在为政府办公室和公众(目前范围缩小到卫生部门)之间的通信服务开发概念验证架构/应用程序。客户特别要求通过 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
我正在使用无服务器来部署 AWS 无服务器堆栈。(即:lambda、sqs、sns)。我想在尝试部署到 AWS 之前先在本地运行。我已经搜索并看到localstack适合我的用例。这是我部署系统的步骤:
docker-compose up)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) 我正在尝试向我的 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) 我正在使用 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)
serverless ×10
aws-lambda ×4
amazon-rds ×1
amazon-s3 ×1
aws-sdk ×1
busboy ×1
git ×1
go ×1
lambda ×1
lerna ×1
localstack ×1
monorepo ×1
node.js ×1
terraform ×1
typescript ×1
yaml ×1