Amazon-Ec2

Amazon Cloud Formation:從 S3 儲存桶導入文件

  • October 8, 2019

我正在努力使用雲形成將文件從我的 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還將包含文件。

/var/www/錯誤/

我的印像是這應該可以工作,但事實並非如此。難道我做錯了什麼?我正在關注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 文件副本,您需要:

  1. 要將您的實例分配給實例配置文件 - 附加到實​​例角色,對儲存桶具有隻讀訪問權限 -[ "s3:Get*", "s3:List*" ]
  2. AWS::CloudFormation::Authentication在您的部分旁邊定義AWS::CloudFormation::Init並配置如下所示的角色。
  3. 確保您的"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

引用自:https://serverfault.com/questions/696390