标签: aws-lambda

Amazon Lambda 到 SNS 通知不起作用

我有一个从 Amazon lambda 推送 SNS 通知的用例。我编写了以下代码,其中 IAM 角色具有调用 SNS 的权限。即使使用 Kenesis 触发器,此 Lambda 函数也无法向 SNS 发送任何通知。我通过在 SNS 上订阅我的电子邮件 ID 来确认这一点。

[编辑]:只是一个后续问题。我现在需要查询 DynamoDB 并根据输出,需要调用 SNS 的不同端点。现在,当我查询 DynamoDB 时,执行会在 DynamoDB 查询后停止,甚至无法进行 SNS 检查。

以下是我的 lambda 函数代码。

console.log('Loading function');
var AWS = require('aws-sdk');
exports.handler = function(event, context) {
event.Records.forEach(function(record) {
    //var payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
    var payload = record.kinesis.data;
    console.log('Decoded payload:', payload);

    var dynamodb = new AWS.DynamoDB();
    var dynamodb_params = {
        Key: {
            dataSource: { 
                S: payload
            }
        },
        TableName: 'TableName',
        AttributesToGet: …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-sns aws-lambda

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

在python AWS lambda函数中访问来自python的json请求

我在 AWS API 网关中有一个 API,使用 lambda 代理集成连接到 python 中的 AWS Lambda 函数。在我的本地计算机上,我正在用 python 测试这个 API。我想向 api 发送字典,并让 api 返回字典中元素的函数。

我用来测试的python代码是:

import requests
import json

url = "https://p68yzl6gu6.execute-api.us-west-1.amazonaws.com/test/helloworld"

headers = {'data': [0,1]}

response = requests.post(url, json=headers)

print(response.text)
Run Code Online (Sandbox Code Playgroud)

由于我无法通过 requests.post 的标头参数发送列表,所以我想我会使用 json。当我尝试这个时,我收到一条 {"message": "Internal server error"}。这是我的 AWS lambda 函数(python):

import json

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': event['data']
    }
Run Code Online (Sandbox Code Playgroud)

查看日志,“数据”不是事件的关键。如何访问 AWS Lambda 函数中的列表?当我测试这个时,如何找出事件字典的样子?展望未来,我想发送一个包含字典和列表的大字典。这是正确的方法吗?

python json python-requests aws-lambda aws-api-gateway

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

AWS API-Gateway 缓存设置在控制台中不可见

按照 AWS 文档Caching在 API-Gateway 中启用API -我在那里找不到任何缓存设置。

似乎我有一个旧版本的控制台,也许吧?

这是我看到的: 在此处输入图片说明

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

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

如何将 API Gateway 指向 CDK 中的 lambda 别名?

使用 CDK 将 ApiGateway 连接到 lambda,我们首先创建一个 RestApi(),然后创建一个 LambdaIntegration 将 Apigateway 连接到 lambda。使用 lambda 别名时如何执行此操作?

如何将 ApiGateway 指向特定的 Lambda 别名解释了如何在没有 CDK 的情况下将 ApiG 连接到 Lambda 别名。如何将其转换为 CDK?

我们的目标是为与 API Gateway 一起使用的 lambda 添加预配置并发和自动缩放。

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

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

AWS lambda python 多文件应用程序无法从另一个文件导入

我的 AWS lambda 项目具有以下结构:

module
  app.py
  b.py
Run Code Online (Sandbox Code Playgroud)

app.py是我的默认 aws lambda 函数lambda_handler,它工作正常。我决定将所有繁重的计算从它中提取出来以calc实现b.py.

然后,我将它导入到app.py:

from module.b import calc
Run Code Online (Sandbox Code Playgroud)

现在,当我在本地运行它时sam local invoke Function --event events/event.json,它会引发一个错误:

{"errorType":"Runtime.ImportModuleError","errorMessage":"无法导入模块'app':没有名为'module'的模块"}

在我看来,当它准备运行代码时,它将文件移动到其他目录,因此导入中断。为了解决这个问题,我尝试使用相对导入:

from .b import calc
Run Code Online (Sandbox Code Playgroud)

但它也引发了一个错误:

{"errorType":"Runtime.ImportModuleError","errorMessage":"无法导入模块'app':尝试相对导入,没有已知的父包"}

如何在 aws lambda 上设置多文件 python 应用程序?

python amazon-web-services aws-lambda serverless

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

Lambda 是否有必要在处理后从 SQS 队列中删除消息?

我在这里查看 AWS SQS 文档:https : //docs.aws.amazon.com/sdk-for-net/v3/developer-guide/ReceiveMessage.html#receive-sqs-message

我的理解是,我们需要AmazonSQSClient.DeleteMessage()在完成处理后删除消息,但是当我们使用 SQS 触发的 Lambda 时,这是否必要?

我正在使用由 触发的 Lambda 函数进行测试SQSEvent,除非我弄错了,否则看起来如果 Lambda 函数运行完成而没有抛出任何错误,则消息不会返回到 SQS 队列。如果这是真的,我宁愿避免对AmazonSQSClient.DeleteMessage().

这是 2019 年的一个类似问题,最佳答案是 SDK 不会自动删除消息,需要在代码中明确删除它们。我想知道从那以后是否有什么变化。

想法?

amazon-sqs amazon-web-services aws-sdk aws-lambda

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

来自执行环境的 AWS Lambda 凭证没有执行角色的权限

我正在部署一个 AWS lambda 函数(使用 nodejs 12.x),该函数在调用时执行 AWS 命令​​(“iot:attachPrincipalPolicy”)。我正在使用凭据从 lambda 执行环境变量运行此命令。

  const AWS = require('aws-sdk/global');

  const region = process.env['AWS_REGION'];
  const accessKeyId = process.env['AWS_ACCESS_KEY_ID'];
  const secretAccessKey = process.env['AWS_SECRET_ACCESS_KEY'];

  AWS.config.region = region;
  AWS.config.credentials = new AWS.Credentials(accessKeyId, secretAccessKey);

  // attachPrincipalPolicy command from the AWS SDK here
Run Code Online (Sandbox Code Playgroud)

当我在本地(使用sam local start-api)测试该函数时,它会成功运行,因为在我的 AWS CLI 中,我已经设置了ACCESS_KEY_ID管理员帐户的和 密码。

但是,当我部署该函数并调用它时,即使我对 lambda 的执行角色授予完全管理员访问权限,该命令也会导致 lambda 失败并出现客户端错误(凭据无效)。

在此处输入图片说明

在这里,我在内联策略中授予了完全权限,并且还明确添加了预定义的管理员访问策略。

我希望您从环境变量中获得的 AWS_ACCESS_KEY_ID 授予我我在 lambda 函数的执行角色中设置的所有权限,但看起来我授予执行角色的特权并未反映在这些凭证中。

我的假设错了吗?这些凭据来自哪里,我如何才能知道它们允许我做什么?

amazon-web-services node.js amazon-iam aws-lambda aws-sam

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

扫描 AWS DynamoDB 的替代方法?

我知道不推荐扫描 DynamoDB,这是不好的做法。

假设我有一个食品订购网站,我想对所有用户进行每日扫描,以找出上周谁没有订购食品,以便我可以向他们发送电子邮件(仅举个例子)。

这将对数据库提出一些非常高的需求,尤其是对于庞大的用户群。

是否有我缺少的这些计划扫描的替代方法?或者在这种情况下扫描是工作的最佳工具?

database amazon-web-services amazon-dynamodb aws-lambda

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

如果存在则增加该值,否则在 DynamoDB 中添加一个新条目

我有一个 DynamoDB 表,其列和主键为ipAddress:

  • IP地址
  • 访问

我正在从我的 React 网站获取用户的 IP 地址,并通过 Lambda 函数和 API Gateway POST 请求将其插入到 DynamoDB。

如果来自 React 网站的 IP 地址已经存在于 DynamoDB 中,则增加visits列中的值。如果没有,则使用新的 IP 地址和visits = 1. 我尝试使用ConditionExpression但无济于事。

到目前为止,我只使用 Lambda 插入 ipAddress。下面是我在 NodeJS 中的 Lambda 函数:

const AWS = require("aws-sdk");
const documentClient = new AWS.DynamoDB.DocumentClient();

exports.handler = async event => {
  const { ipAddress} = JSON.parse(event.body);
  const params = {
    TableName: "ipAddress",
    Item: {
      ipAddress: ipAddress,
    }
  };

  try {
    const …
Run Code Online (Sandbox Code Playgroud)

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

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

似乎没有配置 AWS 配置文件!无服务器框架错误?

背景:-我有一个网关帐户(没有权限),其中创建了用户,为了访问 aws 资源,我们使用具有管理员访问权限的角色。

配置文件

[profile gateway]
region = ap-southeast-1
output = json

[profile DA]

region = ap-south-1
output = json
role_arn = arn:aws:iam::xxxxxxxxxxxxx:role/jatin
mfa_serial = arn:aws:iam::xxxxxxxxxx:mfa/atin
source_profile = gateway
Run Code Online (Sandbox Code Playgroud)

凭证文件

[gateway]
aws_access_key_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
aws_secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试使用无服务器部署 --aws-profile "DA" 来部署我的 lambda,它说 AWS profile "DA" doesn't seem to be configured

但是,如果我aws s3 ls --profile "DA"完美地运行它的作品,那么我想配置文件和凭据的配置没有问题

amazon-web-services aws-lambda serverless-framework

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