--- AWSTemplateFormatVersion: "2010-09-09" Description: "Create a Lambda function that will take a comma seperated list of key=value pairs and return an array of key value pairs that can then be used in cloudformation tags resource parameter" Resources: LambdaExecutionRole: Type: AWS::IAM::Role Properties: ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - sts:AssumeRole LambdaTagParser: Type: AWS::Lambda::Function Properties: Handler: index.main Role: Fn::GetAtt: - LambdaExecutionRole - Arn Runtime: nodejs6.10 Code: ZipFile: | exports.main = (event, context, callback) => { let keyPairString = event.ResourceProperties.data; let keyPairs = keyPairString.split(',').map( item => ({ Key: item.split('=')[0], Value: item.split('=')[1]})); sendResponse(event,context,"SUCCESS", { result: keyPairs }); }; function sendResponse(event, context, status, data, err) { var reason = err ? err.message : ''; var responseBody = { StackId: event.StackId, RequestId: event.RequestId, LogicalResourceId: event.LogicalResourceId, PhysicalResourceId: 'tagparser-' + JSON.stringify(event.ResourceProperties.data), Status: status, Data: data }; console.log("RESPONSE:\n", JSON.stringify(responseBody)); var json = JSON.stringify(responseBody); var https = require("https"); var url = require("url"); var parsedUrl = url.parse(event.ResponseURL); var options = { hostname: parsedUrl.hostname, port: 443, path: parsedUrl.path, method: "PUT", headers: { "content-type": "", "content-length": json.length } }; var request = https.request(options, function(response) { console.log("STATUS: " + response.statusCode); console.log("HEADERS: " + JSON.stringify(response.headers)); context.done(null, data); }); request.on("error", function(error) { console.log("sendResponse Error:\n", error); context.done(error); }); request.on("end", function() { console.log("end"); }); request.write(json); request.end(); } Outputs: TemplateId: Description: "Template ID" Value: "LambdaTagParser" StackName: Description: "Stack Name" Value: !Sub "${AWS::StackName}" FunctionArn: Description: "Function ARN" Value: !Ref LambdaTagParser Export: Name: !Sub '${AWS::StackName}-FunctionArn'