Ich habe versucht, eine Liste zu erstellen, indem ich nur die Informationen zu den Parametern aus der yaml-Datei von CloudFormation extrahiert habe. Es ist ein unfertiges Produkt, das je nach Schreibweise von yaml einen Fehler verursachen kann, aber ich persönlich habe den Punkt verstanden, also werde ich es hier lassen.
Dies ist die Site, die ich beim Erstellen dieses Skripts als Referenz verwendet habe.
Ich werde das Skript sofort vorstellen.
--Skriptfluss
! Sub
-> Fn :: Sub
, ! Ref
-> Fn :: Ref
)paramlist.py
## command sample
## python paramlist.py test.yml
#Installieren Sie das Yaml-Modul`$ pip install pyyaml`
import yaml
import sys
import re
#Nicht tief graben
exclusionStr = "|AWSTemplateFormatVersion|Description|Type|TemplateURL|DependsOn|Mappings|Outputs|"
args = sys.argv
path = args[1]
#(1) CloudFormation-Code(yaml)Als Textdatei
f = open(path)
s0 = f.read()
f.close()
#(2) Erweitern Sie die abgekürzte Syntax (Beispiel:`!Sub` -> `Fn::Sub` , `!Ref` -> `Fn::Ref`)
s1 = re.sub("!((Sub|Ref|Join|GetAtt|FindInMap))\s", r'Fn::\1 ', s0)
#(3) Als yaml ohne abgekürzte Syntax lesen
obj = yaml.safe_load(s1)
#(4) Überprüfen Sie den Inhalt von yaml und zeigen Sie eine Liste mit Informationen unter Parameter an.
def readYaml( curObj, pathStr , exeFlg):
try:
if exeFlg == 0:
for key in curObj:
#Gehe zum nächsten Level
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 ) )
#Parameterelemente und Werte anzeigen
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 )
Führen Sie das Skript mit dem folgenden CloudFormation-Code aus.
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
Ausführungsergebnis
$ 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
Dies ist die Umgebungseinstellung bei Verwendung dieses Skripts in AWS Cloud9.
#Standardmäßig Python 2->Wechseln Sie zu Python 3
$ sudo alternatives --config python
$ pip -V
$ sudo pip install --upgrade pip
$ pip -V
#Installieren Sie das Yaml-Modul
$ pip install pyyaml
Wie auf der obigen Website beschrieben, führt das Laden von CloudFormation-Code mit abgekürzter Syntax als yaml zu einem Fehler.
$ 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
Das Skript, das ich erstellt habe, ist unvollständig und ich möchte sicherstellen, dass in keinem Yaml-Format Fehler vorliegen.
Recommended Posts