在秘密堆栈上保留 removalPolicy,这样它就不会在 synth 上被删除
RETAIN removalPolicy on secret stack so it doesn't get deleted on synth
我有一个 cdk 堆栈,包括一个秘密堆栈,我目前正在尝试部署我的应用程序,我最近从 ecr 中删除了一个秘密堆栈和容器。但是,由于当前部署的应用程序依赖于此,我在部署时得到以下信息
Export <redacted>-*******-secrets-stack:ExportsOutputRefoauth2proxysecret66696FAADBFA07E9 cannot be deleted as it is in use by <redacted>-*******-ecs-stack
所以我加回了秘密堆栈
import { Stack, StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import * as secretsmanager from "aws-cdk-lib/aws-secretsmanager";
interface SecretsStackProps extends StackProps {
namespace: string;
}
export class SecretsStack extends Stack {
public oauth2ProxySecrets: secretsmanager.Secret;
public appSecrets: secretsmanager.Secret;
constructor(scope: Construct, id: string, props: SecretsStackProps) {
super(scope, id, props);
// added this back
this.oauth2ProxySecrets = new secretsmanager.Secret(this, `oauth2-proxy-secret`, {
secretName: `${props.namespace}/<redacted>/oauth2-proxy`
}
);
//
this.appSecrets = new secretsmanager.Secret(this, `app-secret`, {
secretName: `${props.namespace}/<redacted>/app`
});
}
}
我将如何保留这个堆栈,据我所知,因为这个 container/stack 没有被使用它正在尝试删除堆栈,但由于当前的部署不能。
这里有任何帮助都会很棒。
发生这种情况是因为它首先尝试使用秘密更新堆栈,然后是用于导入它们的堆栈。
这失败了,因为无法在导入之前删除导出。
移除堆栈的解决方案是使其成为 two-step 进程。
首先,这是主要部分,我们需要确保即使没有在任何地方进口也能保留出口。为此,存在一个辅助方法:Stack.exportValue
.
因此您需要将以下内容添加到导出堆栈中:
this.exportValue(oauth2ProxySecrets.secretArn);
this.exportValue(appSecrets.secretArn);
执行此操作后,部署将完成。
部署后,您可以自由地完全删除堆栈代码,因为它不会与其他堆栈解耦。
我有一个 cdk 堆栈,包括一个秘密堆栈,我目前正在尝试部署我的应用程序,我最近从 ecr 中删除了一个秘密堆栈和容器。但是,由于当前部署的应用程序依赖于此,我在部署时得到以下信息
Export <redacted>-*******-secrets-stack:ExportsOutputRefoauth2proxysecret66696FAADBFA07E9 cannot be deleted as it is in use by <redacted>-*******-ecs-stack
所以我加回了秘密堆栈
import { Stack, StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import * as secretsmanager from "aws-cdk-lib/aws-secretsmanager";
interface SecretsStackProps extends StackProps {
namespace: string;
}
export class SecretsStack extends Stack {
public oauth2ProxySecrets: secretsmanager.Secret;
public appSecrets: secretsmanager.Secret;
constructor(scope: Construct, id: string, props: SecretsStackProps) {
super(scope, id, props);
// added this back
this.oauth2ProxySecrets = new secretsmanager.Secret(this, `oauth2-proxy-secret`, {
secretName: `${props.namespace}/<redacted>/oauth2-proxy`
}
);
//
this.appSecrets = new secretsmanager.Secret(this, `app-secret`, {
secretName: `${props.namespace}/<redacted>/app`
});
}
}
我将如何保留这个堆栈,据我所知,因为这个 container/stack 没有被使用它正在尝试删除堆栈,但由于当前的部署不能。
这里有任何帮助都会很棒。
发生这种情况是因为它首先尝试使用秘密更新堆栈,然后是用于导入它们的堆栈。
这失败了,因为无法在导入之前删除导出。
移除堆栈的解决方案是使其成为 two-step 进程。
首先,这是主要部分,我们需要确保即使没有在任何地方进口也能保留出口。为此,存在一个辅助方法:Stack.exportValue
.
因此您需要将以下内容添加到导出堆栈中:
this.exportValue(oauth2ProxySecrets.secretArn);
this.exportValue(appSecrets.secretArn);
执行此操作后,部署将完成。 部署后,您可以自由地完全删除堆栈代码,因为它不会与其他堆栈解耦。