0

Je ne parviens pas à déployer ou valider un modèle CloudFormation lors de l'utilisation de PowerShell, mais en utilisant le modèle exact, je n'ai aucun problème avec AWS CLI ou AWS Console.CloudFormation et PowerShell: erreur de format de modèle: structure non prise en charge avec

Prenons un modèle de base CloudFormation, appelons le Test.template.

{ 
    "AWSTemplateFormatVersion" : "2010-09-09", 
    "Description" : "Simple template.", 
    "Parameters" : {  
    "KeyName" : { 
     "Type" : "String", 
     "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the web server" 
    } 
    }, 

    "Resources" : { 
    "Ec2Instance" : { 
     "Type" : "AWS::EC2::Instance", 
     "Properties" : {   
     "KeyName" : "test",   
     } 
    } 
    } 
} 

Rien de spécial, très basique. En ignorant que cela échouerait lors de la création de la ressource EC2, il s'agit d'un modèle JSON CloudFormation correctement formaté.

Maintenant, si je lance cette commande en utilisant l'AWS CLI, il revient avec succès et sort les paramaters:

aws cloudformation validate-template --template-body file://c:/temp/Test.template 

En utilisant exactement le même fichier, si je lance ceci dans PowerShell je reçois une erreur:

Test-CFNTemplate -TemplateBody file://c:/temp/Test.template 

Test-CFNTemplate : Template format error: unsupported structure. At line:1 char:1 + Test-CFNTemplate -TemplateBody file://c:/temp/Test.template + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (Amazon.PowerShe...NTemplateCmdlet:TestCFNTemplateCmdlet) [Test-CFNTemplate], InvalidOperationException + FullyQualifiedErrorId : Amazon.CloudFormation.AmazonCloudFormationException,Amazon.PowerShell.Cmdlets.CFN.TestCFNTemplateCmdlet

J'ai aussi aucun problème de ce modèle le déploiement en utilisant soit la console AWS ou à l'aide aws cloudformation create-stack je ne peux pas comprendre pourquoi je ne peux pas le faire en utilisant PowerShell.

New-CFNStack renvoie le même erreur ci-dessus ainsi:

Template format error: unsupported structure.

J'ai installé la dernière version du module PowerShell AWS et je suis en cours d'exécution Powershell 5.1.14409.1012

Tout le reste je l'ai trouvé au sujet de cette erreur provenait de gens qui avaient des problèmes parce qu'ils n'utilisaient pas file:// dans le TemplateBody, mais cela ne semble pas être le cas ici.

Répondre

1

Apparemment, -TemplateBody ne prend pas en charge l'URI de fichier local. Vous devez d'abord lire le modèle dans une variable et l'utiliser comme ci-dessous.

$content = [IO.File]::ReadAllText("c:\test.template") 
Test-CFNTemplate -TemplateBody $content 

Après cela, il vous donnera maintenant la sortie attendue.

Test-CFNTemplate -TemplateBody $content 

Capabilities  : {} 
CapabilitiesReason : 
DeclaredTransforms : {} 
Description  : Simple template. 
Parameters   : {KeyName}