Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 AWS/LocalStack:如何验证/调试Lambda的执行(失败)?_Amazon S3_Aws Lambda_Aws Cli_Amazon Sns_Localstack - Fatal编程技术网

Amazon s3 AWS/LocalStack:如何验证/调试Lambda的执行(失败)?

Amazon s3 AWS/LocalStack:如何验证/调试Lambda的执行(失败)?,amazon-s3,aws-lambda,aws-cli,amazon-sns,localstack,Amazon S3,Aws Lambda,Aws Cli,Amazon Sns,Localstack,我正在学习AWS,这在我的元素(通常是嵌入式软件)之外。我将这个问题从软件工程中移植过来,在那里几天没有任何进展 问题/问题:在尝试设置S3存储桶时,文件添加会触发Lambda,如何调试或跟踪从文件添加到SNS通知再到Lambda执行的事件序列? 我正在尝试设置以下内容: 有人在S3桶中添加了一些东西 文件添加触发Lambda,该Lambda将文件添加到git repo (更具体地说:文件添加触发了一个关于Lambda订阅的主题的SNS通知——我觉得这比S3 bucket直接调用Lambda“更

我正在学习AWS,这在我的元素(通常是嵌入式软件)之外。我将这个问题从软件工程中移植过来,在那里几天没有任何进展

问题/问题:在尝试设置S3存储桶时,文件添加会触发Lambda,如何调试或跟踪从文件添加到SNS通知再到Lambda执行的事件序列?

我正在尝试设置以下内容:

  • 有人在S3桶中添加了一些东西
  • 文件添加触发Lambda,该Lambda将文件添加到git repo (更具体地说:文件添加触发了一个关于Lambda订阅的主题的SNS通知——我觉得这比S3 bucket直接调用Lambda“更好”,因为它是解耦的)
  • 我将使用
    AWS CLI
    来处理所有事情,并且在不久的将来,我仅限于使用
    LocalStack
    来替代“真正的”AWS。


    到目前为止我所做的工作(简化):

    • 已创建my bucket(
      aws s3 mb my bucket--端点url=http://localhost:4572
    • 创建了一个带有附加角色策略的“hello world”Lambda
      aws:policy/AWSLambdaFullAccess
    • 向Lambda添加权限(
      aws Lambda add permission--function name first_Lambda--action Lambda:invokeffunction--statement id sns invoke Lambda--principal sns.amazonaws.com--endpoint url=http://localhost:4574
    • 创建了SNS主题(
      aws SNS创建主题--命名我的主题--端点url=http://localhost:4575
    • 将我的Lambda订阅到主题(
      aws sns订阅--主题arn:aws:sns:us-east-1:000000000000:我的主题--协议Lambda--通知端点arn:aws:Lambda:us-east-1:000000000000000000:函数:first_Lambda--端点url=http://localhost:4575
    • 配置了put bucket通知配置(
      aws s3api put bucket通知配置--bucket my bucket--通知配置file://s3-ObjectCreated_notify.json --端点url=http://localhost:4572
    • 验证是否能够上传和下载到我的bucket
    • 已验证是否能够手动调用我的Lambda(
      aws Lambda invoke--function name first_Lambda outfile.txt--endpoint url=http://localhost:4574

    这是我的“hello world”Lambda函数,由和天真地拼凑而成:

    这是我的put bucket通知配置文件:

    {
        "TopicConfigurations": [
            {
                "TopicArn": "arn:aws:sns:us-east-1:000000000000:my-topic",
                "Events": [
                    "s3:ObjectCreated:*"
                ]
            }
        ]
    }
    

    我的问题是:我不确定如何测试我尝试构建的从S3 Bucket到Lambda调用的“管道”的成功或失败

    (请纠正误解:)如果我手动调用Lambda函数,“执行上下文”是我发出AWS CLI请求的shell。但是,当“执行上下文”是我从S3 Bucket到SNS通知构建到Lambda的“管道”时,我不知道Lambda的
    print
    语句或返回状态将指向哪里。也就是说,当我手动调用Lambda时,我的shell获得返回状态,
    print
    语句似乎指向我指定的输出文件;e、 g:

    $ aws lambda invoke --function-name first_lambda outfile.txt --endpoint-url=http://localhost:4574
    {
        "StatusCode": 200
    }
    

    …但我如何测试bucket对象创建到SNS通知到Lambda调用之间的端到端功能或失败,因为没有要指向的
    print
    s的输出文件,也没有要返回状态的“上下文”?

    您的print语句的输出将清楚地记录在AWS CloudWatch上,而且每个错误都会记录在那里

    因此,一定要访问cloudwatch并检查幕后发生的事情

    文件:

    $ aws lambda invoke --function-name first_lambda outfile.txt --endpoint-url=http://localhost:4574
    {
        "StatusCode": 200
    }