我想知道是否可以向 SQS 队列发送消息并为其订阅 SNS 主题以触发用于发送电子邮件的 lambda。
SQS -> SNS -> (Lambda) -> SES
我知道 SNS 消息可以发送到 SQS,但我很好奇是否可以采用相反的方式
前言:我不是在寻求配置帮助。我的用例已涵盖并且工作正常。这是一个理论问题。
在 AWS 上有一个名为的策略AWSLambdaExecute,其定义如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "logs:*" ],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [ "s3:GetObject", "s3:PutObject" ],
"Resource": "arn:aws:s3:::*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这个定义对我说:
这背后的原因是什么?他们为什么要谈论S3?(我的特定 lambda 调用与 S3 无关。)除了每个的单行描述之外,我们是否知道有关预定义策略的任何详细文档?
我正在尝试在 ECS 中构建我自己的服务发现版本,因为我希望向上和向下扩展的服务不是 HTTP 服务器,因此无法由 ELB 管理。此外,ECS 尚不支持 docker 的用户定义网络功能,这将是进行服务发现的另一种方式。正如该问题讨论中提到的:
目前服务发现是一个巨大的痛苦,需要另一个服务(它本身通常是基于集群的,自我发现然后侦听其他服务)。这是一个凌乱的解决方案,更不用说实施和维护更令人讨厌的 Lambda“解决方案”了。
因此,我将采用令人讨厌的 Lambda“解决方案”路线来代替其他选择。我需要构建这个 hack 服务发现的主要内容是在我的 EC2 主机上运行的每个 docker 容器的 IP 地址。
通过 SSH 连接到充当我的 ECS 容器实例之一的 EC2 服务器,我可以运行docker ps以获取每个正在运行的 docker 容器的容器 ID。对于任何给定的 containerId,我可以运行docker inspect ${containerId}它返回 JSON,包括有关该容器的许多详细信息,特别是NetworkSettings.IPAddress与该容器的绑定(我的发现实现所需的主要内容)。
我正在尝试使用 Lambda 中的 AWS 开发工具包来获取此值。到目前为止,这是我的 Lambda 函数(您也应该能够运行它——这里没有特定于我的设置):
exports.handler = (event, context, callback) => {
var AWS = require('aws-sdk'),
ecs = new AWS.ECS({"apiVersion": '2014-11-13'});
ecs.listClusters({}, (err, data) => {
data.clusterArns.map((clusterArn) => {
ecs.listTasks({
cluster: clusterArn
}, …Run Code Online (Sandbox Code Playgroud) 我目前是一个小组的一员,该小组正在处理部署 300 多个运行 Node.js 的 AWS Lambda 函数而不是更传统的 REST API 的影响。我最近实现了一个应用程序,该应用程序在私有子网上的 VPC 中的 EC2 实例上运行。因此,将与此应用程序大量通信的 Lambda 本身也被放置在同一 VPC 中的私有子网中。EC2 实例在 6 个私有/24 个子网中运行(我们地区的每个可用区一个)。lambdas 有 6 /20 个私有子网,它们被配置为在其中运行。据我所知,每次调用 lambda 都会在其中一个子网中分配一个 IP 地址,这在我们用完之前为我提供了大约 24,564 个 IP 地址。
我的问题是:
1) Lambda 是否只在实际运行期间占用IP地址,然后释放IP地址?更简洁地说,我们是否会很快用完 IP 地址,因为我们预计调用很快就会增加?我知道我可以将 VPC 中的更多地址空间分配给 lambda,但这会是我们一直在追寻的问题吗?
2) 如何在 AWS 控制台或其他地方查看 lambda 占用了多少 IP 地址?
注意:我是一名初级 DevOps 工程师,所以如果有什么不清楚的地方请原谅我并随时纠正我
我正在编写一个 AWS Lambda 函数来触发 ECS Fargate 任务。我正在遵循使用 AWS Fargate 和 Lambda 运行任务中提供的示例。虽然我的设置有效,但我不了解涉及 IAM 角色的部分之一。
其中一个步骤是创建一个 ECS 任务。我创建了该任务,其“任务执行 IAM 角色”保留在ecsTaskExecutionRole. 根据ECS任务设置页面的信息,“任务执行IAM角色”是
授权 Amazon ECS 为您的任务拉取私有映像和发布日志的角色。这在运行任务时代替 EC2 实例角色。
接下来,我创建 Lambda 函数。Lambda 函数设置的一部分是创建另一个 IAM 角色,因为根据“使用 AWS Fargate 和 Lambda 运行任务”页面,
Lambda 需要具有 2 个策略的 IAM 角色 - 一个用于运行任务,第二个用于将 ecsTaskExecutionRole 传递给任务。
角色看起来像这样(我压缩了空白以节省空间):
{ "Version": "2012-10-17",
"Statement": [
{ "Sid": "Stmt1512361420000",
"Effect": "Allow",
"Action": [
"ecs:RunTask"
],
"Resource": [ "*" ]
},
{ "Sid": "Stmt1512361593000",
"Effect": "Allow",
"Action": [ "iam:PassRole" ], …Run Code Online (Sandbox Code Playgroud) 在我的 AWS Lambda 函数上,每当我尝试使用nodemailer连接到我的 Amazon SES SMTP 服务器(端口 465)时,我的 javascript 代码就会超时。但是,如果我在本地运行脚本,它工作正常,这让我相信它要么是 lambda 拨出到 SMTP 服务器的问题,要么是 SMTP 服务器阻止 lambda 连接 - 我怀疑前者是问题.
我在 Cloudfront 发行版后面使用了防火墙,但我认为这不适用于传入的 SES 连接或传出的 lambda 函数。在 VPC 中,我可以看到有一个附加到实例的 Internet 网关。安全组的传出连接允许所有协议访问 0.0.0.0/0,但是,ACL 看起来很奇怪,因为它既允许又拒绝所有入站/出站连接:
在 VPC 中,我看到列出了 6 个子网,我不太清楚这些子网在宏伟计划中的作用。
在日志中,我只看到 Task timed out after 6.01 seconds
知道如何获得有关挂断位置的更多信息吗?
我管理的网站实际上不是很大,但 Lambda 被广泛使用,每次网站访问都会调用多次,导致每月有数十万次调用。
我注意到 CloudTrail 成本激增。进一步挖掘,我发现最大的问题是CreateLogStreamLambda 基础设施进行的调用,即是 AWS 的代码执行此操作,而不是我的代码。由于 CreateLogStream,我的 CloudTrail 成本是 Lambda 成本的 100 倍(Lambda 的免费套餐在某种程度上扭曲了这个比率)。
除了完全停用之外CloudTrail,有什么方法可以停止产生这些费用吗?
我对使用 Elastic Transcoder 和 Lambda 进行 WAV 到 AAC 转换进行了价格比较。我不得不说,AWS ET 比 Lambda 贵得多。
使用 ET 转码的 9 分钟音频文件:0.04 美元 在 1536MB Lambda 实例上转码的同一文件(运行时间为 33 秒,不包括免费套餐):请求为 0.0000002 美元,执行时间为 0.000825165 美元。
诚然,Lambda 转码需要 33 秒,而 ET 上的相同工作可能只需要三分之一左右。但 ET 的成本对我来说毫无意义。我在这里还缺少其他东西吗?我应该补充一点,这些转码是用户通过上传调用的(类似于 SoundCloud 如何获取上传的音频并将转码为 MP3),我不会发送批处理作业。所以也许 ET 不是适合我的用例的应用程序。
我已通过 AWS Cloud 9 创建了 Lambda Python 函数,但在尝试从 Lambda 函数写入 S3 存储桶时遇到了问题。当我在 Cloud 9 中测试时,Python 代码运行良好并完美写入 S3 存储桶。当我将其推送到 Lambda 函数并且它运行时,我认为会出现错误。这让我认为 5 月 9 日运行应用程序的角色与 Lambda 函数运行时的角色之间存在不同的权限。
给出了以下错误,我正在寻找一些关于我可能缺少的内容的建议,在错误下方我描述了设置:
[ERROR] ClientError: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
Traceback (most recent call last):
File "/var/task/index.py", line 22, in handler
s3.Bucket(bucket_name).put_object(Key=s3_path, Body=encoded_string)
File "/var/runtime/boto3/resources/factory.py", line 520, in do_action
response = action(self, *args, **kwargs)
File "/var/runtime/boto3/resources/action.py", line 83, in __call__
response = getattr(parent.meta.client, operation_name)(**params)
File "/var/runtime/botocore/client.py", line 320, in _api_call …Run Code Online (Sandbox Code Playgroud) 背景: 我使用过 EC2 和 RDS。最近,我收到一位客户的询问,他想使用 Amazon Web Services 开发移动和 Web 应用程序,并且需要关于他应该使用哪种服务的建议?
此外,我已经通过 YouTube 和 Google 上的几个教程来了解这些服务,但我仍然无法弄清楚他应该使用哪种服务。
问题: 我对上述服务没有任何适当的知识和经验。因此,我希望得到与他们合作过的人的建议。
请说明使用特定服务的优缺点,以便我更容易提供建议。
amazon-web-services elastic-beanstalk amazon-ecs amazon-ecr amazon-lambda
amazon-lambda ×10
amazon-iam ×3
amazon-ecs ×2
amazon-ses ×2
amazon-vpc ×2
amazon-ecr ×1
amazon-s3 ×1
aws-fargate ×1
docker ×1
permissions ×1
transcoding ×1