CDK:单独部署微服务端点 (lambda)
CDK: Deploy microservice endpoints (lambdas) individually
我正在使用 CDK 为将使用 APIGateway 的 RestAPI 的微服务编写 IAAC。
我有一个包含所有 lambda 和 restApi 的堆栈,我可以很好地部署所有内容。
现在的问题是,当两个人在不同的端点上工作时,我希望他们能够只部署他们正在处理的端点 (lambda)。目前,当他们部署时,CDK 从他们的 repo 部署所有端点,覆盖某人可能从他们的分支部署的更改。
我很乐意分享一些代码,但我不确定要分享什么。我想我可以使用一些帮助来构建堆栈中的代码来实现我需要的。
您有一个 api 网关在来自两个不同存储库的两个不同端点之间共享。
我可以想到以下几种方法:
选项 1:我们需要 4 个堆栈。
- 网关堆栈:Api 网关和根端点。
- 端点 1 堆栈:Lambda 和必要的路由。
- Endpoint2 堆栈:Lambda 和必要的路由。
- 网关部署堆栈:部署阶段。
每次更改 lambda 函数时,部署它自己的堆栈和部署堆栈。
选项 2:我们只需要 1 个堆栈,但单独部署 lambda。
- 部署所有内容的单个 CDK 项目。唯一要记住的是,应该从 S3 存储桶位置获取 lambda 函数的工件。
- 在每个 lambda 的单独管道中,将工件复制到 cdk 中 lambda 引用的相同 S3 位置,并使用 aws cli 触发对 lambda 的更新 update-function-configuration 就像使用时间戳或环境变量的更新描述一样简单, 只是为了触发新的部署。
- 这样我们可以无缝部署 CDK 管道或单独的 lambda 管道
您有 2 个选项可以轻松解决此问题。
第一个是使用代码来识别谁在部署堆栈。如果开发人员 1 正在部署堆栈,则为堆栈设置一些环境变量或参数。基于该值,CDK 代码应仅编译端点存储库中的 1 个。
第二个选项是不将存储库构建为 (CDK) 部署的一部分。使用单独构建回购代码的持续交付(或其他任何方式),CDK 仅部署它们。
根据您项目的背景,任何一种策略都应该适合您。或者,如果直到现在还没有涉及,请分享更多上下文。
感谢您的意见。我采取了以下对我有用的方法:
const testLambda = new TestLambda(app, "dev-test-lambda", {
...backendProps.dev,
dynamoDbTable: docStoreDev.store,
});
const restApiDev = new RestApiStack(app, "dev-RestApi", {
...backendProps.dev,
hostedZone: hostedZones.test,
testFunction: testLambda.endpointFunction,
});
现在,如果开发人员只想部署他们的 lambda,他们将只部署 lambda 的堆栈,而不会部署任何其他内容。由于 restApiStack 需要 lambda 作为依赖项,因此部署它也会同时部署所有其他 lambda。
我正在使用 CDK 为将使用 APIGateway 的 RestAPI 的微服务编写 IAAC。
我有一个包含所有 lambda 和 restApi 的堆栈,我可以很好地部署所有内容。
现在的问题是,当两个人在不同的端点上工作时,我希望他们能够只部署他们正在处理的端点 (lambda)。目前,当他们部署时,CDK 从他们的 repo 部署所有端点,覆盖某人可能从他们的分支部署的更改。
我很乐意分享一些代码,但我不确定要分享什么。我想我可以使用一些帮助来构建堆栈中的代码来实现我需要的。
您有一个 api 网关在来自两个不同存储库的两个不同端点之间共享。
我可以想到以下几种方法:
选项 1:我们需要 4 个堆栈。
- 网关堆栈:Api 网关和根端点。
- 端点 1 堆栈:Lambda 和必要的路由。
- Endpoint2 堆栈:Lambda 和必要的路由。
- 网关部署堆栈:部署阶段。
每次更改 lambda 函数时,部署它自己的堆栈和部署堆栈。
选项 2:我们只需要 1 个堆栈,但单独部署 lambda。
- 部署所有内容的单个 CDK 项目。唯一要记住的是,应该从 S3 存储桶位置获取 lambda 函数的工件。
- 在每个 lambda 的单独管道中,将工件复制到 cdk 中 lambda 引用的相同 S3 位置,并使用 aws cli 触发对 lambda 的更新 update-function-configuration 就像使用时间戳或环境变量的更新描述一样简单, 只是为了触发新的部署。
- 这样我们可以无缝部署 CDK 管道或单独的 lambda 管道
您有 2 个选项可以轻松解决此问题。
第一个是使用代码来识别谁在部署堆栈。如果开发人员 1 正在部署堆栈,则为堆栈设置一些环境变量或参数。基于该值,CDK 代码应仅编译端点存储库中的 1 个。
第二个选项是不将存储库构建为 (CDK) 部署的一部分。使用单独构建回购代码的持续交付(或其他任何方式),CDK 仅部署它们。
根据您项目的背景,任何一种策略都应该适合您。或者,如果直到现在还没有涉及,请分享更多上下文。
感谢您的意见。我采取了以下对我有用的方法:
const testLambda = new TestLambda(app, "dev-test-lambda", {
...backendProps.dev,
dynamoDbTable: docStoreDev.store,
});
const restApiDev = new RestApiStack(app, "dev-RestApi", {
...backendProps.dev,
hostedZone: hostedZones.test,
testFunction: testLambda.endpointFunction,
});
现在,如果开发人员只想部署他们的 lambda,他们将只部署 lambda 的堆栈,而不会部署任何其他内容。由于 restApiStack 需要 lambda 作为依赖项,因此部署它也会同时部署所有其他 lambda。