Я изо всех сил пытаюсь получить файлы из моей корзины S3 в свой экземпляр EC2, используя формирование облака. У меня есть следующие файлы:
"files" : {
"/var/www/text.txt": {
"source": "https://s3.amazonaws.com/bucket/test.txt",
"mode": "000644",
"owner" : "root",
"group" : "root"
},
"/var/temp/http.conf": {
"source" : "https://s3.amazonaws.com/bucket/httpd.conf",
"mode": "000644",
"owner" : "root",
"group" : "root"
},
"/var/temp/mime-types.conf": {
"source" : "https://s3.amazonaws.com/bucket/mime-types.conf",
"mode": "000644",
"owner" : "root",
"group" : "root"
}
}
Где test.txt - это файл с текстом «текст», а два других - файлы конфигурации.
Я обновил свои разрешения для файла test.txt, чтобы любой мог его просмотреть или загрузить, попытался сделать его http поверх https и попытался удалить два других файла.
До сих пор, /var/www/
будет создан с четырьмя каталогами, но не /var/temp/
. /var/www/error
также будет содержать файлы.
У меня сложилось впечатление, что это должно работать, но это не так. Я делаю что-то неправильно? Я слежу за документация по aws.
РЕДАКТИРОВАТЬ Я заглянул в журнал ошибок. Вот результат. Очевидно, он не может найти файл:
2015-06-04 14:28:50,381 [ERROR] HTTP Error 404 : <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>404 - Not Found</title>
</head>
<body>
<h1>404 - Not Found</h1>
</body>
</html>
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/cfnbootstrap/util.py", line 159, in _retry
return f(*args, **kwargs)
File "/usr/lib/python2.7/dist-packages/cfnbootstrap/util.py", line 283, in get_role_creds
resp.raise_for_status()
File "/usr/lib/python2.7/dist-packages/cfnbootstrap/packages/requests/models.py", line 834, in raise_for_status
raise HTTPError(http_error_msg, response=self)
HTTPError: 404 Client Error: Not Found
2015-06-04 14:28:51,208 [ERROR] HTTP Error 404 : <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>404 - Not Found</title>
</head>
<body>
<h1>404 - Not Found</h1>
</body>
</html>
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/cfnbootstrap/util.py", line 159, in _retry
return f(*args, **kwargs)
File "/usr/lib/python2.7/dist-packages/cfnbootstrap/util.py", line 283, in get_role_creds
"cfn-init.log" [readonly] 1216L, 58277C
Чтобы копия файла S3 работала с доступом только для чтения S3, вам необходимо:
[ "s3:Get*", "s3:List*" ]
AWS::CloudFormation::Authentication
рядом с твоим AWS::CloudFormation::Init
раздел и настройте роль, как показано ниже.Убедитесь, что ваш "source"
раздел выглядит так, как показано ниже.
"AWS::CloudFormation::Authentication" : {
"default" : {
"type" : "S3",
"buckets" : [ { "Ref" : "ConfigBucket" } ],
"roleName" : { "Ref" : "MyNodeRole" }
}
},
"AWS::CloudFormation::Init" : {
"config" : {
"files" : {
"/etc/myapp/config/filename": {
"source" : { "Fn::Join": [ "", [ "http://", { "Ref" : "ConfigBucket" }, ".s3-us-west-1.amazonaws.com/config/filename" ]]},
"mode": "000444",
"owner": "root",
"group": "root",
"authentication": "default"
}
}
}
}
В source
ссылка должна быть ключом. Документация AWS для корзины S3 состояния:
Объекты, хранящиеся в сегментах, имеют уникальное значение ключа и извлекаются с использованием URL-адреса HTTP. Например, если объект со значением ключа
/photos/mygarden.jpg
хранится вmyawsbucket
ведро, то к нему можно обратиться с помощью URLhttp://myawsbucket.s3.amazonaws.com/photos/mygarden.jpg
.
Я не думаю, что вы копируете какие-либо файлы. Возможно, вам потребуется добавить IAM S3 доступ роль к вашему экземпляру - например AmazonS3FullAccess
. Я делаю нечто подобное, но настраиваю свои экземпляры с этой ролью и копировать в него файлы с S3 с участием aws s3 cp ...
или целые каталоги с aws s3 sync ...
. Я помещаю эти команды в поле данных пользователя, чтобы я мог «настроить экземпляр и забыть о нем».
Я столкнулся с той же проблемой, что и OP. Моя проблема заключалась в том, что я указывал роль ARN вместо roleName. Это заставляло меня получать ту же ошибку 404, что и OP. Из-за ошибки 404 могло показаться, что я указывал неправильный путь S3, но на самом деле именно роль cfn-init
использовал.