RETAIN-Entfernungsrichtlinie auf geheimem Stack, damit sie nicht auf Synth gelöscht wird
Ich habe einen CDK-Stack, einschließlich eines Secrets-Stacks, und ich versuche derzeit, meine App bereitzustellen, und ich habe kürzlich einen Secret-Stack und einen Container aus ECR gelöscht. Da die aktuell bereitgestellte App jedoch darauf angewiesen ist, erhalte ich beim Bereitstellen Folgendes
Export <redacted>-*******-secrets-stack:ExportsOutputRefoauth2proxysecret66696FAADBFA07E9 cannot be deleted as it is in use by <redacted>-*******-ecs-stack
Also fügte ich den geheimen Stack wieder hinzu
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`
});
}
}
Wie würde ich vorgehen, um diesen Stapel beizubehalten? Da dieser Container/Stapel meines Wissens nicht verwendet wird, versucht er, den Stapel zu löschen, kann dies jedoch aufgrund der aktuellen Bereitstellung nicht.
Jede Hilfe hier wäre großartig.
Dies geschieht, weil versucht wird, zuerst den Stack mit den Geheimnissen und dann die Stacks zu aktualisieren, die zum Importieren verwendet wurden.
Dies schlägt fehl, da Exporte nicht vor Importen gelöscht werden können.
Die Lösung zum Entfernen des Stapels besteht darin, es zu einem zweistufigen Prozess zu machen. Erstens, und das ist der Hauptteil, müssen wir sicherstellen, dass die Exporte beibehalten werden, auch wenn sie nirgendwo importiert werden. Dafür gibt es eine Hilfsmethode: Stack.exportValue
.
Sie müssten also Folgendes zum Exportstapel hinzufügen:
this.exportValue(oauth2ProxySecrets.secretArn);
this.exportValue(appSecrets.secretArn);
Nachdem Sie dies getan haben, wird die Bereitstellung durchgeführt. Nach der Bereitstellung steht es Ihnen frei, den Stack-Code vollständig zu entfernen, da er nicht von anderen Stacks entkoppelt wird.