Wie behebe ich den Fehler „Diese Vorlage enthält keine zu importierenden Ressourcen“ in AWS CloudFormation?

Lesedauer: 3 Minute
0

Ich erhalte die folgende Fehlermeldung in der AWS CloudFormation-Konsole: „Diese Vorlage enthält keine zu importierenden Ressourcen. Weitere Informationen.“

Kurzbeschreibung

Sie erhalten diesen Fehler, wenn Sie die AWS CloudFormation-Konsole verwenden, um Ressourcen in einen vorhandenen Stack zu importieren, der außerhalb von CloudFormation erstellt wurde.

Dieser Fehler kann auftreten, wenn Sie die AWS CloudFormation-Konsole in Szenarien mit einem der folgenden Punkte verwenden:

  • Bedingte Ressourcen. Die Ressource, die Sie importieren, hat einen Bedingungsschlüssel, der mit einer Bedingung verknüpft ist, die als falsch ausgewertet wird.
  • Vorlagen für das AWS Serverless Application Model (AWS SAM). Die AWS CloudFormation-Konsole unterstützt den Abschnitt Transforms beim Importieren von Ressourcen nicht. Sie können keine Ressource mit einer Vorlage importieren, die die AWS::Serverless transform verwendet.
  • Fn::Transform. Die AWS CloudFormation-Konsole unterstützt die Verwendung der systemeigenen Funktion Fn::Transform beim Importieren von Ressourcen nicht.

Sie können die AWS-Befehlszeilenschnittstelle (AWS CLI) anstelle der AWS CloudFormation-Konsole verwenden, um diesen Fehler für Vorlagen zu beheben, indem Sie Folgendes verwenden:

  • AWS SAM
  • Fn::Transform

Um diesen Fehler für bedingte Ressourcen zu beheben, stellen Sie sicher, dass die im Bedingungsschlüssel angegebene Bedingung für die zu importierende Ressource als wahr bewertet wird.

Die AWS CLI verlangt, dass Sie importierte Ressourcen explizit mit dem CloudFormation-Befehl create-change-set bereitstellen.

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, vergewissern Sie sich, dass Sie die neueste AWS-CLI-Version verwenden.

Behebung

Im folgenden Beispiel wird die AWS CLI verwendet, um eine vorhandene AWS::ECS::Cluster-Ressource in einen CloudFormation-Stack zu importieren:

Resources:
  ...
  ECSCluster2:
    Condition: MyCondition
    Type: AWS::ECS::Cluster
    DeletionPolicy: Retain
    Properties:
      ClusterName: Cluster2

Hinweis: Bevor Sie mit den nächsten Schritten fortfahren, stellen Sie sicher, dass die Bedingung MyCondition als wahr bewertet wird.

Gehen Sie wie folgt vor, um die Ressource mithilfe der AWS CLI zu importieren:

Hinweis: Wenn sich Ihr Stack nicht in Ihrer standardmäßigen AWS-Region befindet, fügen Sie --region zu Ihren Befehlen hinzu oder ändern Sie die Standardregion, indem Sie die Umgebungsvariable AWS\ _DEFAULT\ _REGION festlegen und exportieren.

  1. Erstellen Sie eine Ressourcenimportdatei mit dem Namen import.txt. Zum Beispiel:
[
    {
        "ResourceType": "AWS::ECS::Cluster",
        "LogicalResourceId":
            "ECSCluster2"
        ,
        "ResourceIdentifier": {
            "ClusterName":"Cluster2"
        }
    }
]
  1. Führen Sie den folgenden Befehl create-change-set aus, um ein Changeset für Ihren Stack zu erstellen:
ID=$(aws cloudformation create-change-set --stack-name testStack --change-set-name testSet --resources-to-import file://import.txt --change-set-type IMPORT --template-body file://template.yaml --capabilities CAPABILITY_AUTO_EXPAND  --query 'Id' --output text)

Hinweis: Ersetzen Sie testStack durch Ihren Stacknamen und template.yaml durch den Namen Ihrer CloudFormation-Vorlagendatei. Der vorherige Befehl gibt den Amazon-Ressourcennamen (ARN) des Changesets zurück und speichert den ARN in der Umgebungsvariablen ID.

Hinweis: Sie müssen CAPABILITY_AUTO_EXPAND nur verwenden, wenn Ihre Vorlage Transformationen verwendet.

  1. (Optional) Führen Sie den folgenden Befehl aus, um zu warten, bis der Changesatz erfolgreich erstellt wurde:
aws cloudformation wait change-set-create-complete --change-set-name ${ID}
  1. Sehen Sie sich den Changesatz mithilfe der AWS CloudFormation-Konsole an. Oder verwenden Sie den folgenden Befehl describe-change-set:
aws cloudformation describe-change-set --change-set-name ${ID}
  1. Führen Sie den folgenden Befehl aus, um den Changesatz anzuwenden und Ihre Ressource in den Stack zu importieren:
aws cloudformation execute-change-set --change-set-name ${ID}
  1. (Optional) Um zu überprüfen, ob alle Eigenschaften in Ihrer Vorlage mit Ihrer Ressource übereinstimmen, verwenden Sie die Drifterkennung für die Ressource.

Verwandte Informationen

Eine vorhandene Ressource mithilfe der AWS-CLI in einen Stack importieren

Ressourcen zur Unterstützung von Import- und Drifterkennnugsvorgängen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren