in aws/services/CloudFormation/MacrosExamples/S3Objects/lambda/macro.py [0:0]
def handle_template(request_id, template):
new_resources = {}
for name, resource in list(template.get("Resources", {}).items()):
if resource["Type"] == "AWS::S3::Object":
props = resource["Properties"]
if (
len(
[
prop
for prop in resource["Properties"]
if prop in ["Body", "Base64Body", "Source"]
]
)
!= 1
):
raise Exception(
"You must specify exactly one of: Body, Base64Body, Source"
)
target = props["Target"]
if "ACL" not in target:
target["ACL"] = "private"
resource_props = {
"ServiceToken": LAMBDA_ARN,
"Target": target,
}
if "Body" in props:
resource_props["Body"] = props["Body"]
elif "Base64Body" in props:
resource_props["Base64Body"] = props["Base64Body"]
elif "Source" in props:
resource_props["Source"] = props["Source"]
new_resources[name] = {
"Type": "Custom::S3Object",
"Version": "1.0",
"Properties": resource_props,
}
for name, resource in list(new_resources.items()):
template["Resources"][name] = resource
return template