标签: amazon-lambda

AWS SQS + SNS + Lambda

我想知道是否可以向 SQS 队列发送消息并为其订阅 SNS 主题以触发用于发送电子邮件的 lambda。

SQS -> SNS -> (Lambda) -> SES

我知道 SNS 消息可以发送到 SQS,但我很好奇是否可以采用相反的方式

amazon-web-services amazon-ses amazon-lambda

11
推荐指数
3
解决办法
2万
查看次数

AWSLambdaExecute 策略定义

前言:我不是在寻求配置帮助。我的用例已涵盖并且工作正常。这是一个理论问题。

在 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。

这背后的原因是什么?他们为什么要谈论S3?(我的特定 lambda 调用与 S3 无关。)除了每个的单行描述之外,我们是否知道有关预定义策略的任何详细文档?

permissions amazon-web-services amazon-iam amazon-lambda

8
推荐指数
1
解决办法
3274
查看次数

如何获取特定 AWS ECS 任务的 IP 地址?

我正在尝试在 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)

amazon-web-services docker amazon-ecs amazon-lambda

8
推荐指数
2
解决办法
9876
查看次数

VPC 中 lambda 的 IP 地址耗尽

我目前是一个小组的一员,该小组正在处理部署 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 工程师,所以如果有什么不清楚的地方请原谅我并随时纠正我

amazon-web-services amazon-vpc amazon-lambda

6
推荐指数
1
解决办法
3790
查看次数

为什么 AWS Lambda 需要将 ecsTaskExecutionRole 传递给 ECS 任务

我正在编写一个 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)

amazon-iam amazon-lambda aws-fargate

6
推荐指数
1
解决办法
2071
查看次数

从 AWS Lambda 连接到 SMTP 服务器

在我的 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

知道如何获得有关挂断位置的更多信息吗?

amazon-web-services amazon-ses amazon-vpc amazon-lambda

6
推荐指数
1
解决办法
3677
查看次数

如何阻止 Lambda 产生与 CreateLogStream 相关的 CloudTrail 费用?

我管理的网站实际上不是很大,但 Lambda 被广泛使用,每次网站访问都会调用多次,导致每月有数十万次调用。

我注意到 CloudTrail 成本激增。进一步挖掘,我发现最大的问题是CreateLogStreamLambda 基础设施进行的调用,即是 AWS 的代码执行此操作,而不是我的代码。由于 CreateLogStream,我的 CloudTrail 成本是 Lambda 成本的 100 倍(Lambda 的免费套餐在某种程度上扭曲了这个比率)。

除了完全停用之外CloudTrail,有什么方法可以停止产生这些费用吗?

amazon-web-services amazon-cloudwatch amazon-lambda

6
推荐指数
1
解决办法
414
查看次数

与 Lambda 和 ffmpeg 相比,使用 AWS Elastic Transcoder(用于 WAV 到 AAC)有哪些优势?

我对使用 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 不是适合我的用例的应用程序。

amazon-web-services transcoding amazon-lambda

5
推荐指数
0
解决办法
545
查看次数

AWS 权限:Lambda 访问 S3 被拒绝

我已通过 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)

amazon-s3 amazon-web-services amazon-iam amazon-lambda

5
推荐指数
1
解决办法
8253
查看次数

Elastic Container Service (ECS) 或 Elastic Container Registry (ECR)、Elastic Beanstalk 和 Lambda 之间如何选择?

背景: 我使用过 EC2 和 RDS。最近,我收到一位客户的询问,他想使用 Amazon Web Services 开发移动和 Web 应用程序,并且需要关于他应该使用哪种服务的建议?

  • 弹性豆茎
  • 拉姆达
  • 弹性容器服务 (ECS) 或弹性容器注册表 (ECR)

此外,我已经通过 YouTube 和 Google 上的几个教程来了解这些服务,但我仍然无法弄清楚他应该使用哪种服务。

问题: 我对上述服务没有任何适当的知识和经验。因此,我希望得到与他们合作过的人的建议。

请说明使用特定服务的优缺点,以便我更容易提供建议。

amazon-web-services elastic-beanstalk amazon-ecs amazon-ecr amazon-lambda

5
推荐指数
1
解决办法
243
查看次数