Lambdas can only have static code (see code upload via cloudformation), so passing in DynamoDB table names/SNS topic ARNs etc is not possible. But there is a neat workaround:
Make the lambda read the stacks output.
# my-stack.json "Outputs": { "World": { "Value": { "Ref": "MySnsTopic" } }, .... }
var AWS = require('aws-sdk'); var stack = context.invokedFunctionArn.match(/:function:(.*)-.*-.*/)[1]; exports.handler = function(event, context) { var cf = new AWS.CloudFormation(); cf.describeStacks({"StackName": stack}, function(err, data){ if (err) context.done(err, 'Error!'); else { var config = {} data.Stacks[0].Outputs.map(function(out){ config[out.OutputKey] = out.OutputValue }); context.succeed('hello ' + config.World) } }) };
# output "hello arn:aws:sns:ap-northeast-1:8132302344234:my-stack-MySnSTopic-211Z1K3GAGK9"