标签: aws-lambda

如何从 AWS Lambda 运行 Scrapy 蜘蛛?

我正在尝试从 AWS Lambda 中运行一个爬虫蜘蛛。这是我当前脚本的样子,它正在抓取测试数据。

import boto3
import scrapy
from scrapy.crawler import CrawlerProcess

s3 = boto3.client('s3')
BUCKET = 'sample-bucket'

class BookSpider(scrapy.Spider):
    name = 'bookspider'
    start_urls = [
        'http://books.toscrape.com/'
    ]

    def parse(self, response):
        for link in response.xpath('//article[@class="product_pod"]/div/a/@href').extract():
            yield response.follow(link, callback=self.parse_detail)
        next_page = response.xpath('//li[@class="next"]/a/@href').extract_first()
        if next_page:
            yield response.follow(next_page, callback=self.parse)

    def parse_detail(self, response):
        title = response.xpath('//div[contains(@class, "product_main")]/h1/text()').extract_first()
        price = response.xpath('//div[contains(@class, "product_main")]/'
                               'p[@class="price_color"]/text()').extract_first()
        availability = response.xpath('//div[contains(@class, "product_main")]/'
                                      'p[contains(@class, "availability")]/text()').extract()
        availability = ''.join(availability).strip()
        upc = response.xpath('//th[contains(text(), "UPC")]/'
                             'following-sibling::td/text()').extract_first()
        yield {
            'title': title,
            'price': price,
            'availability': availability, …
Run Code Online (Sandbox Code Playgroud)

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

12
推荐指数
1
解决办法
7788
查看次数

AWS CloudFormation - 在 RDS 实例准备好后创建表?

CloudFormation 业余爱好者在这里。一直在网上查找,但找不到任何关于在我的 RDS 实例通过 CloudFormation 建立后我将如何创建表的参考资料。是否可以指定一个 Lambda 来启动和创建所有表,或者指定一个要应用的 SQL 文件?这方面的标准模式是什么?

amazon-web-services amazon-rds aws-cloudformation aws-lambda

12
推荐指数
1
解决办法
4786
查看次数

为什么将 VPC 与 AWS Lambda 或 AWS DynamoDB 结合使用?

我读到很多人都在努力将他们的 Lambda 连接到他们的 DynamoDB,因为他们住在一个 VPC 中。但我的问题是,为什么要使用 VPC?

VPC 旨在保护与外部世界(也称为互联网)直接连接的服务。例如 RDS 之类的东西,它只是等待任何知道 URL 的人查询的鸭子,因此可能成为 DDoS 的受害者,或者可以绕过凭据的零日漏洞利用等。

但是,AWS Lambda 和 DynamoDB 不是这样的,它们没有直接连接到互联网。他们的访问受到 IAM 凭证的保护,并且对于此类 DDoS/0Day 攻击实际上是安全的。

因此,问题是,如果 Lambda/DynamoDB 没有从中受益,为什么要为 Lambda/DynamoDB 使用 VPC,反而会使配置变得更加复杂?

我没有看到为 Lambda 或 DynamoDB 使用 VPC 的好处。

但也许我的理解是错误的?

amazon-web-services amazon-dynamodb amazon-vpc aws-lambda

12
推荐指数
1
解决办法
3319
查看次数

如何从 Catch 状态的前一个函数访问 Step Function 中的错误信息

我想知道如何访问我的 lambda 函数中引发的自定义异常的原因。我需要在 Step Functions 工作流程结束时访问它,如下所示。

下图是执行失败的示例。错误(error-info对象,有它自己Error和Cause部门)的输出被发现ParseTextractOutput,但我想知道如何访问它OutputNotFound,如下图所示。

阶跃函数图

在此处输入图片说明

输出

的输出ParseTextractOutput是

{
  "event"...
  "error-info": {
    "Error": "OutputNotFoundException",
    "Cause": "{\"errorMessage\": \"Contents of Textracted file: {...}}"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想在这些字段(Step Functions 定义)中以某种方式访问​​这些数据:

...
  "States": {
    "OutputNotFound": {
      "Type": "Fail",
      "Error": "<useful stuff here, like $.error-info.Error or something>",
      "Cause": "<useful stuff here, like $.error-info.Cause or something>"
    },
...
    "ParseTextractOutput": {
      "Type": "Task",
      "Resource": "functionARN",
      "Catch": [
        {
          "ErrorEquals": ["OutputNotFoundException"],
          "ResultPath": "$.error-info",
          "Next": …
Run Code Online (Sandbox Code Playgroud)

python state-machine amazon-web-services aws-lambda aws-step-functions

12
推荐指数
1
解决办法
2613
查看次数

AWS Lambda - Runtime.ImportModuleError:错误:找不到模块“jmespath”

我正在使用无服务器框架使用 aws lambda,我将运行时从 更改nodejs8.10为nodejs10.x,然后我得到了一个错误跟踪,

{"errorType":"Runtime.ImportModuleError","errorMessage":"Error: Cannot find module 'jmespath'","stack":["Runtime.ImportModuleError: Error: Cannot find module 'jmespath'","    at _loadUserApp (/var/runtime/UserFunction.js:100:13)","    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)","    at Object.<anonymous> (/var/runtime/index.js:36:30)","    at Module._compile (internal/modules/cjs/loader.js:701:30)","    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)","    at Module.load (internal/modules/cjs/loader.js:600:32)","    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)","    at Function.Module._load (internal/modules/cjs/loader.js:531:3)","    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)","    at startup (internal/bootstrap/node.js:283:19)"]}
Run Code Online (Sandbox Code Playgroud)

这个问题的原因是什么,如何解决?

amazon-web-services node.js aws-lambda serverless-framework

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

Lambda 别名和 CloudFront:函数 ARN 必须引用特定的函数版本

我有一个 Lambda,当使用包含版本(例如...:function:MyFunction:123)的 ARN 引用时,它用作 CloudFront 源请求处理程序。我已经PROD为版本 123创建了一个别名,我想改用它。

使用...:function:MyFunction:PRODARN 会产生以下错误

com.amazonaws.services.cloudfront.model.InvalidLambdaFunctionAssociationException:
The function ARN must reference a specific function version. (The ARN
must end with the version number.) ARN: 
...:function:MyFunction:PROD (Service: AmazonCloudFront; Status Code:
400; Error Code: InvalidLambdaFunctionAssociation; Request ID:
d407f350-bc7f-11e9-8498-e7f23762c03e)
Run Code Online (Sandbox Code Playgroud)

完全删除版本(即...:function:MyFunction)根据文档应该是最新的,使用$LATEST或LATEST版本都失败并出现相同的错误。

我发现的所有文档都表明这应该有效,所以我不确定我在这里搞砸了什么。我创建的 IAM 角色的权限可能有问题吗?

amazon-web-services amazon-cloudfront aws-lambda

12
推荐指数
1
解决办法
1469
查看次数

如何在单击按钮以节流的情况下取消 lambda 函数的节流

我决定单击 aws lambda 界面上的油门按钮,以防止在调试过程中的问题时进一步激活该功能。我看现在没有办法移除油门。

现在我点击了油门按钮,我该如何移除油门?

问候康泰

aws-lambda

12
推荐指数
1
解决办法
4143
查看次数

AWS Lambda:函数空闲

我正在研究我的项目的 Lambda,我看到其中一个是空闲的。在仪表板页面的顶部,我看到带有文本的块:

函数 __ 空闲。要重新激活您的功能,请选择“恢复”。

我对此有点困惑,因为此功能与其他未标记为空闲但也已几个月未启动的功能非常相似。由于我没有在 AWS 文档中找到答案,我很感激有人向我解释处于空闲状态和非空闲状态的函数之间有什么区别,以及函数如何/为什么变为空闲?

amazon-web-services aws-lambda

12
推荐指数
2
解决办法
1590
查看次数

您可以在哪里更改触发 AWS Lambda 函数的 SQS 队列的批处理大小?

我可以发誓,有一种简单的方法可以更改配置为 Lambda 触发器的 SQS 队列的批量大小,但截至 2020 年 7 月,我再也找不到发生这种情况的地方。这可能与目前在 AWS 顶部宣传的“新 SQS 控制台体验”有关。

我可以看到队列的当前批次大小(屏幕截图),但该数字不可编辑。我也没有在 SQS 界面中看到与批量大小相关的任何内容。我当前的 IAM 凭证可能无法更改批量大小,并且对我隐藏。有谁知道可以在哪里更改此值?

来自 AWS 的屏幕截图,显示当前批次大小的显示位置

amazon-sqs amazon-web-services aws-lambda

12
推荐指数
2
解决办法
3751
查看次数

在 AWS 上部署无服务器 Flask 应用程序时出错,没有名为“werkzeug._compat”的模块

我创建了一个简单的 Flask 应用程序并成功将其部署到 AWS Lambda。我正在遵循本教程的第一步。

运行Lambda时,日志中出现以下错误:

Unable to import module 'wsgi_handler': No module named 'werkzeug._compat'
Run Code Online (Sandbox Code Playgroud)

我已经安装了 serverless-python-requirements 和 serverless-wsgi。这些文件夹位于上传到 AWS 的 zip 文件夹中。

我在 serverless_wsgi.py 中找到了对 werkzeug._compat 的引用:

from werkzeug._compat import BytesIO, string_types, to_bytes, wsgi_encoding_dance
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法在可能找到此函数的 Werkzeug 文件夹中的任何位置找到“_compat”。我是否缺少包裹或其他东西?

这是我的 serverless.yml:

# serverless.yml

service: serverless-flask

plugins:
  - serverless-python-requirements
  - serverless-wsgi

custom:
  wsgi:
    app: app.app
    packRequirements: false
  pythonRequirements:
    dockerizePip: non-linux

provider:
  name: aws
  runtime: python3.6
  stage: dev
  region: us-east-1

functions:
  app:
    handler: wsgi_handler.handler
    events:
      - http: ANY /
      - http: …
Run Code Online (Sandbox Code Playgroud)

python werkzeug flask aws-lambda serverless-framework

12
推荐指数
1
解决办法
1539
查看次数