Amazon-Ec2
Amazon Cloud Formation:從 S3 儲存桶導入文件
我正在努力使用雲形成將文件從我的 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 是帶有文本“text”的文件,另外兩個是配置文件。
我已經更新了對 test.txt 文件的權限,以便任何人都可以查看或下載它,並嘗試通過 https 將其設為 http 並嘗試刪除其他兩個文件。
到目前為止,
/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
我認為您沒有複製任何文件。您可能需要將 IAM S3訪問角色添加到您的實例 - 例如
AmazonS3FullAccess
。我做了類似的事情,但是我使用該角色設置了我的實例,並將文件從 S3 複製到它,aws s3 cp ...
或者整個目錄使用aws s3 sync ...
. 我將這些命令放在使用者數據欄位中,這樣我就可以“設置實例並忘記它”
要使用 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
連結必須是密鑰。S3 儲存桶的 AWS 文件狀態:儲存在儲存桶中的對象具有唯一的鍵值,並使用 HTTP URL 地址進行檢索。
/photos/mygarden.jpg
例如,如果儲存桶中儲存了具有鍵值的對象myawsbucket
,則可以使用 URL 對其進行定址http://myawsbucket.s3.amazonaws.com/photos/mygarden.jpg
。