У меня возникла странная проблема с CDK. У меня есть три окружения для служб, определенных как стеки. Ранее я развернул все три из них (каждый в отдельной учетной записи). Каждый стек отображается в CloudFormation.
Я прекрасно могу развернуть первый стек (cdk deploy myapp-service-development
). Однако когда я запускаю cdk deploy myapp-service-test
, я получаю сообщение об ошибке No stacks match the name(s) myapp-service-test
. Когда я комментирую первый стек (developemt), я могу развернуть следующий стек (test) и так далее.
Команда cdk ls
дает мне только первый стек, определенный в файле ниже:
#!/usr/bin/env node
import { devEnv, testEnv, prodEnv } from "@my-app/configuration";
import { MyStack } from "../src/infrastructure/index.js";
import * as cdk from "aws-cdk-lib";
const app = new cdk.App();
new MyStack(app, `myapp-service-development`, {
stackName: "service",
env: devEnv, // this is { account: "someAccountId", region: "eu-central-1"}
});
new MyStack(app, "myapp-service-test", {
stackName: "service",
env: testEnv,
});
new MyStack(app, `myapp-service-production`, {
stackName: "service",
env: prodEnv,
});
Это может быть ограничением в CDK, поскольку все ваши стеки имеют одно и то же имя.
@DougNaphas Честно говоря, понятия не имею, почему он начал так себя вести. У меня есть другие сервисы в монорепо с такой же настройкой, которые работают отлично. Я указываю учетные данные, как и вы. На данный момент я нашел обходной путь, который публикую
Это мой текущий обходной путь, который позволяет мне развертывать отдельные стеки.
#!/usr/bin/env node
import { devEnv, testEnv, prodEnv } from "@my-app/configuration";
import { MyStack } from "../src/infrastructure/index.js";
import * as cdk from "aws-cdk-lib";
const app = new cdk.App();
const bundlingStacks = app.node.tryGetContext("aws:cdk:bundling-stacks") as Array<string>;
const buildAllStacks = bundlingStacks.includes("**");
if (buildAllStacks || bundlingStacks.includes(`easypliant-${serviceName}-development`)) {
new MyStack(app, `myapp-service-development`, {
stackName: "service",
env: devEnv, // this is { account: "someAccountId", region: "eu-central-1"}
});
}
if (buildAllStacks || bundlingStacks.includes(`easypliant-${serviceName}-test`)) {
new MyStack(app, "myapp-service-test", {
stackName: "service",
env: testEnv,
});
}
if (buildAllStacks || bundlingStacks.includes(`easypliant-${serviceName}-production`)) {
new MyStack(app, `myapp-service-production`, {
stackName: "service",
env: prodEnv,
});
}
Когда вы запускаете
cdk deploy myapp-service-test
, как вы указываете, что хотите использовать учетные данные для тестовой среды? Я установил приложение, используя ваш код. Когда я запускаюnpx cdk --profile=<dev profile> --region=<dev region> deploy myapp-service-development
,npx cdk --profile=<test profile> --region=<test region> deploy myapp-service-test
иnpx cdk --profile=<prod profile> --region=<prod region> deploy myapp-service-prod
, все работает как положено, при начальном и последующих развертываниях.npx cdk ls
тоже работает как положено, отображая все стопки.