【问题标题】:AWS lambda not running the code when invokedAWS lambda 调用时不运行代码
【发布时间】:2020-04-19 04:47:48
【问题描述】:

我使用 python boto3 lambda 调用函数调用了一个 lambda 来停止一些实例。我正在使用一些有效负载调用该函数。调用成功,但我在 cloud watch 中看不到任何执行日志。基本上似乎代码执行没有开始。

代码:

def stop_start_server():
    #sessions
    ec2c = boto3.client('lambda', region)
    instance_ids = {'Start_Stop': 'start', 'Instance_list': ['i-07fc5b6xxxx1584d', 'i-0da375xxxxxc2018b']}
    load = {"Start_Stop": "stop","Instance_list": instance_ids}
    print load
    #payload = json.loads(load)
    payload= bytes(json.dumps(load))
    #payload = str(load)
    print payload
    response = ec2c.invoke(FunctionName = lambdafunction , InvocationType = 'RequestRe
    print response
    payload = json.loads(response['Payload'].read())
    print payload

输出:

{
    u 'Payload': < botocore.response.StreamingBody object at 0x7fd8f9c31350 > , u 'ExecutedVersion': '$LATEST', 'ResponseMetadata': {
        'RetryAttempts': 0,
        'HTTPStatusCode': 200,
        'RequestId': 'efcaf7f4-5847-487f-921a-3e87657a7450',
        'HTTPHeaders': {
            'x-amzn-requestid': 'efcaf7f4-5847-487f-921a-3e87657a7450',
            'content-length': '2',
            'x-amz-executed-version': '$LATEST',
            'x-amzn-trace-id': 'root=1-5e9a06f7-3c4b263c83bb7989df2b596e;sampled=0',
            'x-amzn-remapped-content-length': '0',
            'connection': 'keep-alive',
            'date': 'Fri, 17 Apr 2020 19:43:55 GMT',
            'content-type': 'application/json'
        }
    }, u 'StatusCode': 200
}

我从云表中看到的:

似乎函数被触发,但代码执行没有发生。可以帮助我解决我想念的东西

【问题讨论】:

  • 嗨,这很有趣......嗯,我想知道日志库是否会帮助docs.aws.amazon.com/lambda/latest/dg/…
  • 你能展示你的 lambda 处理程序吗? stop_start_server 函数似乎不是您的处理程序。
  • 要使 Lambda 函数能够将信息发送到 Amazon CloudWatch Logs,应为与该函数关联的 IAM 角色指定 AWSLambdaBasicExecutionRole 策略。此策略包括写入 CloudWatch Logs 的权限。见:AWS Lambda Execution Role - AWS Lambda
  • @Marcin 我给出的代码正在我的本地执行,函数 stop_start_server 依次调用 AWS 中的 lambda 函数。
  • @JohnRotenstein lambda 角色拥有 AWS 云监视权限。否则我们将无法从 cloudwatch 中看到触发日志。

标签: python amazon-web-services aws-lambda boto3


【解决方案1】:

lambda 的默认超时为 3 秒。鉴于您在 CloudWatch 中看到的 REPORT 行,我敢打赌您会遇到这个问题。达到超时时,lambda 执行将立即停止,因此您不会在日志中看到任何内容,除了 REPORT 行。

您可以在管理控制台中为您的函数更改超时值。

现在这解释了为什么您在日志中看不到任何内容,但您仍需要调查为什么会发生此超时。很可能存在某种网络超时,由网络配置问题或权限问题引起。您的问题中没有足够的详细信息来帮助解决此问题,但如果它是网络,也许您需要将您的 lambda 与您的 VPC 相关联。

【讨论】:

  • 您好 Jules, 创建函数时,lambda 超时设置为 200 秒。没有权限问题,如果是权限问题,我应该在触发该功能时至少获得日志或一些警告。我不确定网络的事情,我会更多地关注那个前景。
  • 感谢您关注此问题。问题是因为我给我的代码一个错误的变量。我修复了我的代码,它现在可以工作了。
猜你喜欢
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
  • 2019-01-21
  • 1970-01-01
  • 2019-01-28
  • 2016-12-31
相关资源
最近更新 更多