J'ai essayé de faire une liste en extrayant uniquement les informations sur les paramètres du fichier yaml de CloudFormation. C'est un produit inachevé qui peut causer une erreur selon la façon d'écrire yaml, mais j'ai personnellement compris le point, donc je vais le laisser ici.
C'est le site que j'ai utilisé comme référence lors de la création de ce script.
Immédiatement, je présenterai le script.
! Sub
-> Fn :: Sub
, ! Ref
-> Fn :: Ref
)paramlist.py
## command sample
## python paramlist.py test.yml
#installer le module yaml`$ pip install pyyaml`
import yaml
import sys
import re
#Ne creuse pas profondément
exclusionStr = "|AWSTemplateFormatVersion|Description|Type|TemplateURL|DependsOn|Mappings|Outputs|"
args = sys.argv
path = args[1]
#(1) Code CloudFormation(yaml)En tant que fichier texte
f = open(path)
s0 = f.read()
f.close()
#(2) Étendez la syntaxe abrégée (exemple:`!Sub` -> `Fn::Sub` , `!Ref` -> `Fn::Ref`)
s1 = re.sub("!((Sub|Ref|Join|GetAtt|FindInMap))\s", r'Fn::\1 ', s0)
#(3) Lire comme yaml sans syntaxe abrégée
obj = yaml.safe_load(s1)
#(4) Vérifiez le contenu de yaml et affichez une liste d'informations sous Paramètres.
def readYaml( curObj, pathStr , exeFlg):
try:
if exeFlg == 0:
for key in curObj:
#Passer au niveau suivant
curFlg = key in exclusionStr
if not curFlg:
if key == "Parameters":
nxtFlg = 1
else:
nxtFlg = 0
pathStr += "/" + key
readYaml( curObj[key] , pathStr , nxtFlg)
else:
print("---- {0} ----".format( pathStr ) )
#Afficher les éléments et les valeurs des paramètres
for key in curObj:
print( "\t{0} - {1}".format(key , curObj[key] ) )
except Exception as e:
print("ERROR curObj = {0}, pathStr = {1}, exeFlg = {2}".format( curObj, pathStr, exeFlg ) )
print(e)
#############################
## -------- START -------- ##
print("---- Parameter List ----" )
readYaml( obj , "" , 0 )
Exécutez le script sur le code CloudFormation ci-dessous.
test.yml
AWSTemplateFormatVersion: "2010-09-09"
Description: cloudformation yaml sample
Parameters:
hogePrefix: { Type: String , Default: hogefuga123 }
BucketUrl: { Type: String , Default: "https://hogefuga123.s3.amazonaws.com/" }
AZName001: { Type: String , Default: ap-northeast-1a }
AZName002: { Type: String , Default: ap-northeast-1c }
VPCName: { Type: String , Default: vhoge01 }
Resources:
VPC:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: !Sub "${BucketUrl}${VPCTemplate}"
Parameters:
hogePrefix: !Ref hogePrefix
BucketUrl: !Ref BucketUrl
VPCName: !Ref VPCName
Résultat d'exécution
$ python paramlist.py test.yml
---- Parameter List ----
---- /Parameters ----
hogePrefix - {'Type': 'String', 'Default': 'hogefuga123'}
BucketUrl - {'Type': 'String', 'Default': 'https://hogefuga123.s3.amazonaws.com/'}
AZName001 - {'Type': 'String', 'Default': 'ap-northeast-1a'}
AZName002 - {'Type': 'String', 'Default': 'ap-northeast-1c'}
VPCName - {'Type': 'String', 'Default': 'vhoge01'}
---- /Parameters/Resources/VPC/Properties/Parameters ----
hogePrefix - Fn::Ref hogePrefix
BucketUrl - Fn::Ref BucketUrl
VPCName - Fn::Ref VPCName
Il s'agit du paramètre d'environnement lors de l'utilisation de ce script sur AWS Cloud9.
#Par défaut sur Python 2->Passer à Python 3
$ sudo alternatives --config python
$ pip -V
$ sudo pip install --upgrade pip
$ pip -V
#Installer le module yaml
$ pip install pyyaml
Comme présenté sur le site ci-dessus, le chargement de code CloudFormation contenant une syntaxe abrégée en yaml entraînera une erreur.
$ python sample.py test.yml
test.yaml
Exception occurred while loading YAML...
could not determine a constructor for the tag '!Sub'
in "test.yaml", line 72, column 20
Le script que j'ai créé est incomplet et je veux m'assurer qu'il n'y a aucune erreur dans aucun format yaml.
Recommended Posts