【发布时间】:2017-10-14 01:12:43
【问题描述】:
能够在 Lambda 服务中成功创建 Lambda 函数。但它不会自动发送邮件。创建 Lambda 函数后,我手动单击测试。如何从 CloudFormation 执行此操作。
IAM 角色
"LambdaExecutionRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [{ "Effect": "Allow", "Principal": {"Service": ["lambda.amazonaws.com"]}, "Action": ["sts:AssumeRole"] }]
},
"Path": "/",
"Policies": [{
"PolicyName": "root",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [{ "Effect": "Allow", "Action": ["ses:*"], "Resource": "*" }]
}
}]
} }
拉姆达函数
"SendEmailNotification" : {
"Type": "AWS::Lambda::Function",
"Properties": {
"Handler": "index.handler",
"Role": { "Fn::GetAtt" : ["LambdaExecutionRole", "Arn"] },
"Code": {
"ZipFile": { "Fn::Join": ["", [
"var response = require('cfn-response');\n",
"var aws = require('aws-sdk');\n",
"var ses = new aws.SES({\n",
"region:'us-east-1'\n",
"});\n",
"exports.handler = function(event, context) {\n",
"console.log('Incoming: ', event);\n",
"var eParams = {\n",
"Destination: {\n" ,
"ToAddresses: ['abc@example.com']\n",
"},\n",
"Message: {\n",
"Body: {\n",
"Text: {\n",
{"Fn::Join" : ["",["Data: '", { "Fn::ImportValue" : "Route53DNSName" },"'\n"]]},
"}\n",
"},\n",
"Subject: {\n",
"Data: 'DNSName'\n",
"}\n",
"},\n",
"Source: 'abc@example.com'\n",
"};\n",
"console.log('SENDING EMAIL');\n",
"var email = ses.sendEmail(eParams, function(err, data){\n",
"if(err) console.log(err);\n",
"else {\n",
"console.log('EMAIL SENT');\n",
"console.log(data);\n",
"console.log('EMAIL: ', email);\n",
"context.succeed(event);\n",
"}\n",
"});\n",
"};"
]]}
},
"Runtime": "nodejs6.10"
}
}
【问题讨论】:
-
无需过多查看代码,您希望何时调用 lambda 函数?您是否配置了触发器来调用该函数?
-
如何获得 Route 53 DNS 的 SES 或 SNS 通知?
标签: node.js amazon-web-services aws-lambda amazon-cloudformation