web-dev-qa-db-ja.com

Amazonクラウドフォーメーション: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」というテキストを含むファイルであり、他の2つは構成ファイルです。

Test.txtファイルのアクセス許可を更新して、誰でも表示またはダウンロードできるようにし、https経由でhttpにしようとし、他の2つのファイルを削除しようとしました。

これまでのところ、/var/www/は4つのディレクトリで作成されますが、/var/temp/は作成されません。 /var/www/errorにもファイルが含まれます。

/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
1

ファイルがコピーされているとは思いません。 IAMS3アクセスroleをインスタンスに追加する必要がある場合があります-たとえば、AmazonS3FullAccess。私は似たようなことをしますが、そのロールでインスタンスをセットアップし、 S3からファイルをコピーしますaws s3 cp ...またはディレクトリ全体をaws s3 sync ...でセットアップします。これらのコマンドを[ユーザーデータ]フィールドに入力して、「インスタンスを設定して忘れる」ことができるようにします。

3
Vic

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ドキュメント 状態:

バケットに格納されているオブジェクトには一意のキー値があり、HTTPURLアドレスを使用して取得されます。たとえば、キー値が/photos/mygarden.jpgのオブジェクトがmyawsbucketバケットに格納されている場合、URL http://myawsbucket.s3.amazonaws.com/photos/mygarden.jpgを使用してアドレス指定できます。

4
hairylemon

OPと同じ問題に遭遇しました。私の問題は、roleNameの代わりにロールARNを指定していたことでした。これにより、OPが取得しているのと同じ404エラーが発生していました。 404エラーにより、間違ったS3パスを提供しているように見えましたが、実際にはcfn-initを使用していました。

0
makavenne