标签: aws-lambda

AWS API 网关:状态代码 413,请求实体太大

我有一个带有 AWS API Gateway 和 Lambda 函数的无服务器 API。我正在使用自定义授权功能进行授权。标题太大,因此我收到此错误。通常,对于 nginx 服务器,我会更改 nging 配置,这将得到修复。我不知道如何在 AWS API Gateway 中处理这个问题。

aws-lambda aws-api-gateway

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

是否有适合向浏览器发送实时更新的 aws 服务?

我正在开发一个股票应用程序,必须让用户浏览器更新价格变化

我不需要访问过去的数据,浏览器只需在更改时获取当前数据

是否可以过滤 dynamodb 流并公开可以与 javascript EventSource 一起使用的端点(在 api 网关后面)?

amazon-web-services server-sent-events aws-lambda eventsource

9
推荐指数
2
解决办法
5349
查看次数

如何使用 Aws Lambda (python) 接收文件

我试图弄清楚如何通过 Python 中的 API 调用接收浏览器发送的文件。

允许 Web 客户端发送任何类型的文件(比如 .txt、.docx、.xlsx 等)。我不知道我是否应该使用二进制文件。

这个想法是在 S3 之后保存文件。现在我知道可以使用像 Aws Amplify 这样的 js 库并生成一个临时 url,但我对该解决方案不太感兴趣。

任何帮助表示赞赏,我已经在 Python 中广泛搜索了一个解决方案,但我找不到任何实际工作的东西!

我的 API 是私有的,我使用无服务器进行部署。

files_post:
  handler: post/post.post
  events:
    - http:
        path: files
        method: post
        cors: true
        authorizer: 
          name: authorizer
          arn: ${cf:lCognito.CognitoUserPoolMyUserPool}
Run Code Online (Sandbox Code Playgroud)

编辑

我有一个适用于文本文件但不适用于 PDF、XLSX 或图像的半解决方案,如果有人有我会非常高兴

from cgi import parse_header, parse_multipart
from io import BytesIO
import json


def post(event, context):


    print event['queryStringParameters']['filename']
    c_type, c_data = parse_header(event['headers']['content-type'])
    c_data['boundary'] = bytes(c_data['boundary']).encode("utf-8")

    body_file = BytesIO(bytes(event['body']).encode("utf-8"))
    form_data = parse_multipart(body_file, c_data)

    s3 = boto3.resource('s3')
    object …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services aws-lambda angular

9
推荐指数
1
解决办法
5441
查看次数

如何授予对 AWS Secrets Manager 的轮换 Lambda 访问权限

使用无服务器框架,我尝试构建一个 Lambda 函数,该函数会定期轮换存储在 AWS Secrets Manager 中的秘密。

我在配置 Secret Manager 执行 Lambda 所需的角色时遇到问题。在我的serverless.yml我定义了以下资源:

resources:
  Resources:
    RotateKeysRole:
      Type: AWS::IAM::Role
      Properties:
        RoleName: rotate-keys-role
        ManagedPolicyArns:
          - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
        AssumeRolePolicyDocument:
          Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Principal:
                Service:
                  - lambda.amazonaws.com
                  - secretsmanager.amazonaws.com
              Action: sts:AssumeRole
Run Code Online (Sandbox Code Playgroud)

并将此角色附加到轮换 Lambda,如下所示:

functions:
  rotateKeys:
    handler: lambdas.rotate_keys.handler
    role: RotateKeysRole
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试设置 Secrets Manager 以使用此 Lambda 来轮换密钥时,我会收到以下错误消息:

Secrets Manager 无法调用指定的 Lambda 函数。确保函数策略授予对主体 secretsmanager.amazonaws.com 的访问权限

这让我感到困惑,因为指定了这个主体。检查 IAM 控制台中的角色并没有发现任何我觉得有问题的地方。

在这种情况下如何正确配置角色设置?

amazon-web-services amazon-iam aws-lambda serverless-framework aws-secrets-manager

9
推荐指数
2
解决办法
6270
查看次数

一个或多个参数值无效:预期 xyz 键的类型不匹配:S 实际:M

我的 AWS Lambda 根据此答案调用 DynamoDB:https ://stackoverflow.com/a/33649402/495455

import json
import boto3
client = boto3.resource('dynamodb')
table = client.Table("DS-Users")

def lambda_handler(event, context):

    UserName = event['UserName']
    Email = event['Email']
    Score = event['Score']
    Mobile = event['Mobile']
    CountryId = event['CountryId']
    Level = event['Level']
    Magic = event['Magic']

    table.put_item(Item={'UserName':{'S':UserName},'Email':{'S':Email},'Score':{'N':Score},'Level':{'N':Level},'Mobile':{'S':Mobile},'Magic':{'S':Magic}})

    return {
        'statusCode': 200,
        'body': json.dumps(event)
    }
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

一个或多个参数值无效:预期用户名的类型不匹配:S 实际:M

研究错误会得到一些无法解决上述错误的答案:

1) https://github.com/awslabs/dynamodb-document-js-sdk/issues/17

错误是说 DynamoDB 需要 uuid 的字符串,但它得到了其他东西。根据来自 dynamodb 文档的这一点,S 是 dynamodb 的字符串,正如 raymolin 所说,M 是地图(如对象或模型)。因此,发送的 uuid 不能是字符串,而是模型/对象/映射。一旦修复,这应该可以正常工作。

2) https://forums.aws.amazon.com/thread.jspa?threadID=248424

问题在于我分配给 lambda 执行的 IAM 角色的权限。

我很难过,因为 UserName 是一个字符串,我在集成请求映射模板中强制执行它: …

type-mismatch amazon-dynamodb aws-sdk aws-lambda

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

Terraform - 如何为 AWS Lambda 创建 IAM 角色并部署两者?

我正在学习地形。我正在尝试创建一个新的 Lambda 函数。我意识到我还需要创建一个 IAM 角色。所以我正在尝试使用 Terraform 来做这两项工作。但它不允许我创建角色。

这是我的 Terraform 文件

provider "aws" {
  profile = "default"
  region  = "eu-west-1"
}

data "aws_iam_policy" "AWSLambdaBasicExecutionRole" {
  arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}

resource "aws_iam_role" "terraform_function_role" {
  name               = "terraform_function_role"
  assume_role_policy = "${data.aws_iam_policy.AWSLambdaBasicExecutionRole.policy}"
}

resource "aws_lambda_function" "terraform_function" {
  filename         = "terraform_function.zip"
  function_name    = "terraform_function"
  handler          = "index.handler"
  role             = "${aws_iam_role.terraform_function_role.id}"
  runtime          = "nodejs8.10"
  source_code_hash = "${filebase64sha256("terraform_function.zip")}"
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误

Error creating IAM Role terraform_function_role: MalformedPolicyDocument: Has prohibited field Resource
status code: 400
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

amazon-web-services amazon-iam aws-lambda terraform

9
推荐指数
2
解决办法
6568
查看次数

在 AWS Lambda 中使用 Python SQLAlchemy 是个好主意吗?

Amazon 建议不要在 lambda 函数中包含大型库/依赖项。据我所知,SQLAlchemy 是一个相当大的 Python 库。你认为在 lambda 函数中使用它是个好主意吗?一种选择是将其包含为 Lambda 层并在所有相关的 Lambda 函数中使用它。

无论如何,最好的做法是什么?

python sqlalchemy aws-lambda serverless-framework aws-lambda-layers

9
推荐指数
1
解决办法
5142
查看次数

aws serverless.yml 文件“无法找到满足声明‘opt:stage’的有效选项”错误

尝试运行无服务器时收到以下警告。

无服务器警告 -------------------------------------

找不到满足声明 'opt:stage' 的有效选项。下面是我的 serverless.yml 文件

# Serverless Config
service: api-service

# Provider
    provider:
      name: aws
      runtime: nodejs8.10
      region: ${opt:region, 'ap-east-1'}
      stage: ${opt:stage, 'dev'}
      # Enviroment Varibles
      environment:
        STAGE: ${self:custom.myStage}
        MONGO_DB_URI: ${file(./serverless.env.yml):${opt:stage}.MONGO_DB_URI}
        LAMBDA_ONLINE: ${file(./serverless.env.yml):${opt:stage}.LAMBDA_ONLINE}


    # Constants Varibles
    custom:
        # environments Variables used for convert string in upper case format
        environments:
        myStage: ${opt:stage, self:provider.stage}
        stages:
          - dev
          - qa
          - staging
          - production
        region:
          dev: 'ap-east-1'
          stage: 'ap-east-1'
          production: 'ap-east-1'

    # Function
    functions:
      testFunc:
        handler: index.handler
        description: ${opt:stage} API's …
Run Code Online (Sandbox Code Playgroud)

jenkins aws-lambda serverless

9
推荐指数
1
解决办法
7615
查看次数

AWS Lambda EFS | EACCES:权限被拒绝

所以,我正在尝试将我的 lambda 函数与 EFS 集成。我可以访问根目录(从 lambda 为只读),因为我可以xyz在我的根目录中看到可用的目录。/mnt/->xyz

当我尝试访问/mnt/xyz或/mnt/xyz/然后我收到此错误:

{
  "errorType": "Error",
  "errorMessage": "EACCES: permission denied, scandir '/mnt/xyz/'",
  "trace": [
    "Error: EACCES: permission denied, scandir '/mnt/xyz/'",
    "    at Object.readdirSync (fs.js:948:3)",
    "    at Runtime.exports.handler (/var/task/index.js:19:24)",
    "    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"
  ]
}
Run Code Online (Sandbox Code Playgroud)

授予接入点的权限:777

amazon-web-services amazon-iam aws-lambda amazon-efs

9
推荐指数
2
解决办法
2410
查看次数

AWS Lambda 不断返回“\”来自 Lambda 的Hello!\”

我在使用适用于 Python 3.8 的 AWS Lambda 时遇到了一些问题。无论我尝试运行什么代码,AWS Lambda 都会不断返回相同的响应。我正在尝试使用以下代码从 DynamoDB 实例中检索信息:

import json
import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('planets')

def lambda_handler(event, context):
    response = table.get_item(
        Key = {
            'id':'mercury'
        }
    )
    print(response)
    # TODO implement
    return {
        'statusCode': 200,
        'body': response)
    }
Run Code Online (Sandbox Code Playgroud)

我期待类似的输出'body':{'Item': {'id':'mercury', 'temp':'sizzling hot'}},甚至是错误,但我不断收到以下响应:

Response:
{
  "statusCode": 200,
  "body": "\"Hello from Lambda!\""
}
Run Code Online (Sandbox Code Playgroud)

我什至更改了代码,预计会出现错误,但我仍然得到相同的输出。

python amazon-web-services amazon-dynamodb aws-lambda

9
推荐指数
1
解决办法
637
查看次数