标签: aws-lambda

使用 AWS python lambda 读取表单数据

我想读取 http post 请求的“key”参数,但它不起作用。

def my_handler(event, context):
    print(event)
    print(event['body'])
    print("key: " + event['key'])

    key = event['query']['key']

    encoded_string = str(key).encode("utf-8")
    # Create the file named for example "42.json" containing the appropriate data
    s3_path =  str(key) + '.json'
    s3 = boto3.resource("s3")
    s3.Bucket(BUCKET_NAME).put_object(Key=s3_path, Body=encoded_string)

    message = {
       'message': 'Created {}!'.format(key)  
    }
    return {
        'statusCode': 200,
        'headers': {'Content-Type': 'application/json'},
        'body': json.dumps(message)
    }
Run Code Online (Sandbox Code Playgroud)

更新:如果我使用下面的代码,我可以在 http 帖子中读取 JSON 数据,但我仍然无法读取表单数据。

def my_handler(event, context):
    print(event)
    print(event['body'])
   # print("key: " + event['key'])
    print("key  " + json.loads(event['body'])["key"])

    key = json.loads(event['body'])["key"] …
Run Code Online (Sandbox Code Playgroud)

python-3.x aws-lambda

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

导入 Cognito 时遇到问题,“AmazonCognitoIdentity 未定义”

我是 Node JS 的初学者,并尝试在线学习示例并从 AWS 文档中学习得相当好。到目前为止,我只使用 AWS 提供的基于 Web 的 lambda 编辑器。以下代码给我带来了麻烦并指出,“errorMessage”:“AmazonCognitoIdentity 未定义”,

有人可以建议我如何仅使用网络编辑器成功开始使用 Cognito 吗?

var aws = require('aws-sdk');
var CognitoUserPool = AmazonCognitoIdentity.CognitoUserPool;



exports.handler = (event, context, callback) => {

  console.log("Do something here...");
}
Run Code Online (Sandbox Code Playgroud)

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

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

如何从 S3 读取 CSV 文件

我有以下代码:

package main

import (
    "encoding/csv"
    "fmt"
    "io/ioutil"
    "path"

    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
    "github.com/aws/aws-sdk-go/service/s3/s3iface"
)

var (
    // TOKEN = os.Getenv("TOKEN")
    svc s3iface.S3API
)

func main() {    
    // Panics if there is an error in creating session
    svc = s3iface.S3API(s3.New(session.Must(session.NewSession())))

    lambda.Start(Handler)
}

func Handler(evt events.S3Event) error {

    for _, rec := range evt.Records {

        key := rec.S3.Object.Key

        dir, file := path.Split(key)
        // Download the file from S3
        obj, err := svc.GetObject(&s3.GetObjectInput{
            Bucket: aws.String(rec.S3.Bucket.Name),
            Key:    aws.String(key),
        })
        if err != …
Run Code Online (Sandbox Code Playgroud)

csv amazon-s3 go aws-lambda

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

将文件从一个 AWS 账户中的 S3 存储桶复制到另一个 AWS 账户

另一个 AWS 账户拥有一个 S3 存储桶,其中包含一个文件列表。我需要将文件复制到我的 S3 存储桶。为了做到这一点,我想执行两件事:

  1. 在另一个账户中添加一个 S3 存储桶事件,这将触发 lambda 来复制我的 aws 账户中的文件。
  2. 我的 lambda 应该被提供权限(可能通过一个假定的角色)以复制文件。

为了实现 1 和 2,我必须执行哪些步骤?

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

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

承诺:然后在解决之前

我在 Node.js 中做过的第一件事,我正在编写一个 AWS Lambda 函数,我想在做任何其他事情之前检查用户的自定义属性是否有值。因为我被告知 Promises 是同步处理异步方法的方式,所以我写了这个函数:

var AWS = require('aws-sdk');
var s3 = new AWS.S3();
var cogId = new AWS.CognitoIdentityServiceProvider();

exports.handler = function (event, context) {

    if (event != null)
    {
        var identityId = context.identity.cognitoIdentityId;

        if (event.userId != null)
        {
            var userId = event.userId;
            PromiseConfirmIdNotSet(userId)
                .then(SetId(userId, identityId))
                .catch();
        }
    }

    context.done(null, 'Hello World');  // SUCCESS with message
};

function PromiseConfirmIdNotSet(userId)
{
    console.log('Entering function');
    return new Promise(function (resolve, reject) {
        console.log('Entering Promise');
        cogId.adminGetUser({
                UserPoolId: myUserPool,
                UserId: userId
            },
            function …
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise aws-lambda

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

DynamoDB batchwriteItem 不将数据放入 Lambda 函数中的动态 TableName

我正在尝试将数据写入不同的表,表名是通过 get 请求传递的。

var tableName = event.tableName.toString();
Run Code Online (Sandbox Code Playgroud)

当我编写硬编码的 tableName 时它工作正常,但是当我编写变量 Name 时它会引发错误。

2018-11-20T21:09:31.532Z 928e237c-ed08-11e8-a312-539d290e67fc {"errorMessage":"请求的资源未找到","errorType":"ResourceNotFoundException","stackTracextract":["Request. var/runtime/node_modules/aws-sdk/lib/protocol/json.js:48:27)","Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20) ","Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)","Request.emit (/var/runtime/node_modules/aws-sdk/lib/request. js:683:14)","Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)","AcceptorStateMachine.runTo (/var/runtime/node_modules/aws- sdk/lib/state_machine.js:14:12)","/var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10","请求。(/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)","请求。(/var/runtime/node_modules/aws-sdk/lib/request.js:685: 12)","Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)"]} END RequestId: 928e237c-ed08-11e8-a312-539d290e67fc73c28RequestId ed08-11e8-a312-539d290e67fc 持续时间:124.41 ms 计费持续时间:200 ms 内存大小:1024 MB 已用最大内存:33 MB41 ms 计费持续时间:200 ms 内存大小:1024 MB 已用最大内存:33 MB41 ms 计费持续时间:200 ms 内存大小:1024 MB 已用最大内存:33 MB

这是代码:

var params = {
RequestItems: {
    tableName :  [
   {
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": r1index
        },
         "DateandTime" :{
          "S": DnT1  
        } ,
        "roadId" :{ …
Run Code Online (Sandbox Code Playgroud)

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

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

如何从 CompletableFuture 创建 Mono

我试图包装CompletableFuture在 ReactorMono类型中以简化我的转换操作。Project Reactor 总体来说更方便!我在 AWS Lambda 函数中工作,我正在使用新的 AWS Java SDK 2.x 版本调用 AWS 服务,例如 S3、SQS 等。这个新的开发工具包允许对 AWS 服务进行异步调用并返回 CompleteableFuture 对象。

例如:

S3AsyncClient s3AsyncClient = S3AsyncClient.builder().build();    
Mono.fromFuture(s3AsyncClient.getObject(b -> 
b.bucket(bucketId).key(objectKey), AsyncResponseTransformer.toBytes()).subscribe()
System.out.println("stuff");
Run Code Online (Sandbox Code Playgroud)

问题是,当我的主代码调用 时CompletableFuture (s3AsyncClient.getObject),执行线程突然切换到 CompleteableFuture 线程并且我调用 Mono 的主方法在 CompletableFuture 完成之前返回。

基本上,从上面的例子来看,"stuff"字符串在s3AsyncClient.getObject完成之前被打印出来。

如何确保 Mono 和CompletableFuture在同一线程中执行,或者如何确保我的 lambda 在CompletableFuture完成之前不会终止?

对于那些想知道的人,只有在我将代码远程部署到 AWS Lambda 时才会出现这种行为。我在本地没有遇到这种行为......

project-reactor aws-sdk aws-lambda completable-future

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

捕获从 NodeJS Lambda 生成的进程的输出

我正在尝试捕获从用 NodeJS 编写的 AWS Lambda 启动的外部程序的输出。下面的完整示例代码。任何测试事件都可以,因为它并没有真正使用。

exports.handler = async (event) => {
    console.log ("Entering lambda" + JSON.stringify(event))

    var spawn = require('child_process').spawnSync;

    child_process = spawn ('aws', [' --version'], {
        stdio: 'inherit',
        stderr: 'inherit',
        shell: true
    })

    console.log ("done");
    const response = {
        statusCode: 200,
        body: JSON.stringify('done'),
    };
    return response;
};
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到以下输出(为了简洁起见,我删除了测试事件详细信息,因为它无关紧要)。

我没有看到aws --version我预期的命令的结果(我使用它来测试 AWS CLI 的正确调用,但任何 Linux 命令都可以)。代码确实是同步执行的,因为如果我用 替换调用child_process = spawn ('sleep', ['1'], {,lambda 的执行时间会增长到 1117.85 毫秒,所以会发生一秒钟的睡眠。但是执行日志中没有捕获任何内容。

START RequestId: 0c1287e2-d2ee-4436-a577-bc8ec3608120 Version: $LATEST
2019-01-16T19:12:45.130Z …
Run Code Online (Sandbox Code Playgroud)

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

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

从字符串中删除货币符号并在 Javascript 中使用单行转换为数字

我下面有一个字符串,它是一个以英镑为单位的价格,我想删除货币符号,然后将其转换为一个数字/价格,我可以用来与另一个值进行比较(例如 X >= Y ...)

£14.50

我之前已将字符串转换为用于货币的数字

var priceNum = parseFloat(price);

理想的结果

14.50作为数值。这可以在一行中完成吗?

javascript regex node.js aws-lambda

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

“无法在 lambda 中连接到 MySQL 服务器

import pymysql
from botocore.vendored import requests
def lambda_handler(event,context):
      conn=pymysql.connect (host ="rootrestdatabase.cd6kbmibgfod.ap-south-1.rds.amazonaws.com", user="****" , passwd="*****",db="restawsdatabase")
Run Code Online (Sandbox Code Playgroud)

我想在 lambda 中连接 rds。但我犯了错误

"errorMessage": "(2003, \"Can't connect to MySQL server on 'rootrestdatabase.cd6kbmibgfod.ap-south-1.rds.amazonaws.com' (timed out)\")",
  "errorType": "OperationalError",
  "stackTrace": [
    [
Run Code Online (Sandbox Code Playgroud)

我已经在本地机器上尝试过它工作正常但是当我在lamba中部署代码时它没有工作。lambda 函数和 rds 也都在同一区域。我该怎么办?

python amazon-s3 aws-lambda

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