amazon-web-services – sam.yml文件中的多个Lambda函数

仍在等待实际的AWS支持:

https://github.com/aws-samples/aws-serverless-samfarm/issues/5

这假设是如何工作的?

我的用例是我有一个API网关前端lambda,它将事件写入SNS主题.我有另一个订阅该主题的lambda.

这些lambdas可以在单独的回购中吗?是.是否首先使用pub / sub模式来分隔这两个应用程序?是.

但这是一个简单的应用程序.该主题不会与其他功能共享,整个事情是自包含的.理想情况下,它们应该全部放在同一个模板中.

我可以轻松地将我想要的所有功能添加到我的SAM模板中,但是如何部署它们?他们每个人都应该有不同的CodeURI吗?这意味着我需要脚本复制并将每个lambda依赖项安装到不同的文件夹中,然后将模板中每个lambda的codeuri指向不同的文件夹.

对此没有更好的支持吗?

最佳答案 只要具有唯一的逻辑ID,您就可以在单个模板中拥有尽可能多的AWS :: Serverless :: Function资源.

如果您希望在单个存储库中保留多个lambda函数,则必须为每个lambda提供不同的CodeUri.例如CodeUri:./ handler-my-lambda-one.zip和CodeUri:./ handler-my-lambda-two.zip.

通常,在您的存储库中有一个Makefile是一个很好的做法,它有一个构建目标,负责准备handler-my-lambda – * .zip,例如:

build: 
    rm -rf node_modules
    npm install
    zip -r handler.zip index.js lib node_modules

和一个部署目标,它将打包您的代码(将代码上传到s3)并部署cloudformation.

package命令负责上传CodeUri中指定的zip工件,并将其替换为sam.out.yaml中的s3 URL

deploy:
    aws cloudformation package \
        --template-file sam.yaml \
        --output-template-file sam.out.yaml \
        --s3-bucket my-artifact-bucket-name

    aws cloudformation deploy \
        --template-file sam.out.yaml

既然你决定在一个存储库中有多个lambdas,那么你可能会为每个lambda函数提供两个构建命令,并且有一些cd …逻辑来更改每个函数的工作目录

点赞