标签: aws-lambda

使用nodejs从lambda触发器调整S3存储桶中图像的大小

我是nodejs和aws的新手,谁能指出以下用于调整s3存储桶中图像大小的代码有什么问题吗

程序如下

 'use strict';
 const AWS = require('aws-sdk');
 const S3 = new AWS.S3({
 accessKeyId: "xxxxxxxxxxxx",
 secretAccessKey: "yyyyyyyyyyy", 
 region: "us-east-1", 
 signatureVersion: 'v4',
 });

const Sharp = require('sharp');
const BUCKET = "patientimg"; 
const URL = "https://s3.ap-south-1.amazonaws.com";
exports.handler = function(event, context, callback) {
const key = event.queryStringParameters.key;
const match = key.match(/(\d+)x(\d+)\/(.*)/);
const width = parseInt(match[1], 10);
const height = parseInt(match[2], 10);
const originalKey = match[3];

S3.getObject({Bucket: BUCKET, Key: originalKey}).promise()
.then(data => Sharp(data.Body)
  .resize(width, height)
  .toFormat('png')
  .toBuffer()
)
.then(buffer => S3.putObject({
    Body: buffer,
    Bucket: …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services node.js aws-lambda

7
推荐指数
1
解决办法
9082
查看次数

如何为使用 CloudFormation 模板创建的 AWS Lambda 函数添​​加触发器?

我正在尝试根据以下示例从 CloudFormation 模板创建 lambda 函数:

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-lambda.html

从这个链接可以看出:

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html

无法为 lambda 函数添​​加触发器(如 S3 上传触发器)。

是否有解决方法可以在编写模板时指定触发器?

amazon-s3 amazon-web-services aws-lambda

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

AWS Lambda 函数启动 Glue 作业

我对 AWS lambda 不太了解。我的要求是在文件复制到 S3 存储桶后运行 Glue 作业。

因此,我计划使用 AWS Lamdba 启动 AWS Glue 作业。但 Lambda 函数有 300 毫秒的限制,而我的 Glue 工作将需要几个小时。

我的问题是 Lambda 将如何工作,它会启动 Glue 作业并退出吗?或者如果我们杀死 lambda job,Glue job 也会被杀死吗?

如果我们杀死 lambda 作业,胶水作业也会被杀死。那么还有什么其他解决方案呢?

aws-lambda aws-glue

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

AWS 云信息 | 配置 Lambda 以使用 S3 存储桶中最新版本的代码

我在 AWS 上使用 codepipeline、codebuild 和 cloudformation。

我的流程是:

  1. 将提交推送到 github,这会触发 codepipeline
  2. Codebuild 将 lambda 函数上传(压缩)到 S3 存储桶
  3. Cloudformation 配置 lambda 函数

云信息(简化):

CreateDoctorLambda:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: python3.6
      Handler: lambda_function.lambda_handler
      Role:
        Fn::GetAtt:
          - LambdaExecutionRole
          - Arn
      Code:
          S3Bucket: !Ref LambdaFunctionS3Bucket
          S3Key: CreateDoctor.zip
          S3ObjectVersion: Latest <-- This value is invalid
Run Code Online (Sandbox Code Playgroud)

问题:当我更新 lambda 函数的代码时(此新代码在代码构建期间被压缩并上传到 S3 存储桶),更改不会部署到现有的 lambda 函数。

根据AWS 文档:

要更新源代码位于 Amazon S3 存储桶中的 Lambda 函数,您必须通过更新 S3Bucket、S3Key 或 S3ObjectVersion 属性来触发更新。单独更新源代码并不会更新功能。

问题:有没有办法告诉Cloudformation使用S3中存储的最新版本的代码?使用S3ObjectVersion: Latest会导致错误。

amazon-s3 amazon-web-services aws-cloudformation aws-lambda

7
推荐指数
1
解决办法
4145
查看次数

如何在 Python 3 中重新编码 S3 密钥的 AWS Lambda 事件编码?

我正在编写一个 python 3 AWS Lambda 例程,它将从 Lambda 事件对象获取 S3 存储桶和密钥 (source_key),并将文件复制到具有相同密钥值 (Destination_key) 的另一个 S3 存储桶。

但是,事件对象中的 S3 Key 的编码方式使得当我使用 source_key 值写入目标存储桶时,S3 会抛出 404 错误。

S3 Lambda 事件对象返回的密钥:

'object': {'key': 'SBN-Fwd_+USPS+-+Springdale%2C+OH+-+Mail+Processing+Facility+-+Bid+Extension+Notice.eml' 
Run Code Online (Sandbox Code Playgroud)

将“key”值提交回 S3 时出错:

{'Error': {'Code': 'NoSuchKey', 'Message': 'The specified key does not exist.', 'Key': 'SBN-Fwd_+USPS+-+Springdale%2C+OH+-+Mail+Processing+Facility+-+Bid+Extension+Notice.eml'}, 'ResponseMetadata': {'RequestId': '2C0154D58032B5B4', 'HostId': 'zxp56SHdODohW5ln8B5GOW+YPqGfL4/kJGD+qV46yMhLZU92BrOC/hlh/HPHywAuGuJiICL0RFk=', 'HTTPStatusCode': 404, 'HTTPHeaders': {'x-amz-request-id': '2C0154D58032B5B4', 'x-amz-id-2': 'zxp56SHdODohW5ln8B5GOW+YPqGfL4/kJGD+qV46yMhLZU92BrOC/hlh/HPHywAuGuJiICL0RFk=', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'date': 'Thu, 20 Sep 2018 16:40:00 GMT', 'server': 'AmazonS3'}, 'RetryAttempts': 0}}
Run Code Online (Sandbox Code Playgroud)

我只是使用 boto3 将source_key 复制到destination_key,同时指定不同的存储桶。

 copy_source = {'Bucket': source_bucket, …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services python-3.x aws-lambda

7
推荐指数
1
解决办法
2622
查看次数

如何从 HTTPS 网站发出 HTTP 请求?

我有一个基于 HTTPS 的网站,我想向 HTTP 端口发出 GET 请求。目前,当我尝试时,我收到以下错误:

cannot load ${url} due to access control checks.

this page was not allowed to display insecure content from ${http-url}
Run Code Online (Sandbox Code Playgroud)

我考虑过将请求放入 AWS lambda 函数并调用 labmda 函数,因为这会给我一个 HTTPS URL?这可能吗。

即便如此,我想知道最简单的方法是什么,因为我对 AWS 不太了解,所以我必须学习它。

const url = 'http://website/fmi/xml/fmresultset.xml?-dbnames';

var xhttp = new XMLHttpRequest(); 
xhttp.onreadystatechange = function (params) { 
  console.log(xhttp.status); 
  if (xhttp.readyState ==4) { 
    if (xhttp.status == 200) { 
      console.log('===='); 
      console.log(xhttp.responseText); 
    } 
  } 
} 
xhttp.open("GET", url, true); 
xhttp.send();
Run Code Online (Sandbox Code Playgroud)

javascript https http aws-lambda

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

Aws Lambda 将列出所有可用的语言运行时

我有一个要求,希望确保所有单独的 Lambda 函数都使用最新版本的运行时。

使用 CLI cmd:aws lambda get function我能够获取该特定 lambda 函数的运行时版本,但我想确保它使用最新的语言版本。

浏览 Lambda 的 Aws 文档https://docs.aws.amazon.com/cli/latest/reference/lambda我无法找到任何可以判断哪些可用运行时的 API,也许从该列表中我可以确定哪个是最新的(也许通过检查该特定语言的最高版本号)。

所以只是想知道是否有我找不到的 AWS API 或者其他可以实现这一目标的方法?

注意:我不是在谈论 Lambda 函数版本控制,而是在谈论语言运行时版本。
例如,目前 AWS lambda 的最新运行时是 Node.js 8.10。因此,如果任何 Lambda 函数使用 Node.js 6.10 作为运行时,那么我想突出显示该 Lambda 函数。

amazon-web-services aws-cli aws-lambda

7
推荐指数
1
解决办法
1719
查看次数

Athena 查询失败并显示:“没有足够的权限来执行查询”

我正在编写一个 lambda 函数,该函数应该对 Athena 发起查询,当我执行 start_query_execution 时,它会成功,但当我稍后尝试获取查询状态时,我会看到以下内容:

'Status': {'State': 'FAILED', 'StateChangeReason': 'Insufficient permissions to execute the query. User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/test_role/test-audit is not authorized to perform: glue:GetTable on resource: arn:aws:glue:us-east-1:XXXXXXXXXXXX:catalog ', 'SubmissionDateTime': datetime.datetime(2019, 9, 16, 17, 13, 18, 749000, tzinfo=tzlocal()), 'CompletionDateTime': datetime.datetime(2019, 9, 16, 17, 13, 31, 197000, tzinfo=tzlocal())}
Run Code Online (Sandbox Code Playgroud)

为 lambda 分配了一个 IAM 角色,该角色具有以下权限:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "s3:*",
            "dynamodb:*",
            "kinesis:*",
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents",
            "cloudwatch:PutMetricData",
            "athena:*",
            "glue:*",
            "redshift:*"
        ],
        "Resource": [
            "*"
        ],
        "Effect": "Allow"
    }
]
} …
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 amazon-iam aws-lambda amazon-athena

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

API网关:无法启用CORS

我无法在 API 网关实例上启用 CORS,如下所示:

1、设置: 在此输入图像描述

2、结果: 在此输入图像描述

我已经尝试了很多事情,例如检查DEFAULT 4XX和DEFAULT 5XX并按照某些帖子中的建议手动输入 Access-Control-Allow-Methods 。

如果我将鼠标悬停在错误上,我会得到:Invalid Response status code specified。

我可以使用浏览器获取数据,但只能通过邮递员完成 POST 操作。我的 ReactJS 网站也不会发布,抛出:

Access to XMLHttpRequest at <ENDPOINT> from origin <S3-REACT-BUCKET> has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我读到我的 React 应用程序应该发送 CORS 标头(尚未实现),但我什至无法在 API 网关中启用 CORS!

cors aws-lambda aws-api-gateway serverless-framework serverless

7
推荐指数
1
解决办法
3303
查看次数

跨源请求的 502 bad gateway 错误

我正在使用该serverless框架将我的 lambda 部署到 AWS,并且已经能够通过 Postman 成功地将 POST 请求运行到与我的 lambda 函数关联的 API 网关,但是当我尝试从表单提交(AJAX 请求)运行 POST 请求时本地服务器我收到 502 错误消息,

Access to XMLHttpRequest at 'https://*id*.execute-api.us-east-1.amazonaws.com/prod/message' from origin 'http://localhost:2368' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)

这是我没想到的,因为cors我的 set 中有属性serverless.ymlto true,它为 HTTP 端点设置 CORS 配置。这是函数 yaml 设置:

functions:
  email:
    handler: handler.sendEmail
    events:
      - http:
          path: message
          method: post
          cors: true
Run Code Online (Sandbox Code Playgroud)

这是 jQuery AJAX 请求:

$.ajax({
    type: 'POST',
    url: 'https://*id*.execute-api.us-east-1.amazonaws.com/prod/message',
    crossDomain: …
Run Code Online (Sandbox Code Playgroud)

ajax aws-lambda aws-api-gateway serverless-framework

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