gpt4 book ai didi

node.js - 在nodejs中,我可以有子文件夹,每个子文件夹都托管一个AWS lambda函数吗?

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:24 25 4
gpt4 key购买 nike

我正在尝试在 AWS 上实现无服务器应用程序。我想知道一种组织代码的好方法。比方说,我想要在 git 存储库下组织多个 lambda 函数,每个 lambda 函数及其关联代码都位于其自己的子文件夹中。

这是我尝试过的,每个 lambda 函数都有单独的子文件夹:

(venv367) dummy@dummy-VirtualBox:~/workspace/serverless-apps/DEVOPS-dailybackup-ebs$ ls -l
total 28
-rw-rw-r-- 1 dummy dummy 4061 Jan 13 19:23 index.js
drwxrwxr-x 3 dummy dummy 4096 Jan 13 19:23 node_modules
-rw-rw-r-- 1 dummy dummy 352 Jan 13 19:23 package.json
-rw-rw-r-- 1 dummy dummy 392 Jan 13 19:23 package-lock.json
-rw-rw-r-- 1 dummy dummy 1220 Jan 14 00:10 README.md

(venv367) dummy@dummy-VirtualBox:~/workspace/serverless-apps/DEVOPS-dailybackup-s3$ ls -l
total 28
-rw-rw-r-- 1 dummy dummy 4061 Jan 13 19:23 index.js
drwxrwxr-x 3 dummy dummy 4096 Jan 13 19:23 node_modules
-rw-rw-r-- 1 dummy dummy 352 Jan 13 19:23 package.json
-rw-rw-r-- 1 dummy dummy 392 Jan 13 19:23 package-lock.json
-rw-rw-r-- 1 dummy dummy 1220 Jan 14 00:10 README.md

在顶级项目中,我有 SAM template.yaml 如下

(venv367) dummy@dummy-VirtualBox:~/workspace/serverless-apps$ ls -l
total 16
drwxrwxr-x 3 dummy dummy 4096 Jan 14 05:14 00_DEVOPS-dailybackup-ebs
drwxrwxr-x 3 dummy dummy 4096 Jan 14 05:14 00_DEVOPS-dailybackup-s3
-rw-rw-r-- 1 dummy dummy 702 Jan 14 05:15 packaged.yaml
-rw-rw-r-- 1 dummy dummy 1402 Jan 13 23:45 README.md
-rw-rw-r-- 1 dummy dummy 939 Jan 14 05:15 template.yaml

在 template.yaml 中,我通过指定 Handler 及其父目录来部署 Lambda 函数

Resources:
EbsBackupFunction:
Type: AWS::Serverless::Function
Properties:
Handler: DEVOPS-dailybackup-ebs/index.handler
Runtime: nodejs8.10
FunctionName: DEVOPS-dailybackup-ebs

S3BackupFunction:
Type: AWS::Serverless::Function
Properties:
Handler: DEVOPS-dailybackup-s3/index.handler
Runtime: nodejs8.10
FunctionName: DEVOPS-dailybackup-s3

(1) 不过,我还没有详细研究无服务器框架。使用 AWS SAM 管理无服务器应用程序是否有更好的方法?

(2) 除了编写脚本执行 'cd ${dir} && npm install' 之外,还有其他方法可以在每个子文件夹下为 Nodejs 代码执行 npm install

(3) 如果上面的想法很糟糕,你能告诉我你会怎么做吗?

提前感谢所提供的任何帮助。

最佳答案

了解您正在使用 SAM,但如果您愿意考虑 serverless framework那么这就是您只需一个命令即可在 CI/CD 管道中管理它的方法。所有 Lambda 都将单独部署,每个函数都将在 node_modules 中具有该函数所需的依赖项

您需要将以下内容添加到您的 package.json devDependency 中。

"devDependencies": {
"serverless-plugin-optimize": "^4.0.2-rc.1"
}

serverless-plugin-optimize用于优化 Lambda 代码及其依赖项。

注意:使用serverless-plugin-optimize时,必须确保所有require(..)都放置在module.exports上方code> 在您的处理程序中。

您还需要serverless framework ,您可以全局安装它。

npm install -g 无服务器

存储库结构:

devops-backup/
- node_modules/
- package.json
- serverless.yml
- handlers/
- s3.js
- ebs.js

serverless.yml 配置:

service: DevOpsBackup
frameworkVersion: '>=1.2.1 <2.0.0'
provider:
name: aws
runtime: nodejs8.10
region: eu-west-1
stage: ${opt:stage} # Stage that you define when deploy using `serverless deploy --stage`
deploymentBucket: ${env:SLS_BUCKET} # Your deployment bucket name. CI must have access to this bucket.

iamRoleStatements:
- Effect: Allow
Action:
- s3:"*"
Resource: arn:aws:s3:::<bucket_name>
# Add more permissions as required by the functions

plugins:
- serverless-plugin-optimize

package:
individually: true

functions:
backupEbs:
handler: handlers/s3.handler
description: Create user
backupS3:
handler: handlers/ebs.handler
description: Update user

示例s3.js

module.exports.handler = async (event) => {
// ... your code
}

部署

您可以使用一个命令部署所有 Lambda,从存储库根目录运行它。

serverless deploy --stage prod -v # prod 是 stage/env 的名称

如果构建成功,您将能够在 Lambda 控制台中找到您的函数。

  • DevOpsBackup-prod-backupS3
  • DevOpsBackup-prod-backupEbs

关于node.js - 在nodejs中,我可以有子文件夹,每个子文件夹都托管一个AWS lambda函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54182644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com