我编写了一个AWS lambda函数,用于在上传S3对象时发送文本消息.我已经确认了订阅,我可以收到SNS控制台发送的测试消息.
当我测试lambda时,所有日志都说方法成功,但没有任何子消息到达.这是函数(主要是示例模板,但在本文中为了安全性而改变了我的主题).任何有关测试/尝试下一步的提示都会受到赞赏.
console.log('Loading function');
var aws = require('aws-sdk');
var s3 = new aws.S3({ apiVersion: '2006-03-01' });
exports.handler = function(event, context) {
var bucket = event.Records[0].s3.bucket.name;
var key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
var params = {
Bucket: bucket,
Key: key
};
var sns = new aws.SNS();
console.log('start of brians sns function')
var pubResult = sns.publish({
Message: 'Test publish to SNS from Lambda',
TopicArn: 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:lambdatop'
}, function(err, data) {
if (err) {
console.log(err.stack);
return;
}
console.log('push sent');
console.log(data);
});
console.log('after sns …Run Code Online (Sandbox Code Playgroud) 我有一个问题让我的python lambda函数工作.我得到一个无效的键,用于在调用技能时应该创建的事件数组.我得到的错误是:
{
"stackTrace": [
[
"/var/task/lambda_function.py",
163,
"lambda_handler",
"app_id = event['session']['application']['applicationId']"
]
],
"errorType": "KeyError",
"errorMessage": "'session'"
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码
def lambda_handler(event, context):
"""Lambda function entrypoint."""
# print("event.session.application.applicationId={}".format(
# event['session']['application']['applicationId']))
# Prevent unwanted access to this Lambda function.
app_id = event['session']['application']['applicationId']
if app_id != "amzn1.ask.skill.yyyyyyyy-xxx":
raise ValueError("Invalid Application ID: {}".format(app_id))
request = event['request']
if event['session']['new']:
on_session_started(
{'requestId': request['requestId']}, event['session'])
func_map = {
"LaunchRequest": on_launch,
"IntentRequest": on_intent,
"SessionEndedRequest": on_session_ended,
}
return func_map[request['type']](event['request'], event['session'])
Run Code Online (Sandbox Code Playgroud) 按照此说明在EC2 Ubuntu上安装Docker.一切顺利,但这一步:
$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
Run Code Online (Sandbox Code Playgroud)
sed:无法读取/etc/bash_completion.d/docker.io:没有这样的文件或目录
怎么离开这里?谢谢
我想知道函数中lambda函数的事件源.
我想要做的是使用一些AWS服务(CloudWatch,S3,Step函数等)中的一个lambda函数,并根据服务更改其行为.
上下文对象(函数的参数之一)具有有关lambda函数的信息,但不包含有关事件源的信息.
有没有办法知道这个?
目前我已经设置了一个从api网关端点触发的lambda函数.目标是通过形成响应并首先触发回调来保持响应时间较短,然后继续与sns交互以将工作传递给其他lambda函数.但是,当我对端点运行火焰计时,我注意到了一些奇怪的行为.主要是响应时间似乎不断增加,此外还有502和504响应代码返回但没有500响应代码(如果我理解正确,则表示调用限制,因为429响应在api网关中映射到500).如果我删除异步操作,我会看到合理的响应时间,并且没有错误.为什么这是观察到的行为,当实际触发响应时,在nodejs事件循环中项目排队的顺序是否不起作用,或者lambda只是等待事件队列在发送响应之前清空?如果是后者,则异步交互中的错误会导致502和504响应吗?
我正在尝试创建一个 Cloudwatch 规则,该规则在实例终止时将 EC2 实例的名称(而不是 InstanceID)发送到 SNS。下面的代码片段是当我选择创建这个简单规则时 AWS 提供的默认事件模式,但我向“详细类型”对象添加了 1 个部分。此部分是“实例名称”。但这不起作用,因为我收到的 SNS 电子邮件仍然不包含实例的名称。它仅在消息中包含 InstanceID。
{
"source": [
"aws.ec2"
],
"detail-type": [
"Instance Name",
"EC2 Instance State-change Notification"
]
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我仅成功地从 Cloudwatch 规则获取了 InstanceID。是否可以通过 Cloudwatch 检索标签中的自定义元数据?
话虽这么说,如果无法通过 Cloudwatch,是否可以以某种方式将 SNS 主题发送到 Lambda,并使用 Lambda 函数将 instanceID 转换为实例名称?
我的项目的重点是,我可以使用 Lambda 运行一个脚本,一旦这些实例终止,该脚本就会从监控应用程序中删除这些实例。在 AWS 之外,我们使用他们的名称来识别他们,而不是他们的实例 ID。
amazon-ec2 amazon-web-services amazon-sns amazon-cloudwatch aws-lambda
我正在尝试在使用ffmpeg的aws lambda上运行节点js脚本.为此,我需要在机器上安装ffmpeg.
我看过文档,但我找不到如何连接到运行lambda的机器.
我有一个只有私有 IP 的 EC2 实例,并且我在 say 上运行的同一个实例上安装了 Apache Kafka 10.0.4.44:9092。现在,我创建了 AWS Lambda 函数,它从给定的 Bucket 读取文档并将文档正文发送到在 EC2 实例上运行的 Apache Kafka。
现在,AWS Lambda 无法访问 EC2 实例服务。
如何授予 Lambda 访问权限以访问 EC2 上的 Apache kafka 服务?
我在我的多个网站上使用RDS.将子域指向该RDS服务器是不是一个坏/不安全的想法?这会对安全产生负面影响吗?
我目前正在尝试使用S3静态网站,API Gateway和AWS Lambda设计无服务器应用程序。我想将此网站公开,所以每个用户没有API密钥。
我想防止将这些端点滥用到非常低的水平,例如给定的公共IP每5秒发出1个请求。
AWS Shield或其中任何一种服务都可能吗?
aws-lambda ×7
amazon-ec2 ×3
amazon-sns ×2
node.js ×2
alexa ×1
amazon-rds ×1
amazon-s3 ×1
dns ×1
ffmpeg ×1
lambda ×1
python ×1
sed ×1
throttling ×1
ubuntu ×1