理想情况下,我喜欢一种在部署之前测试lambdas等的方式,以便快速迭代开发。
我尝试过使用https://aws.amazon.com/blogs/compute/better-together-aws-sam-and-aws-cdk/,但它似乎还不适用于CDK管道,因为sam local看不到管道生成的嵌套CDK。
有什么好的技巧或工具来解决这个问题吗?
我是不是找错人了?我是否应该考虑直接在AWS/cloud9中开发lambdas?
发布于 2021-11-03 18:59:47
TLDR;是的,您可以缩短cdk开发周期。将您的管道用于prod部署。对于开发,使用cdk-cli将应用程序的副本部署到“沙箱”帐户。此沙箱非管道应用程序可以更快地部署到云中,并与local lambda sam testing you mention配合使用。
部署#1:产品管道部署正如您所看到的,我们通过CDK管道设置将其部署到我们的生产帐户。管道在测试帐户中运行。
管道的cdk.Stage调用makeAppStacks函数,该函数封装了我们的堆栈定义。当我们定义我们的非管道沙箱应用程序时,该函数在Deploy #2中第二次出现。我们只需编写一次堆栈代码,但将其部署为管道和独立应用程序。
// DeployStage.ts
// The stage gets added to the pipeline for deploys to test, prod etc.
export class DeployStage extends cdk.Stage {
constructor(scope: cdk.Construct, id: string, props: DeployStageProps) {
super(scope, id, props);
// actually adds the stack constructs to the app
makeAppStacks(
this,
props.appName,
props.env.account,
props.env.region,
);
}
}Deploy #2: cdk deploy to a Sandbox Account for iterative development。正如你所说,管道部署对于迭代开发来说太慢了--你不想等待15分钟,让CodePipeline从存储库中提取、构建和部署特性分支中的每一个小变化。
因此,为了更快地进行开发,我们通过CLI将相同的堆栈部署到沙箱帐户,这可以更快地部署到云中,并且可以使用本地sam调试。
# deploy the app to a sandbox account for fast(er) iterations
# app.ts uses the AWS_ACCOUNT env var to dynamically deploy
AWS_ACCOUNT=123456789000 npx cdk deploy '*' -a 'node ./bin/app' --profile my-sandbox// bin/app.ts
// called from the cli, deploys to the sandbox account
const app = new App();
const account = process.env.AWS_ACCOUNT;
// reused stack definitions!
makeAppStacks(app, 'UnicornApp', account, 'us-east-1');发布于 2021-11-03 23:49:17
除非您专门在lambdas中使用上下文对象,否则可以像测试任何其他函数一样测试Lambda_handler函数。例如,如果您的lambda是用python编写的,那么调用处理程序函数的单元测试就会像其他函数一样工作。您将需要模拟您的事件-有几个库帮助为各种AWS功能提供模拟事件-并为上下文提供一个空白的类似json的对象(python中的dict )。
当然,这只是单元测试。在更高层次的(集成)测试中,你将需要某种部署,但通常这些应该只是偶尔进行一次-使用编写良好的可测试代码,你可以在部署之前测试90%的行为-其他10%可以通过cli/控制台/或围绕它构建的其他结构来完成。
https://stackoverflow.com/questions/69827317
复制相似问题