标签: aws-lambda

在 Localstack 中部署时,boto3 出现“无法连接到端点 URL”错误

我正在使用 Localstack 来测试我在本地的更改。我的 lambda 函数应该执行 putObject 并在 s3 存储桶中创建对象。直接在 AWS 环境中进行测试时,该功能运行良好。但在 Localstack 中,它不起作用。我收到以下错误。

\n\n
\n

无法连接到端点 URL:\n " http://localhost:4572/doyouknowme/pokemon.jpeg "\n \xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0raise EndpointConnectionError(endpoint_url=request.url ,错误=e)ponset_exceptionlhost:4572/doyouknowme/pokemon.jpeg"

\n
\n\n

AWS 凭证:

\n\n
[default]\naws_access_key_id = AKI****************\naws_secret_access_key = gL************************\nregion = us-east-1\n
Run Code Online (Sandbox Code Playgroud)\n\n

Lambda函数代码:

\n\n
import json\nimport urllib.parse\nimport boto3\nimport base64\n\nprint(\'Loading function\')\n# session = boto3.Session(profile_name=\'personal\')\n# s3 = session.client(\'s3\', endpoint_url=\'http://localhost:4574\')\n\ns3 = boto3.client(\'s3\', endpoint_url=\'http://localhost:4572\', region_name=\'us-east-1\')\n\n\ndef lambda_handler(event, context):\n    # raise Exception(\'Something went wrong\')\n    print("Received event: " + json.dumps(event, indent=2))\n\n\n    try:\n        image_data = base64.b64decode(event[\'image_data\'])\n        response = s3.put_object(\n            Body=image_data,\n            Bucket=\'doyouknowme\',\n            Key=\'pokemon.jpeg\',\n            ContentType=\'image/jpeg\'\n        )\n\n …
Run Code Online (Sandbox Code Playgroud)

boto3 aws-lambda localstack

12
推荐指数
1
解决办法
2万
查看次数

使用 Docker 容器映像在本地测试 AWS lambda

我一直很难让这件事正常工作我试图在本地调用在 docker 容器上运行的 Lambda,但我遇到了以下问题

Docker 文件

FROM public.ecr.aws/lambda/python:3.8


COPY myfunction.py ./

CMD ["myfunction.lambda_handler"]

Run Code Online (Sandbox Code Playgroud)

Python 文件 myfunction.py

import json
import sys

def lambda_handler(event, context):
    print("Hello AWS!")
    print("event = {}".format(event))
    return {
        'statusCode': 200,
    }
Run Code Online (Sandbox Code Playgroud)

步骤1:

FROM public.ecr.aws/lambda/python:3.8


COPY myfunction.py ./

CMD ["myfunction.lambda_handler"]

Run Code Online (Sandbox Code Playgroud)

输出

C:\Users\s.shah\IdeaProjects\YoutubeVideos\Learn>docker build --tag custom .
[+] Building 0.5s (7/7) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                                                                                            0.0s
 => => transferring dockerfile: 31B                                                                                                                                                                                                                                                                                                                             0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                                                                                                                                               0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                                                                                                 0.0s
 => [internal] load …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda aws-lambda-layers aws-lambda-containers

12
推荐指数
1
解决办法
1万
查看次数

如何从执行角色有权这样做的 AWS Lambda 调用 AWS_IAM 授权的 API 网关终端节点?

我想从执行角色有权执行该 API 网关的执行 AWS Lambda 调用授权设置为 AWS_IAM 的 AWS API 网关端点。

在此处输入图片说明

无论如何,我是否可以使用我的 Lambda 的当前执行角色对 API Gateway 的 HTTPS 请求进行签名?

编辑:

查看http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html,我可以使用 SDK 调用 AssumeRole 来承担有权执行 Api Gateway 的角色,然后提取可用于签署请求的密钥。

signing amazon-web-services aws-lambda aws-api-gateway

11
推荐指数
1
解决办法
5765
查看次数

如何在 AWS 中的特定时间触发 Lambda 函数?

我知道可用于重复运行 Lambda 的 CloudWatch 重复事件..但是有没有办法可以在特定时间触发它而不重复?

cron amazon-web-services aws-lambda

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

如何使用 terraform 添加 lambda 环境变量?

我希望我的 lambda 调用 API,这需要一个 API 令牌。我想将 API 令牌放入 lambda 环境变量中。我怎样才能让 terraform 做到这一点?还是我以错误的方式接近这个?

aws-lambda terraform terraform-provider-aws

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

在 Python 中写入流到 Google Cloud Storage

我正在尝试迁移AWS Lambda编写的函数PythonCF

  1. 即时解压缩并逐行阅读
  2. 在每一行上执行一些光变换
  3. 将未压缩的输出(一次一行或块)写入 GCS

输出 > 2GB - 但略小于 3GB 所以它适合Lambda,只是.

好吧,这似乎是不可能的,或者更多地涉及GCP:

  • 未压缩的无法放入内存或/tmp- 在撰写本文时限制为 2048MB - 所以 Python 客户端库upload_from_file(或_filename无法使用)
  • 有这篇官方论文,但令我惊讶的是,它指的是boto一个最初为 设计的库AWS S3,并且已经过时boto3了一段时间。没有真正的GCP流式写入或读取方法
  • Node.js的有一个简单的createWriteStream()-好的文章在这里顺便说一句-但没有相应的一行代码在Python
  • 可恢复的媒体上传听起来很像,但很多代码在 Node 中处理要容易得多
  • AppEngine 有云存储,但在它之外不可用 - 并且已经过时
  • 在一个工作包装器上几乎没有例子,用于逐行写入文本/纯数据,就像GCS是本地文件系统一样。这不仅限于Cloud FunctionsPython Client 库所缺乏的功能,而且由于资源限制,它在 CF 中更为突出。顺便说一句,我参与了添加可写 IOBase 函数的讨论,但它没有吸引力。
  • 显然使用虚拟机或 …

python azure-storage google-cloud-storage aws-lambda google-cloud-functions

11
推荐指数
1
解决办法
3620
查看次数

AWS Lambda + NAT 网关的替代方案

快速介绍我的场景:我有一个 VPC,其中包含一个 API 网关,该网关将其调用重定向到我的 Lambda 函数,然后它们访问 RDS 实例和外部 API 调用(互联网访问)。

它的结构

由于函数需要访问 RDS,我将 RDS 和 Lambdas 放在同一个 VPC 中,在没有公开访问的情况下正确保护 RDS。现在,由于 Lambda 位于 VPC 中,因此它们需要一个 NAT 网关来访问互联网(几乎所有这些功能都需要调用第三方 API),这就是我面临的一个巨大问题。

问题

我有一个小项目为几个用户(从 10 到 200 个用户不等)提供服务,并且使用我创建的无服务器设置,我预计每个月的费用为 3.00 美元到 10.00 美元。这是成本没有一个单一的NAT网关。现在,如果我们加上网关的价格,即每小时 0.045 美元- 我什至没有考虑每 GB 传输的数据 0.045 美元 -每月超过 30 美元。如果我不创建另一个多可用区并减轻可能的可用区故障,我会很愚蠢 - 所以2 个 NAT 网关 > 60.00 美元。

这不仅对我来说不切实际,而且它不会也使通常遵循按需方法的整个无服务器结构的要点无效吗?

如何解决这个问题?

我的替代方法之一是将 Lambdas 移出 VPC(意味着没有 VPC)并通过某种机制访问 RDS,而不使其公开访问 - 这也是我失败的地方,如何安全地访问 RDS …

nat amazon-web-services amazon-vpc aws-lambda

11
推荐指数
1
解决办法
1800
查看次数

如何抑制 aws lambda cli 输出

I want to use aws lambda update-function-code command to deploy the code of my function. The problem here is that aws CLI always prints out some information after deployment. That information contains sensitive information, such as environment variables and their values. That is not acceptable as I'm going to use public CI services, and I don't want that info to become available to anyone. At the same time I don't want to solve this by directing everything from AWS command …

aws-cli aws-lambda

11
推荐指数
1
解决办法
1804
查看次数

无服务器部署 - 未找到功能 - sls 部署

我正在尝试通过无服务器 CLI 部署无服务器功能,但出现以下错误:

发生错误:GenerateDownloadLinkLambdaFunction - 未找到函数:

奇怪的是,我已经为另一个阶段部署了这个函数qa,它部署得很好,但dev它只是抛出了上述错误。

如果我尝试从 AWS 控制台手动创建函数并部署它,Lambda 函数菜单会显示该函数是在 X 秒前部署的,但是它不会显示我serverless.yml在我的机器上的文件中的任何设置。

还值得注意的是,我已经设法在dev舞台上部署了此功能,但我不小心将其删除了。从那时起,它拒绝重新部署。

我一直在用头撞墙,想知道我做错了什么,但找不到任何东西,以前有没有其他人遇到过类似的 Serverless 问题?

amazon-web-services aws-lambda serverless-framework

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

如何在 C# 中使用 AWS Lambda 发送响应卡

嗨,我正在 amazon lex 上开发一个聊天机器人,我想使用 lambda 函数发送响应卡,但是在关闭响应格式中使用响应卡函数时,它给出了 null 异常的错误。谁能告诉它的解决方案?PS 我正在使用 Nikki 创建的 FlowerOrder 蓝图。

if (slots[greet] != null) 
        {

            var validateGreet = ValidateUserGreeting(slots[greet]);
            if (validateGreet.IsValid) 
            {
                return Close(sessionAttributes,
                              "Fulfilled",
                              new LexResponse.LexMessage
                              {
                                  ContentType = "PlainText",
                                  Content = String.Format("Hello Kindly choose one option")
                              },
                              new LexResponse.LexResponseCard
                              {
                                  Version = 1,
                                  ContentType = "application/vnd.amazonaws.card.generic",
                                  GenericAttachments =
                                  {
                                  new LexResponse.LexGenericAttachments
                                  {
                                      Buttons =
                                      {
                                         new LexResponse.LexButton
                                         {
                                             Text = "Shop Now",
                                             Value = "Shop Now"
                                         }
                                      },
                                      AttachmentLinkUrl = null,
                                      Title = "Shopping",
                                      SubTitle …
Run Code Online (Sandbox Code Playgroud)

c# chatbot aws-lambda aws-sdk-net aws-lex

11
推荐指数
1
解决办法
328
查看次数