标签: aws-lambda

AWS Lambda 未读取环境变量

我正在编写一个 python 脚本来查询 Qualys API 以获取漏洞元数据。我在 AWS 中将它作为 lambda 函数执行。我已经在控制台中设置了环境变量,但是当我执行我的函数时,出现以下错误:

module initialization error: name 'QUALYS_USERNAME' is not defined
Run Code Online (Sandbox Code Playgroud)

我正在使用这个 os 模块在我的处理程序函数的代码中调用它们:

import os
import requests
import time
import lxml
import tinys3
from lxml import etree

def lambda_handler(event, context):
    QUALYS_USERNAME = os.environ('QUALYS_USERNAME')
    QUALYS_PASSWORD = os.environ('QUALYS_PASSWORD')
    ACCESS_KEY = os.environ('ACCESS_KEY')
    SECRET_KEY = os.environ('SECRET_KEY')

s = requests.Session()
s.headers.update({'X-Requested-With':QUALYS_USERNAME})

def login(s):
    payload = {'action':'login', 'username':QUALYS_USERNAME, 
    'password':QUALYS_PASSWORD}

    r = s.post('https://qualysapi.qualys.com/api/2.0/fo/session/', 
    data=payload)

def launchReport(s, polling_delay=120):
    payload = {'action':'launch', 'template_id':'X', 
    'output_format':'xml', 'report_title':'X'}

    r = s.post('https://qualysapi.qualys.com/api/2.0/fo/report/', data=payload)
    global extract_id …
Run Code Online (Sandbox Code Playgroud)

python environment-variables amazon-web-services aws-lambda

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

执行 Lambda python 函数时模块导入错误

我正在尝试在 AWS Lambda 上执行一个 python 函数。在我的函数中,我试图导入 mysql.connector 模块。但是出现了一个错误:

errorMessage": "没有名为 'mysql.connector' 的模块"

我最初在我的 EC2 实例中编写了我的 python 代码。我使用 pip 在我的 python 文件目录中安装了 mysql-connector。

pip install mysql-connector -t /path/to/file/dir
Run Code Online (Sandbox Code Playgroud)

我上传了唯一文件的 zip 文件,而不是任何包含该文件的文件夹。

python python-2.7 aws-lambda

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

由于 Lambda 代理响应格式错误,通过 API 网关的 Lambda 函数失败

出于某种原因,无论我如何更改响应,我的 AWS lambda 都会返回 502 错误。

Sun Mar 25 03:39:12 UTC 2018:转换前的端点响应正文:{"status":200,"body":"{\"Items\":[],\"Count\":0,\"ScannedCount \":1}","isBase64Encoded":false,"headers":{"content-type":"application/json"}}

我确保对我的正文进行字符串化并添加状态、标题和 isBase64Encoded 属性。我尝试改变标题并使它们也为空。

为什么我会收到这个错误?

这是 lambda 代码:

    var response = {
        status : 200,
        body : JSON.stringify(data),
        isBase64Encoded : false,
        headers : {"content-type" : "application/json"}
    }

    console.log(response)

    callback(null, response);
Run Code Online (Sandbox Code Playgroud)

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

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

如何使用 TeamCity 发布 .Net Core lambda 函数

我正在研究一个 .Net Core 解决方案,其中我们刚刚添加了 .Net Core lambdas。新创建的 lambda 都已设置,包括 aws-lambda-tools.json。

我剩下要做的就是使用 TeamCity 自动发布这些 lambda。(解决方案的其余部分已经在 TC 上设置了持续部署)
此外,我不想每次添加新的 Lambda 时都更新 TC 构建步骤。

如何设置 TC 以自动发布所有 lambda?
我应该使用 .Net CLI 还是有任何插件可以帮助我配置这一步?

teamcity .net-core aws-lambda

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

Lambda 函数中的 DynamoDB BatchGetItem 动态 TableName

我正在使用 dynamoDb 作为我的数据库为我当前的应用程序构建一个无服务器后端。我使用 aws sam 将我的 lambda 函数上传到 aws。此外,我将所有表名作为全局变量传递给 lambda(nodejs8.10 运行时),以便process.env在我的 lambda 函数内的对象上访问它们。我面临的问题如下:每当我batchGetItem在 dynamoDB 上运行该方法时,我必须传递一个字符串作为我的表名,我无法根据全局变量动态更改表名:

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({region: 'ap-south-1'}, {apiVersion:'2012-08-10'});

const params = {
    RequestItems: {
        //needs to be a string, cannot be a variable containing a string
        'tableName': {
            Keys: [] //array of keys
         }
    }
}
dynamodb.batchGetItem(params, (err, result) => {
// some logic
})
Run Code Online (Sandbox Code Playgroud)

我需要将表名作为字符串传递,本质上是将表名硬编码到我的函数中。其他 DynamoDB 操作(例如getItem方法)接受参数对象中表名的键值对:

const tableName = process.env.TableName;
const getItemParams = { …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb aws-lambda serverless

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

使用 lambda 函数添​​加 s3 对象标签?

该文档描述了如何通过控制台标记 s3 对象。我们如何使用 lambda 函数以编程方式执行此操作?

amazon-s3 amazon-web-services aws-sdk aws-lambda

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

如何在 Kotlin 上创建 AWS Lambda 函数?

AWS Lambda 函数是否提供对 Kotlin 语言的支持?目前 Lambda 函数创建向导在运行时下拉列表中不包含 Kotlin 选项:

在此处输入图片说明

但是有 Java 8 和不同的 Node.js 版本。哪个平台更适合在 AWS Lambda 上下文中使用 Kotlin 编写的函数 - JVM 或 Node.js?我可以使用哪些 Kotlin 框架来编写 Lambda 函数?

java amazon-web-services node.js kotlin aws-lambda

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

如何使用 Boto3 Python 更新 IAM 策略

我有一个 S3 存储桶读取策略:

   {
      "Version":"2012-10-17",
      "Statement":[
        {
          "Effect":"Allow",
          "Action":["s3:GetObject"],
          "Resource":["arn:aws:s3:::examplebucket/*"]
        }
      ]
    }
Run Code Online (Sandbox Code Playgroud)

基于创建新存储桶时的云跟踪日志,我正在创建一个将调用 Lambda 函数的事件。

能够读取策略的 json 并将新资源(存储桶)添加到同一策略。是否有要调用的直接 python API 将使用新资源更新现有 IAM 策略?

amazon-s3 amazon-web-services amazon-iam aws-lambda

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

如何将 Google API 的 AWS Lambda 函数列入白名单

我正在构建一个 AWS Lambda 函数,该函数使用 Node.js 从 Google Calendar API 中提取信息。然后 Node 应用程序向第三方应用程序发送一个 html 响应。我基本上遵循google 的本指南,除了我将 html 发送到其他地方进行渲染。我一直遇到一个错误,Google 告诉我我没有将来自 Lambda 的 javascript 来源列入白名单。这是错误文本:

{error: "idpiframe_initialization_failed", details: ""Not a valid origin for the client: https://<Lambda URL>.execute-api.us-west-2.amazonaws.com has not been whitelisted for client ID <My_Google_API_Client_Id>.apps.googleusercontent.com. Please go to https://console.developers.google.com/ and whitelist this origin for your project's client ID."}

我已经进入 Google API 开发人员控制台并将该 URL 列入白名单,但我仍然收到该错误。这是一个屏幕截图。

我也试过将“us-west-2.amazonaws.com”列入白名单,但没有成功。谢谢!!

google-calendar-api google-api amazon-web-services node.js aws-lambda

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

我在使用节点 js 对 dynamoDB 中的表执行更新操作时遇到 ConditionalCheckFailedException

我正在尝试使用 Coveritlive 聊天系统创建假受众应用程序。为此,我创建了不同的 lambda 函数,一个用于发布评论,一个用于获取项目 ID,另一个用于添加对评论的回复。但是为了实现回复服务,我需要通过调用coveritlive.com的事件/数据API来获取评论的item_id。但是在 Amazon DynamoDB 中执行更新操作时出现以下异常。我不知道为什么会显示此异常。另外我想知道是否有任何可用的批量更新功能。请帮我解决这个问题。

ConditionalCheckFailedException: The conditional request failed at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:48:27) at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20) at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:
06179d64-8906-11e8-bc53-f1cb2c5efa4e    { ConditionalCheckFailedException: The conditional request failed
at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:48:27)
at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)
at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
message: 'The conditional request failed',
code: 'ConditionalCheckFailedException',
requestId: 'JVQV9VI69F3T2UDG6388RLDPFBVV4KQNSO5AEMVJF66Q9ASUAAJG',
statusCode: 400,
retryable: false,
retryDelay: 4.294909454040329
Run Code Online (Sandbox Code Playgroud)

这是我用于更新的代码:

function updateItemId(id,itemId,docClient) {
    var updateParams …
Run Code Online (Sandbox Code Playgroud)

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

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