RETAIN-Entfernungsrichtlinie auf geheimem Stack, damit sie nicht auf Synth gelöscht wird


Debuggen

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.

gschpytschka

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.

Verwandte Artikel


Kann auf Angular nicht gelöscht werden

Vortex10 Ich versuche jedoch, eine Zeile aus einer Tabelle zu löschen, und selbst wenn ich den Beispielen zum Stapelüberlauf folge, kann ich keine Lösung finden. Eines der wichtigsten Dinge vor dem Start ist, dass ich die URL versteckt habe, sodass ich die URL