尝试将元数据添加到对象时,AWS S3 管道中的“无效 JSON”
Posted
技术标签:
【中文标题】尝试将元数据添加到对象时,AWS S3 管道中的“无效 JSON”【英文标题】:"Invalid JSON" in AWS S3 pipeline when trying to add metadata to object 【发布时间】:2022-01-13 11:10:27 【问题描述】:我正在使用 bitbucket 的管道将文件上传到 AWS S3。我的 bitbucket-pipelines.yml 主要遵循示例here。但是,我还使用EXTRA_ARGS
参数来指定几个进一步的选项(主要不包括在内),我决定还在那里添加--metadata
,如下所示:
EXTRA_ARGS: "--size-only --exclude=README.md --metadata \"testMeta\": \"testData\""
...这按预期工作,上传的文件添加了自定义元数据。但是如果我做这样的事情......:
EXTRA_ARGS: "--size-only --exclude=README.md --metadata \"testMeta\": \"$BITBUCKET_COMMIT\""
即使用Bitbucket的default variables之一,我的管道输出如下:
INFO: Starting deployment to S3...
aws s3 sync /opt/atlassian/pipelines/agent/build/public s3://[my-s3-name]/ --acl=public-read --size-only --exclude=README.md --metadata "testMeta": "8cd36431ef08d5be22f28b2cfc63d0179db3618d"
Error parsing parameter '--metadata': Invalid JSON: No JSON object could be decoded
JSON received: "testMeta":
✖ Deployment failed.
因此,即使该变量被替换为实际提交 ID(如上面代码的第二行末尾所示),无论出于何种原因,它似乎都不会被识别为有效的 JSON。知道我做错了什么吗?
【问题讨论】:
【参考方案1】:如果问题与 JSON 有关,您可以尝试 aws sync --metadata Shorthand Syntax:
EXTRA_ARGS: "--size-only --exclude=README.md --metadata testMeta=$BITBUCKET_COMMIT"
这行得通吗?
或者试试:
EXTRA_ARGS: "--size-only --exclude=README.md --metadata '\"testMeta\": \"$BITBUCKET_COMMIT\"'"
注意元数据参数周围的额外'
(通过Google "aws sync metadata" > AWS S3 CLI CP file and add metadata)。
【讨论】:
速记语法确实有效!非常感谢!以上是关于尝试将元数据添加到对象时,AWS S3 管道中的“无效 JSON”的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel 5.0 存储门面将元数据、标头(Expires、CacheControl)添加到上传到 Amazon S3 的文件中
使用 boto 为 RedShiftCopyActivity 创建 AWS 数据管道