integration/helpers/template.py (24 lines of code) (raw):
import json
import logging
from functools import reduce
import boto3
from samtranslator.model.exceptions import InvalidDocumentException
from samtranslator.translator.managed_policy_translator import ManagedPolicyLoader
from samtranslator.translator.transform import transform
from samtranslator.yaml_helper import yaml_parse
def transform_template(sam_template_path, cfn_output_path):
"""
Locally transforms a SAM template to a Cloud Formation template
Parameters
----------
sam_template_path : Path
SAM template input path
cfn_output_path : Path
Cloud formation template output path
"""
LOG = logging.getLogger(__name__)
iam_client = boto3.client("iam")
with open(sam_template_path) as f:
sam_template = yaml_parse(f)
try:
cloud_formation_template = transform(sam_template, {}, ManagedPolicyLoader(iam_client))
cloud_formation_template_prettified = json.dumps(cloud_formation_template, indent=2)
with open(cfn_output_path, "w") as f:
f.write(cloud_formation_template_prettified)
print("Wrote transformed CloudFormation template to: " + cfn_output_path)
except InvalidDocumentException as e:
error_message = reduce(lambda message, error: message + " " + error.message, e.causes, e.message)
LOG.error(error_message)
errors = map(lambda cause: cause.message, e.causes)
LOG.error(errors)