标签: aws-lambda

AWS Api Gateway 403 错误 - 从所有来源启用 CORS

我创建了一个 lambda 函数,可以通过 API 网关访问该函数。但是,每当发出发布请求时,我都会收到以下错误

在此输入图像描述

当我导航到控制台并查看 API Gateway 时,我有

在此输入图像描述

最后,我的代码(Angular2)确实通过以下方式将适当的标头添加到请求中:

var headers = new HttpHeaders();
headers.append('Content-Type', 'application/json');

this.http.post('https://execute-api.us-east-1.amazonaws.com/prod/LambdaFunction', this.email, { headers: headers })
  .subscribe(data => console.log(data),
    err => console.log(err));
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

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

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

如何读取直接触发lambda执行的上传文件?

我当前的 AWS 设置是一个 lambda 函数,每当我将对象放入 S3 存储桶时就会触发该函数。我用 Java 实现了 lambda 的处理函数。我想要做的只是访问已上传的文件并触发 lambda 函数的执行。例如,如果我上传sample.json到存储桶,我想在处理函数中访问该文件的内容。

我知道我可以做这样的事情:

public Void handleRequest(S3Event input, Context context) {
  for (S3EventNotificationRecord record : input.getRecords()) {
    String key = record.getS3().getObject().getKey();
    String bucket = record.getS3().getBucket().getName();
    AmazonS3 s3Client = new AmazonS3Client(credentials);
    try {
      S3Object s3Object = s3Client.getObject(new GetObjectRequest(bucket, key));
      InputStream input = s3Object.getObjectContent();
      BufferedReader reader = new BufferedReader(new InputStreamReader(input));
      while (true) {
        String line = reader.readLine();
        if (line == null) break;
        // Do something with line...
      }
// ... …
Run Code Online (Sandbox Code Playgroud)

java lambda amazon-s3 amazon-web-services aws-lambda

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

如何使用 AWS Cloudwatch 将实例名称元数据(来自标签)发送到 SNS?

我正在尝试创建一个 Cloudwatch 规则,该规则在实例终止时将 EC2 实例的名称(而不是 InstanceID)发送到 SNS。下面的代码片段是当我选择创建这个简单规则时 AWS 提供的默认事件模式,但我向“详细类型”对象添加了 1 个部分。此部分是“实例名称”。但这不起作用,因为我收到的 SNS 电子邮件仍然不包含实例的名称。它仅在消息中包含 InstanceID。

   {
  "source": [
    "aws.ec2"
  ],
  "detail-type": [
    "Instance Name",
    "EC2 Instance State-change Notification"
  ]
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我仅成功地从 Cloudwatch 规则获取了 InstanceID。是否可以通过 Cloudwatch 检索标签中的自定义元数据?

话虽这么说,如果无法通过 Cloudwatch,是否可以以某种方式将 SNS 主题发送到 Lambda,并使用 Lambda 函数将 instanceID 转换为实例名称?

我的项目的重点是,我可以使用 Lambda 运行一个脚本,一旦这些实例终止,该脚本就会从监控应用程序中删除这些实例。在 AWS 之外,我们使用他们的名称来识别他们,而不是他们的实例 ID。

amazon-ec2 amazon-web-services amazon-sns amazon-cloudwatch aws-lambda

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

在认知池触发器下拉选择中添加别名 lambda 函数

我创建了一个 lambda 函数,发布了它的一个版本,并将该版本指向一个别名。我的 lambda 函数的 ARN: "ARN - arn:aws:lambda:aws_region:aws_id:function:function_name:product"。

因此,在认知池触发器中,我需要将此 lambda 函数分配到“自定义消息”部分,但它是一个下拉列表,用于填充没有任何别名的 lambda 函数。

问题是,如何将 lambda 函数的别名版本从下拉列表分配到认知池触发器中。

amazon-web-services amazon-cognito aws-sdk aws-lambda

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

如何根据 Cognito 用户池(或 DynamoDB)中的用户属性实现授权?

我对 AWS 比较陌生,但阅读了大量文档,但找不到我需要的内容。

我正在尝试实现身份验证,用户支付订阅费用,并根据他们是否付费来访问 S3 存储桶和项目。

我尝试将 API Gateway 与 Cognito 授权者一起使用,但我不知道如何在用户已付款时添加检查(例如通过在 DynamoDB 中查找)。有没有办法向 Cognito 授权者添加自定义授权逻辑?如果没有,是否仍可以将 Cognito 用户池与自定义授权者一起使用?最重要的是,你将如何实施整个事情?

我愿意接受建议。

amazon-s3 amazon-web-services amazon-cognito aws-lambda aws-api-gateway

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

强制对 ASP.NET Core 2 中的已知标头进行特定大小写

我有一个带有 Kestrel 的 ASP.NET Core 2 应用程序。该应用程序部署到 AWS Lambda/API Gateway。一切都按预期进行,除了一个导致一切不同的小细节。

对我的应用程序的某些请求需要发出多个与安全相关的Set-Cookie标头。由于 API Gateway 和 Lambda 之间传递数据的方式,重复的标头名称会连接在一起,这会导致标Set-Cookie头无效并且浏览器拒绝接受它。

克服此限制的建议解决方案是使用仅因大小写而异的多个标头名称:Set-Cookie, Set-cookie, set-cookie...

我知道这是一个 hacky 解决方案,但如果它有效,那么在 AWS 修复这个限制的同时,它应该已经足够好了。

但是,当使用 时HttpContext.Response.Headers.Add(name, value),已知的标头名称将被规范化并成为常规的重复标头。

是否有可能绕过这种常态化机制或以其他方式实现最终目标?

c# cookies aws-lambda aws-api-gateway asp.net-core-2.0

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

AWS:将 Cognito 授权用户限制为特定 Lambda 函数

我正在使用 AWS,并且有以下设置:UserPool; API网关、Lambda函数

API 网关使用 UserPool 授权者来保护 lambda 函数。到目前为止,这是有效的。现在我想将每个 lambda 函数限制为特定的用户组。因此,我在 CognitoPool 中创建了两个用户组(user和admin),并使用策略为每个组分配了特定角色。之后,我在 UserPool 中创建了一个用户并将其添加到该user组中。该用户仍然能够向每个路由/lambda 函数提交请求。

我如何提交请求?

  • 邮差
  • 在标头中设置IdToken(经过身份验证的用户)Authorization
  • 没有Authorization标头,响应是 401(如预期)
  • 使用Authorization标头,每个 lambda 函数都可以被触发(不是预期的)

用户池组的配置:

  • 团体用户:

    • 阿恩:Role ARN: arn:aws:iam::xxxxxx:role/User
    • 用户角色指定为

      {
        "Version": "2012-10-17",
        "Statement": [
          "Action": [
            "lambda:InvokeFunction",
            "lambda:InvokeAsync"
          ],
         "Resource": [
           "arn:aws:lambda:region:xxxxxx:function:api-dev-getItems
          ],
          "Effect": "Allow"
        ]
      }
      
      Run Code Online (Sandbox Code Playgroud)
  • 群组管理员:

    • 阿恩:Role ARN: arn:aws:iam::xxxxxx:role/Admin
    • AdminRole 指定为

      {
        "Version": "2012-10-17",
        "Statement": [
            "Action": [
            "lambda:InvokeFunction",
            "lambda:InvokeAsync"
          ],
          "Resource": …
      Run Code Online (Sandbox Code Playgroud)

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

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

是否可以通过 JSON 配置文件创建 AWS lambda 函数?

当我执行时

$ aws lambda list-functions
Run Code Online (Sandbox Code Playgroud)

我得到了所有 lambda 函数的列表:

{
    "Functions": [
        {
            "TracingConfig": {
                "Mode": "PassThrough"
            },
            "Version": "$LATEST",
            "CodeSha256": "aB+/Defg0+abcdefghijklmnopqerstuvwxyzABCDEF=",
            "FunctionName": "foofunction",
            "VpcConfig": {
                "SubnetIds": [],
                "SecurityGroupIds": []
            },
            "MemorySize": 128,
            "RevisionId": "123abc45-1234-1234-1234-123456789012",
            "CodeSize": 61521970,
            "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:foofunction",
            "Environment": {
                "Variables": {
                    "FOO": "BAR",
                    "ESCAPING": "[\"a\", \"b\", \"c\"]",
                    "IS_VALUE": "1"
                }
            },
            "Handler": "lambda_function.lambda_handler",
            "Role": "arn:aws:iam::123456789012:role/service-role/lamdaRole",
            "Timeout": 300,
            "LastModified": "2018-03-01T12:11:10.987+0000",
            "Runtime": "python3.6",
            "Description": ""
        }]
}
Run Code Online (Sandbox Code Playgroud)

是否可以用它来创建一个新的 lambda 函数?我正在寻找类似的东西

$ aws lambda create-function --config myconfig.json
Run Code Online (Sandbox Code Playgroud)

其中myconfig.json包含名称、环境变量、区域、角色、处理程序、运行时和描述。

aws-lambda

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

启动 StepFunction 并退出不会触发执行

我有 Lambda 函数tranportKickoff,它接收输入,然后将输入发送/代理到Step Function中。下面的代码确实运行,我没有收到任何错误,但同时步骤函数没有执行。

对于设计也很重要,我不希望函数transportKickoff等待步骤函数完成,因为它可能运行很长时间。然而,我希望调用Step Function 时出现的任何错误都会同步报告回来。也许这个想法是错误的,我不知何故错过了某个地方抛出的错误。但是,如果是这种情况,我想找到一种方法,能够实现在 Step Function 开始执行后立即退出 lambda 函数的目标。

注意:我可以独立执行步骤函数,并且我知道它工作正常

  const stepFn = new StepFunctions({ apiVersion: "2016-11-23" });
  const stage = process.env.AWS_STAGE;
  const name = `transport-steps ${message.command} for "${stage}" environment at ${Date.now()}`;
  const params: StepFunctions.StartExecutionInput = {
    stateMachineArn: `arn:aws:states:us-east-1:999999999:stateMachine:transportion-${stage}-steps`,
    input: JSON.stringify(message),
    name
  };
  const request = stepFn.startExecution(params);
  request.send();
  console.info(
    `startExecution request for step function was sent, context sent was:\n`,
    JSON.stringify(params, null, 2)
  );

  callback(null, {
    statusCode: 200 …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda aws-step-functions

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

带有云形成的 Lambda :将云形成变量传递给 python 代码

您好,下面是 clouformation,代码我们有 lambda 函数 s3 到 s3 复制的 python 代码片段。这里无法将目标存储桶从云形成参数传递到 python 代码片段,如 target_bucket = Ref: dstBucket

我现在正在硬编码 target_bucket = destination1 但我想作为 Ref 值传递

我尝试过不同的方法都没有成功。

                    ---
                    AWSTemplateFormatVersion: '2010-09-09'
                    Description: 'objects from Prod bucket to Dev data bucket '
                    Parameters:
                      CustomerName:
                        Description: Customer Name
                        Type: String
                        Default: incoming
                      ProjectName:
                        Description: Project Name
                        Type: String
                        Default: TEST
                      ENV:
                        Description: Environment (dev, prd)
                        Type: String
                        Default: dev
                      srcBucket:
                        Description: Source Bucket that receives data from outside
                        Default: source1
                        Type: String
                      dstBucket:
                        Description: Destination Bucket …
Run Code Online (Sandbox Code Playgroud)

aws-cloudformation aws-lambda

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