我有一个简单的Lambda函数,它接受存储桶名称作为参数,并在执行该函数时显示存储桶的名称

import boto3

def lambda_handler(event, context):
    s3 = boto3.resource('s3')
    
    bucket_name = event['bucket_key']
    return bucket_name

如果我传递此事件JSON并执行它

{
  "bucket_key": "my_bucket"
}

我会得到my_bucket作为响应,它运行成功.

现在,我想要做的是将该函数添加到其中一个阶段中,作为我的管线的一个操作(调用Lambda),如下所示

enter image description here

然而,当我运行管道时,该函数将进入循环,如果我查看Cloudwatch,我会看到以下错误消息

[ERROR] KeyError: 'bucket_key'
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 6, in lambda_handler
    bucket_name = event['bucket_key']

在调用Lambda时,是否需要在代码行中作为用户参数传递特定的格式?我不明白我传递的是完全相同的JSON事件,但它只在lambda控制台中起作用

推荐答案

代码缺少格式化收到的事件的逻辑

import boto3
import json

pipeline = boto3.client('codepipeline')
s3 = boto3.resource('s3')

def lambda_handler(event, context):
    print(event) # to see what the event sent by the codepipeline
    user_parameters = event.get('CodePipeline.job', {}).get('data', {}).get('actionConfiguration', {}).get('configuration', {}).get('UserParameters', {})
    json_object = json.loads(user_parameters)
    print(json_object) # to see what response looks like after being formatted
    bucket_name = json_object.get('bucket_key',{}) # getting the bucket name
    index = 'index.html'

# Do some logic 
    try:
        s3.Object(bucket_name, index).load() # check if bucket and object in it exist
        print(f"{bucket_name} bucket and {index} exist")
    except:
        print(f"{bucket_name} bucket or {index} does not exist!")

    response = pipeline.put_job_success_result(
        jobId=event['CodePipeline.job']['id'] # needed for whenever codepipeline is invoking lambda
    ) 
    return response

不要忘记将PUT JOB Success添加到lambda角色

Json相关问答推荐

Elasticsearch Go客户端错误:无效的SON格式:在中间件中索引文档时出错

Azure Data Factory JSON输出格式问题

如何在改装Android中将ResponseBody转换为JSONObject

在Zig中解析JSON失败

如何用JQ打印JSON文件的路径和键值

使用 JSON 和相对日期设置日历视图中 SharePoint 列表项的背景 colored颜色 格式

使用 jq 从字符串列表开始创建对象

在 NX 工作区中跨多个应用共享 ngx-translate 翻译文件

jq - 仅在键值对存在的地方打印值

如何使用 Google 表格应用程序脚本将 JSON 中的多个字段提取到 Google 表格中

如何将 XML 转换为 PsCustomObject 以允许最终导出为 JSON?

如何在 onClick 事件处理程序中识别在同一 map 上绘制的多个多边形中的哪个(使用 react-leaflet)被单击?

使用 jq 同时迭代数组

序列化为json时如何忽略空列表?

错误字符串的长度超过了maxJsonLength属性设置的值

如何使用 gson 将数据保存在 json 文件中?

如何通过 NSJSONSerialization 在 JSON 中包含空值?

使用 GSON 解析嵌套的 JSON 数据

Json.NET 是否缓存类型的序列化信息?

如何使用 Gson 解码具有未知字段的 JSON?