标签: aws-lambda

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

使用 AWS Lambda 的 .NET Core cookie 身份验证未持久

我无法使用 .NET Core 2.1 MVC 与 AWS Lambda 函数一起使用 cookie 身份验证。

我尝试过很多 cookie 选项的变体。我能够登录并看到在响应中创建的 asp cookie,但通常在刷新或单击任何链接(例如对服务器的下一个请求)后,我会返回到登录屏幕。*更新:看来我现在只需要登录两次并且保持登录状态。这也是使用 .net 2.1 的第二个 Lambda 函数,我注意到了这种行为。

我已经配置了 API 网关,该网关使用使用适用于 Visual Studio 的 AWS 扩展进行部署时设置的默认值。

我当前的startup.cs代码,适用于本地主机:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        // Cookie settings
        options.Cookie.SameSite = SameSiteMode.Lax;
        options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
        options.LoginPath = "/Login";
        options.LogoutPath = "/Logout";
        options.AccessDeniedPath = "/Login";
        options.Cookie.Name = "myapp.auth";
        options.Cookie.HttpOnly = true;
        options.Cookie.Expiration = TimeSpan.FromDays(1);
    });

    services.ConfigureApplicationCookie(options =>
    {
        // Cookie settings, only this changes expiration
        options.SlidingExpiration = true;
        options.ExpireTimeSpan = TimeSpan.FromDays(1);
    });
services.AddAntiforgery(options …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core-mvc aws-lambda asp.net-core aws-lambda-edge

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

如何在 2 个不同的 cloudformation 模板中创建 S3 和触发的 lambda

是否可以在单独的 CloudFormation 模板中创建 S3 存储桶和触发的 Lambda。我希望将长时间运行的资源堆栈与 Lambda 等经常更新的资源堆栈分开

当尝试单独创建 Lambda 时,它表示 lambda 事件中定义的存储桶应该在同一模板中定义,并且不能被引用。

S3 事件必须引用同一模板中的 S3 存储桶。

GetFileMetadata:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub '${targetenv}-lambdaname'
      CodeUri: target-file-0.0.1-SNAPSHOT.jar
      Handler: LambdaFunctionHandler::handleRequest
      Runtime: java8
      Timeout: 30
      MemorySize: 512
      Environment:
        Variables:
          STAGE: !Sub '${targetenv}'
          
      Events:
        S3Event:
          Type: S3
          Properties:
            Bucket:
              Ref: MyS3Bucket
            Events:
              - 's3:ObjectCreated:*'
  
  MyS3Bucket:
      Type: 'AWS::S3::Bucket'
      DependsOn: BucketPermission
      Properties:
          BucketName: !Sub 'bucketname-${targetenv}'
Run Code Online (Sandbox Code Playgroud)

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

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

AWS Lambda API 问题“错误:运行时退出并出现错误:退出状态 129”

我使用 Lambda NodeJS 在 AWS 中开发了 API。它按照要求工作并提供正确的响应,但定期会给出以下错误。

{
    "errorType": "Runtime.ExitError",
    "errorMessage": "RequestId: 3401bb1f-eb50-4c39-87cd-ce1188ce9150 Error: Runtime exited with error: exit status 129"
}
Run Code Online (Sandbox Code Playgroud)

仅当我在代码中使用MySQL数据库连接并进行SQL操作时才会出现上述错误。

请建议。

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

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

使用 AWS CDK 部署包含测试事件的 AWS Lambda 函数

在 AWS Lambda 管理控制台中,您可以将测试事件与函数关联。

使用 AWS CDK 部署 Lambda 函数时是否可以配置测试事件,以便稍后有人在管理控制台中查看该函数时可以使用测试事件?

amazon-web-services aws-lambda aws-cdk

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

AWS Lambda - SQS 与指数退避集成

我有一个由 SQS 事件触发的 AWS Lambda (python)。如果 lambda 失败,SQS 将根据重试设置重试。如何更改重试设置以启用指数退避?

python amazon-sqs amazon-web-services boto3 aws-lambda

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