クラウドフォーメーションを使用して、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
にもファイルが含まれます。
私はこれがうまくいくはずだという印象を受けていますが、そうではありません。私は何か間違ったことをしていますか? 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
ファイルがコピーされているとは思いません。 IAMS3アクセスroleをインスタンスに追加する必要がある場合があります-たとえば、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ドキュメント 状態:
バケットに格納されているオブジェクトには一意のキー値があり、HTTPURLアドレスを使用して取得されます。たとえば、キー値が
/photos/mygarden.jpg
のオブジェクトがmyawsbucket
バケットに格納されている場合、URLhttp://myawsbucket.s3.amazonaws.com/photos/mygarden.jpg
を使用してアドレス指定できます。
OPと同じ問題に遭遇しました。私の問題は、roleNameの代わりにロールARNを指定していたことでした。これにより、OPが取得しているのと同じ404エラーが発生していました。 404エラーにより、間違ったS3パスを提供しているように見えましたが、実際にはcfn-init
を使用していました。