You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决CloudFormation向Python Lambda传递BucketName的代码换行问题

解决CloudFormation Lambda ZipFile中Ref传递导致的Python缩进问题

这个问题的根源在于你直接将Ref作为Fn::Join数组的独立元素,拼接时会自动在前后添加换行符,破坏了Python代码的连续行结构和缩进规则。下面是两种可行的解决方案:

方案1:使用Fn::Sub替代Fn::Join(推荐)

Fn::Sub支持在字符串模板中直接引用资源/参数的值,无需拆分代码行,能完美保持Python代码的缩进和格式。示例如下:

"ZipFile": {
  "Fn::Sub": [
    "import boto3\nimport json\ndef handler(event, context):\n    try:\n        s3BucketName=event['detail']['requestParameters']['bucketName']\n        if s3BucketName == '${BucketName}':\n            return {\n                'statusCode': 200,\n                'body': json.dumps('Matched target bucket!')\n            }\n    except Exception as e:\n        return {\n            'statusCode': 500,\n            'body': json.dumps(str(e))\n        }",
    {
      "BucketName": {"Ref": "BucketName"}
    }
  ]
}

说明:

  • 用${BucketName}在模板字符串中占位,CloudFormation会自动替换为Ref获取的存储桶名称
  • 用\n手动控制代码换行,缩进可以直接按照Python规范编写,完全不会被破坏
  • 整个Lambda代码是一个连续的字符串模板,避免了拼接拆分导致的格式问题

方案2:嵌套Fn::Join修复拼接格式

如果你坚持使用Fn::Join,可以通过嵌套Fn::Join将Ref值与前后字符串拼接成一个完整的代码行,避免插入额外换行:

"ZipFile": {
  "Fn::Join": [
    "\n",
    [
      "import boto3",
      "import json",
      "def handler(event, context):",
      "    try:",
      "        s3BucketName=event['detail']['requestParameters']['bucketName']",
      {
        "Fn::Join": [
          "",
          [
            "        if s3BucketName == '",
            {"Ref": "BucketName"},
            "':"
          ]
        ]
      },
      "            return {'statusCode': 200, 'body': json.dumps('Match found')}",
      "    except Exception as e:",
      "        return {'statusCode': 500, 'body': json.dumps(str(e))}"
    ]
  ]
}

说明:

  • 嵌套的Fn::Join用空字符串""作为分隔符,把"if s3BucketName == '"、Ref结果、"':"拼接成一个无换行的完整代码行
  • 这个完整行作为外层Fn::Join的一个元素,最终拼接后能保持正确的缩进和语法结构

内容的提问来源于stack exchange,提问作者user1056426

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:04:36