尝试将元数据添加到对象时,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 数据管道

如何将 AWS DynamoDB 表导出到 S3 存储桶?

将dynamoDB表复制到另一个没有S3的aws帐户

AWS Lambda 返回权限被拒绝尝试从 S3 存储桶获取对象

AWS Glue,加载到框架之前的数据过滤,命名 s3 对象