Подтвердить что ты не робот

Как изменить тип содержимого объекта с помощью aws cli?

У меня есть несколько объектов, хранящихся в Amazon S3, содержимое содержимого которых мне нужно изменить от text/html до application/rss+xml. Я понимаю, что это можно сделать с помощью команды копирования, указав тот же путь для источника и назначения. Я пытаюсь сделать это, используя инструменты AWI cli, но я получаю эту ошибку:

$ aws s3 cp s3://mybucket/feed/ogg/index.html \
            s3://mybucket/feed/ogg/index.html \
            --content-type 'application/rss+xml'
copy failed: s3://mybucket/feed/ogg/index.html
to s3://mybucket/feed/ogg/index.html
A client error (InvalidRequest) occurred when calling the
CopyObject operation: This copy request is illegal because it is
trying to copy an object to itself without changing the object's
metadata, storage class, website redirect location or encryption
attributes.

Если я укажу другой путь для источника и адресата, я не получу ошибку:

$ aws s3 cp s3://mybucket/feed/ogg/index.html \
            s3://mybucket/feed/ogg/index2.html \
            --content-type 'application/rss+xml'
copy: s3://mybucket/feed/ogg/index.html
to s3://mybucket/feed/ogg/index2.html

Несмотря на то, что команда успешно завершена, объект index2.html создается с типом содержимого text/html, а не с типом application/rss+xml, который я указал.

Как я могу изменить эту командную строку, чтобы заставить ее работать?

4b9b3361

Ответ 1

Для этого можно использовать низкий уровень s3api:

$ aws s3api copy-object --bucket archive --content-type "application/rss+xml" \
    --copy-source archive/test/test.html --key test/test.html \
    --metadata-directive "REPLACE"

http://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html

Проблема заключалась не в том, чтобы указать --metadata-directive. Спасибо, что указали открытый вопрос/запрос функции, nelstrom!