gpt4 book ai didi

aws-sam-cli - 如何在本地运行 AWS SAM 模板并将其成功部署到 AWS(使用 Java Lambdas)?

转载 作者:行者123 更新时间:2023-12-04 14:20:44 30 4
gpt4 key购买 nike

我正在尝试使用 SAM(无服务器应用程序模型)和用 Java 编写的 Lambda 构建一个 AWS 应用程序。

通过在模板中使用这样的资源定义,我能够让它在本地运行:

Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: HelloWorldFunction
Handler: helloworld.App::handleRequest
Runtime: java8
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get

但要让 sam package 阶段只将实际代码(而不是整个项目目录)上传到 S3,我必须将其更改为:

    ...
Properties:
CodeUri: HelloWorldFunction/target/HelloWorld-1.0.jar
...

如 AWS SAM 示例项目自述文件中所述。

但是,这破坏了使用 sam build 后跟 sam local start-api 在本地运行应用程序的能力。

我试图通过将 CodeUri 值作为参数(使用 --parameter-overrides)来解决这个问题,这在本地有效但由于以下原因中断了打包阶段一个known issue与 SAM 翻译器。

有没有办法让本地构建和真正的 AWS 部署都能正常工作,最好是使用相同的模板文件?

最佳答案

到目前为止,我自己想到的唯一解决方法是使用不同的模板文件进行本地开发和实际打包和部署。

为了避免维护两个几乎相等的模板文件,我编写了一个用于在本地运行服务的脚本:

#!/bin/bash

echo "Copying template..."
sed 's/CodeUri: .*/CodeUri: HelloWorldFunction/' template.yaml > template-local.yaml

echo "Building..."
if sam build -t template-local.yaml
then
echo "Serving local API..."
sam local start-api
else
echo "Build failed, not running service."
fi

这感觉不太理想,但确实有效。仍然希望听到更好的选择。

我想到的另一个想法是为这些情况扩展具有单独 CodeUri 值的相互基础模板,但我认为 SAM 模板不支持类似的东西。

关于aws-sam-cli - 如何在本地运行 AWS SAM 模板并将其成功部署到 AWS(使用 Java Lambdas)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55276729/

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