我正在努力使用云arrays从我的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是文本“文本”,另外两个是configuration文件。
我已经更新了我的test.txt文件的权限,以便任何人都可以查看或下载,尝试使HTTP通过https,并试图删除其他两个文件。
到目前为止, /var/www/将会创build四个目录,而不是/var/temp/ 。 /var/www/error也会包含文件。

我觉得这应该只是工作,但事实并非如此。 难道我做错了什么? 我正在关注aws文档 。
编辑我看着错误日志。 这是输出。 它显然无法find该文件:
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
我不认为你得到任何复制的文件。 您可能需要将IAM S3访问angular色添加到您的实例 – 例如AmazonS3FullAccess 。 我做了类似的事情,但我设置了我的实例与该angular色, 从S3复制文件到 aws s3 cp ...或整个目录与aws s3 sync ... 我把这些命令放在用户数据字段中,这样我就可以“设置实例并忘记它”
要获得S3文件复制与S3只读访问您需要:
[ "s3:Get*", "s3:List*" ] AWS::CloudFormation::Init部分旁边定义AWS::CloudFormation::Authentication并configurationangular色,如下所示。 确保您的"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链接必须是关键。 S3存储桶的AWS文档状态:
存储在存储区中的对象具有唯一的键值,并使用HTTP URL地址进行检索。 例如,如果具有键值
/photos/mygarden.jpg的对象存储在myawsbucket存储桶中,则可以使用URLhttp://myawsbucket.s3.amazonaws.com/photos/mygarden.jpg寻址。