Jor*_*rdi 4 amazon-web-services devops aws-serverless serverless-stack
这里是 IaC 项目结构:
\n./\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cdk.context.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package-lock.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 sst.json\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 stacks\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 common\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Msk.js\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Vpc.js\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 index.js\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 posiciones\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Consumer.js\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 DocumentDB.js\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vistas\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Api.js\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Database.js\nRun Code Online (Sandbox Code Playgroud)\nsst.json是:
./\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cdk.context.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package-lock.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 sst.json\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 stacks\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 common\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Msk.js\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Vpc.js\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 index.js\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 posiciones\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Consumer.js\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 DocumentDB.js\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vistas\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Api.js\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Database.js\nRun Code Online (Sandbox Code Playgroud)\n和stacks/index.js:
{\n "name": "rmo-serverless",\n "region": "us-west-2",\n "main": "stacks/index.js"\n}\nRun Code Online (Sandbox Code Playgroud)\n正如我上面提到的,我们是基础设施代码 (sst) 和服务代码 (lambda),位于不同的存储库中。
\n目前,我们正在创建管道。简而言之,我们有两条管道:
\n我们想要得到的是,当服务代码被推送到分支上时,它只会重新部署与服务相关的元素,lambdas......
\n这里的问题是,我们如何才能只部署基础设施项目(documentdb、rds、msk、vpc)?或者我们如何才能只部署服务项(lambda、api)?
\n为了最好地组织 sst 项目有什么建议吗?
\n一项建议是使用您的stage名字。例如,您可能有一个像这样的辅助函数/utils/index.ts:
/**
* A conditional helper function, add Stack based on given `stage` name.
*
* @param {App} app
* @param {string} stage
* @param {any} stack
* @returns void
*/
export const addStackPerStage = (app, stage, stack) => {
if (app.stage === stage) {
app.stack(stack);
}
};
Run Code Online (Sandbox Code Playgroud)
然后使用这个辅助函数,如下所示:
import { App } from "@serverless-stack/resources";
import { Api } from "./vistas/Api";
import { Database } from "./vistas/Database";
import { Vpc } from "./common/Vpc";
import { Msk } from "./common/Msk";
import { Consumer } from "./posiciones/Consumer";
import { DocumentDB } from "./posiciones/DocumentDB";
import { addStackPerStage } from "./utils";
/**
* @param {App} app
*/
export default function (app) {
app.setDefaultFunctionProps({ //not needed
runtime: "nodejs14.x",
});
// Infrastructure ONLY.
addStackPerStage(app, "infrastructure-only", Vpc);
addStackPerStage(app, "infrastructure-only", Msk);
addStackPerStage(app, "infrastructure-only", Database);
addStackPerStage(app, "infrastructure-only", DocumentDB);
// Service 1 Only
addStackPerStage(app, "service-1-only", Consumer); // use vpc.fromLookup instead
// Service 2 Only
addStackPerStage(app, "service-2-only", Api); // use vpc.fromLookup instead
}
Run Code Online (Sandbox Code Playgroud)
然后,您的脚本可以像这样使用:
sst deploy --stage=infrastructure-only
Run Code Online (Sandbox Code Playgroud)
关于分支名称,您可以使用npm类似https://www.npmjs.com/package/branch-name的包。然后,重构上面建议的代码库,以使用“分支名称”作为新的“标志”来有条件地“追加堆栈”。
最后,我将根据以下段落尽我所能回答:
What we are trying to get is that when a service code is pushed on branch, it only re-deploy services related elements, lambdas...
Problem here, is how could we only deploy infrastructure items (documentdb, rds, msk, vpc)? Or how could we deploy only service items (lambdas, api)?
Run Code Online (Sandbox Code Playgroud)
我希望这个建议有帮助。就我而言,我在组织单位和每个 OU 有 N 个 AWS 账户的情况下使用此辅助函数,还使用资源访问管理器 (RAM) 等。
奖励:我本周刚刚发现有关堆栈集的信息,如果您对此构造感兴趣,请查看此处,https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_cloudformation。 CfnStackSet.html。如果您也通过 AWS 账户部署 Stacks,那么这是理想的选择。
| 归档时间: |
|
| 查看次数: |
1947 次 |
| 最近记录: |