Kanji
・Cloud Engineer / Freelance ・Geboren 1993 ・Aus Ehime / Wohnhaft in Shibuya, Tokio ・5 Jahre AWS-Erfahrung Profildetails
Inhaltsverzeichnis
– Die in diesem Artikel genannten Python-Skripte entsprechen PEP8. - Sie verwenden flake8 zur Syntaxprüfung und black zur automatischen Formatierung. – Code, der Prüfungen aus Verarbeitungsgründen ignorieren muss, enthält „# noqa“. - Die maximale Zeilenlänge („max-line-length“) ist auf 200 Zeichen festgelegt.
pyyaml
– Das folgende Python-Skript konvertiert den Wert von „parameter_overrides“ in „samconfig.yml“ vom Array-Format in das CommadelimitedList-Format.Speichern Sie es unter einem geeigneten Python-Dateinamen (z. B. „transform_parameter_overrides.py“). - Da es nicht möglich ist, zwischen den SAM-CLI-Optionen zu wechseln, integrieren Sie dieses Skript bitte in Ihre Ausführungsprozedur oder CI/CD-Pipeline.
import yaml import argparse def is_already_transformed(overrides): return all(isinstance(item, str) and "=" in item for item in overrides) def transform_parameter_overrides(data): for key, value in data.items(): if isinstance(value, dict) and "global" in value and "parameters" in value["global"]: parameters = value["global"]["parameters"] if "parameter_overrides" in parameters: if not is_already_transformed(parameters["parameter_overrides"]): new_overrides = [] for override in parameters["parameter_overrides"]: if isinstance(override, dict): for k, v in override.items(): if isinstance(v, list): v = ",".join(v) new_overrides.append(f"{k}={v}") parameters["parameter_overrides"] = new_overrides return data def main(input_file, output_file): with open(input_file, "r") as f: data = yaml.safe_load(f) transformed_data = transform_parameter_overrides(data) with open(output_file, "w") as f: yaml.dump(transformed_data, f, default_flow_style=False, sort_keys=False) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Transform parameter overrides in a YAML file.") parser.add_argument("--input-file", help="Path to the input YAML file.", default="samconfig.original.yml") parser.add_argument("--output-file", help="Path to the output YAML file.", default="samconfig.yml") args = parser.parse_args() main(args.input_file, args.output_file)
python transform_parameter_overrides.py
version: 0.1 dev: global: parameters: parameter_overrides: - Environment: dev - Whitelist: # Windows Update # reference: https://learn.microsoft.com/en-us/windows-server/administration/windows-server-update-services/deploy/2-configure-wsus#211-configure-your-firewall-to-allow-your-first-wsus-server-to-connect-to-microsoft-domains-on-the-internet - .windowsupdate.microsoft.com - .update.microsoft.com - .windowsupdate.com - download.microsoft.com - .download.windowsupdate.com - wustat.windows.com - ntservicepack.microsoft.com - go.microsoft.com - dl.delivery.mp.microsoft.com - .delivery.mp.microsoft.com - .microsoft.com
version: 0.1 dev: global: parameters: parameter_overrides: - Environment=dev - Whitelist=.windowsupdate.microsoft.com,.update.microsoft.com,.windowsupdate.com,download.microsoft.com,.download.windowsupdate.com,wustat.windows.com,ntservicepack.microsoft.com,go.microsoft.com,dl.delivery.mp.microsoft.com,.delivery.mp.microsoft.com,.microsoft.com
– Bei der Bereitstellung von CloudFormation können Sie Parameter als externe Datei bereitstellen und die JSON-Datei mit der Option „–cli-input-json“ angeben.Der Prozess zum Generieren dieser JSON-Datei aus einer YAML-Datei ist wie folgt.
pyyaml json
– Das folgende Python-Skript konvertiert den Wert von „Parameters“ in „parameter.original.yml“ in eine JSON-Datei zur Verwendung mit „–cli-input-json“.Speichern Sie es unter einem geeigneten Python-Dateinamen (z. B. „transform_parameters.py“).
import yaml import json import argparse def transform_parameters(data): if "Parameters" in data: new_parameters = [] for param in data["Parameters"]: for key, value in param.items(): if isinstance(value, list): value = ",".join(value) new_parameters.append({"ParameterKey": key, "ParameterValue": value}) data["Parameters"] = new_parameters return data def main(input_file, output_file): with open(input_file, "r") as f: data = yaml.safe_load(f) transformed_data = transform_parameters(data) with open(output_file, "w") as f: json.dump(transformed_data, f, indent=4) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Transform parameters in a YAML file.") parser.add_argument("--input-file", help="Path to the input YAML file.", default="parameter.original.yml") parser.add_argument("--output-file", help="Path to the output JSON file.", default="parameter.json") args = parser.parse_args() main(args.input_file, args.output_file)
python transform_parameters.py
Parameters: Environment: - dev Whitelist: - .windowsupdate.microsoft.com - .update.microsoft.com - .windowsupdate.com - download.microsoft.com - .download.windowsupdate.com - wustat.windows.com - ntservicepack.microsoft.com - go.microsoft.com - dl.delivery.mp.microsoft.com - .delivery.mp.microsoft.com - .microsoft.com
{ "Parameters": [ { "ParameterKey": "Environment", "ParameterValue": "dev" }, { "ParameterKey": "Whitelist", "ParameterValue": ".windowsupdate.microsoft.com,.update.microsoft.com,.windowsupdate.com,download.microsoft.com,.download.windowsupdate.com,wustat.windows.com,ntservicepack.microsoft.com,go.microsoft.com,dl.delivery.mp.microsoft.com,.delivery.mp.microsoft.com,.microsoft.com" } ] }