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"