标签: aws-lambda

如何从执行角色有权这样做的 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万
查看次数

如何减小 AWS Lambda 的打包 python zip 文件的大小

下午,

我最近遇到了 AWS Lambda 和 Azure Functions。AWS 对压缩和解压文件的大小施加了限制,对于 python 脚本需要包含所有依赖模块。我一直在使用 lambda-uploader 来打包我的脚本和它的模块依赖项,但是 pandas 包太大了。

我见过人们在 AWS Lambda 上完成机器学习和使用 Pandas 的例子(虽然有点过时),但我看不出他们是怎么做的。有什么建议?

python amazon-web-services aws-lambda

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

如何使用 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
查看次数

CodePipeline:CodeDeploy 报告“BundleType 必须是 YAML 或 JSON”

CodeDeploy 报告“BundleType 必须是 YAML 或 JSON”

appspec.yml 位于 CodeCommit 的根目录中

构建规范.yml:

version: 0.2

phases:
  build:
    commands:
      - echo Build started on `date`
      - echo Compiling the Python code...
      - python HelloWorld_tst.py
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - HelloWorld.py
    - appspec.yml
  discard-paths: yes
Run Code Online (Sandbox Code Playgroud)

appspec.yml

version: 0.0
Resources:
    - autovisionfunction:
        Type: AWS::Lambda::Function
        Properties:
            Name: "autovisionfunction"
            Alias: "staging"
            CurrentVersion: "1"
            TargetVersion: "2"
            
Run Code Online (Sandbox Code Playgroud)

似乎在 CodePipeline 中找不到 appspec.yml

我已经从 S3 存储桶下载了人工制品 zip,里面有 appspec.yml。

在此处输入图片说明

我想念什么?

谢谢

奥利亚

amazon-web-services aws-code-deploy aws-lambda aws-codepipeline

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

运行 ECS 任务的 boto3 lambda 调用需要在修订号中进行硬编码?

长话短说,我不想将任务的 ECS 任务定义修订号硬编码到我的 lambda 源代码中。每次我有更新的任务定义时,基本上都在费力地更新我的源代码。在ECS 的 boto3 文档中run_task(),它明确指出

taskDefinition (string) -- [必需]

要运行的任务定义的系列和修订 (family:revision ) 或完整 ARN。如果未指定修订版,则使用最新的 ACTIVE 修订版。

但是,我发现如果我taskDefinition在client.run_task()没有特定修订号的情况下定义参数,则会出现权限错误:

调用 RunTask 操作时发生错误 (AccessDeniedException):用户:arn:aws:sts::MY_ACCOUNT_ID:assumed-role/my-lambda-role/trigger-ecs-task is notauthorized to perform: ecs:RunTask on resource: arn:aws:ecs:MY_REGION:MY_ACCOUNT_ID:task-definition/an-important-task

如果我将定义切换为an-important-task:LATESTor an-important-task:*,则会出现另一个错误:

...无权执行:ecs:RunTask on resource: *

这很奇怪,因为它看起来与文档说明的相反 - 当我包含一个修订号时,比如an-important-task:5,lambda 会完美地触发。在我的 lambda 函数中,我只是调用了我的 ECS 任务:

def lambda_handler(event, context):
    client = boto3.client('ecs')
    print("Running task.")
    response = client.run_task(
        cluster='my-cluster', 
        launchType='FARGATE',
        taskDefinition='an-important-task',  # <-- notice no revision number …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-ecs aws-lambda terraform

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

运行 AWS sam local invoke 时 Python 未找到模块

我刚刚开始使用 SAM 使用 AWS 无服务器并遇到以下问题:

SAM invoke 似乎找不到我的 lambda 处理程序正在导入的 python 模块,但我可以以其他方式导入该模块。

该结构我的项目是:

根目录/

  • 我的模块名称/
    • 我的模块.py
  • aws/
    • 山姆/
      • 模板.yaml
      • 打包的.yaml
      • myawsservice/
        • 应用程序
      • 测试/
        • 测试事件.json

我在 python3.6 虚拟环境中工作,我已经使用安装工具安装了我的 python 包(mymodulename):

python setup.py develop
Run Code Online (Sandbox Code Playgroud)

因此,如果我在虚拟环境中冻结 pip,我会看到:

Pillow==6.0.0
PyPDF2==1.26.0
reportlab==3.5.20
mymodulename==0.5.0
Run Code Online (Sandbox Code Playgroud)

另外如果我去:

cd root-dir/aws/sam/
python

>>> import mymodulename
Run Code Online (Sandbox Code Playgroud)

这成功了。所以它在python路径上。

但是当我在本地调用 sam 时,即:

sam local invoke MyAWSServiceFunction --event ../sam/test/test_event.json
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

2019-05-02 09:19:17 Found credentials in shared credentials file: ~/.aws/credentials
2019-05-02 09:19:18 Invoking app.lambda_handler (python3.6)

Fetching lambci/lambda:python3.6 Docker container image......
2019-05-02 …
Run Code Online (Sandbox Code Playgroud)

python-3.x aws-lambda aws-serverless

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

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
查看次数