首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SST:只部署一些堆栈

SST:只部署一些堆栈
EN

Stack Overflow用户
提问于 2022-08-10 10:13:30
回答 1查看 259关注 0票数 2

这里列出了IaC项目结构:

代码语言:javascript
复制
./
├── cdk.context.json
├── package.json
├── package-lock.json
├── README.md
├── sst.json
└── stacks
    ├── common
    │   ├── Msk.js
    │   └── Vpc.js
    ├── index.js
    ├── posiciones
    │   ├── Consumer.js
    │   └── DocumentDB.js
    └── vistas
        ├── Api.js
        └── Database.js

sst.json是:

代码语言:javascript
复制
{
  "name": "rmo-serverless",
  "region": "us-west-2",
  "main": "stacks/index.js"
}

stacks/index.js

代码语言:javascript
复制
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";


/**
 * @param {App} app
 */
export default function (app) {
  app.setDefaultFunctionProps({   //not needed
    runtime: "nodejs14.x",
  });
  app.stack(Vpc)
     .stack(Msk)
     .stack(Database)
     .stack(DocumentDB)
     .stack(Consumer)
     .stack(Api);
}

正如我前面提到的,我们是基础设施代码(sst)和服务代码(lambdas),在不同的存储库中。

目前,我们正在建造输油管道。简言之,我们有两条管道:

部署indrastructure的

  • 1管道: documentdb、rds、msk、vpc
  • N管道(每个管道1):lambdas和api网关

我们试图得到的是,当服务代码被推到分支上时,它只会重新部署与服务相关的元素lambdas.

这里的问题是,我们如何只能部署基础设施项目(documentdb、rds、msk、vpc)?或者,我们如何只部署服务项(lambdas,api)?

有什么好的建议来组织这个项目吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-11 11:25:58

一个建议是使用您的stage名称。例如,您可能在/utils/index.ts中有一个类似于此的助手函数

代码语言:javascript
复制
/**
 * 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);
  }
};

然后使用这个助手函数,如下所示:

代码语言:javascript
复制
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
}

然后,您的脚本可以如下所用:

代码语言:javascript
复制
sst deploy --stage=infrastructure-only

关于分支名称,您可以使用像https://www.npmjs.com/package/branch-name这样的https://www.npmjs.com/package/branch-name包。然后,重构上面建议的代码基,使用“分支名称”作为新的“标志”,有条件地添加“Stack(S)”。

最后,我将根据以下段落尽我所能回答问题:

代码语言:javascript
复制
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)?

我希望这个建议能有所帮助。作为我的终端,我使用这个帮助功能在组织单位和N个AWS帐户每个OU,也与资源访问管理器(RAM)等。

奖金:我这周才发现Stack,如果这个构造感兴趣的话,https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_cloudformation.CfnStackSet.html,在这里看一看。如果您也是通过AWS帐户部署堆栈的话,那么非常理想。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73304447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档