保留删除密钥堆栈上的策略,因此它不会在合成器上被删除



我有一个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`
});
}
}

我该如何保留这个堆栈,据我所知,这个容器/堆栈没有被使用,它试图删除堆栈,但由于当前的部署,不能。

如果有任何帮助就太好了。

这是因为它尝试先用秘密更新堆栈,然后再用用来导入它们的堆栈。

此操作失败,因为不能在导入之前删除导出。

移除堆栈的解决方案是将其分为两步。首先,这是主要的部分,我们需要确保即使没有从任何地方进口,也要保留出口。为此,存在一个辅助方法:Stack.exportValue.

因此,您需要在导出堆栈中添加以下内容:
this.exportValue(oauth2ProxySecrets.secretArn);
this.exportValue(appSecrets.secretArn);

执行此操作后,部署将通过。在部署之后,您可以自由地完全删除堆栈代码,因为它不会与其他堆栈解耦。

最新更新