amazon-web-services - Lambda 触发的从 SNS 发送的多封电子邮件
问题描述
我有一个 Lambda 函数,它由特定 S3 存储桶中的新 PUT 请求触发。并通过 SNS 主题发送电子邮件。
Lambda函数代码如下:
import json
import boto3
print('Loading function')
s3 = boto3.client('s3')
sns = boto3.client('sns')
def lambda_handler(event, context):
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
eventname = event['Records'][0]['eventName']
sns_message = str("A new file has been uploaded in our S3 bucket. Please find the details of file uploaded belown\n\nBUCKET NAME: "+ bucket +"\nFILE NAME: " + key)
try:
if eventname == "ObjectCreated:Put":
subject= "New data available in S3 Bucket [" + bucket +"]"
sns_response = sns.publish(TargetArn='<SNS ARN ID>',Message= str(sns_message),Subject= str(subject))
except Exception as e:
print(e)
print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket))
raise e
但是,当一个新对象上传到 S3 存储桶时,会触发 2 封电子邮件。一种具有通过 lambda 函数编程的主题,另一种具有包含 JSON 的 AWS 通知,如下所示。
{"version":"1.0","timestamp":"2021-05-28T13:38:24.548Z","requestContext":{"requestId":"<Request ID>","functionArn":"<Lambda Function ARN>:$LATEST","condition":"Success","approximateInvokeCount":2},"requestPayload":{"Records":[{"eventVersion":"2.1","eventSource":"aws:s3","awsRegion":"us-east-1","eventTime":"2021-05-28T13:35:24.743Z","eventName":"ObjectCreated:Put","userIdentity":{"principalId":"<my ID>"},"requestParameters":{"sourceIPAddress":"<IP Address>"},"responseElements":{"x-amz-request-id":"ABCD","x-amz-id-2":"EFGH"},"s3":{"s3SchemaVersion":"1.0","configurationId":"<Config ID>","bucket":{"name":"<Bucket Name>","ownerIdentity":{"principalId":"<ID>"},"arn":"<Bucket ARN>"},"object":{"key":"<File Key>","size":632088,"eTag":"<Etag>","versionId":"<Version ID>","sequencer":"<Seq>"}}}]},"responseContext":{"statusCode":200,"executedVersion":"$LATEST"},"responsePayload":null}
我只想触发一封电子邮件。如何实施?
解决方案
推荐阅读
- python - 有没有办法使用模板匹配来检测输入的变化?
- prolog - 在 SWI-Prolog 中访问和爬取文件系统
- javascript - JavaScript“静态”方法?
- c - “for”循环中的变量范围
- discord.js - 如何向加入我服务器的新用户发送私人消息?
- java - 尝试升级 Singelton 以准确获取一个对象的两个实例
- amazon-web-services - 如何在 CDK 打字稿中创建 Dynamodb 指标
- mysql - 如何解决 Incorrect string value MySQL 错误?
- sql - 按 1,2,3,4 排序
- r - 在 flexdashboard 闪亮小部件中创建一个依赖于另一个输入变量的输入变量