Amazon Cloud Formation:从 S3 存储桶导入文件

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还将包含文件。

/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

答案1

我认为您没有复制任何文件。您可能需要添加 IAMS3使用权角色您的实例-例如AmazonS3FullAccess。我做了类似的事情,但我用该角色设置了我的实例,并且从 S3 复制文件到aws s3 cp ...整个目录aws s3 sync ...。我把这些命令放在用户数据字段中,这样我就可以“设置实例,然后忘掉它”

答案2

要使 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

答案3

我遇到了与 OP 相同的问题。我的问题是我指定了角色 ARN,而不是角色名称。这导致我收到与 OP 相同的 404 错误。404 错误看起来好像我提供了错误的 S3 路径,但实际上是角色在cfn-init使用。

相关内容