2013/08/07

Amazon S3 に Web サーバを移しました(その2)

今井です。

前回、とりあえず Amazon S3 に Web サーバを移行してみましたが
  1. s3cmd でローカルと同期を取るとローカルにはないログファイルが消されてしまう
  2. s3cmd でローカルと同期を取ると .DS_Store などの余分なファイルまでアップロードされてしまう
  3. Webサイトアップロード専用アカウントが欲しい
といった問題が残っていました。


1. s3cmd でローカルと同期を取るとローカルにはないログファイルが消されてしまう

この問題の解決は簡単です。
ログの出力先はそれ専用のBucketを作ればよいのです。
そうすればログも全世界に公開されているんじゃないかとか心配しなくていいですし、Webサイトコンテンツアップロード時に消されてしまうこともありません。
注意事項としては Bucket のリージョンを www.kfield.co.jp と同じにしておく事だけです。


2. s3cmd でローカルと同期を取ると .DS_Store などの余分なファイルまでアップロードされてしまう

s3cmd のオプション指定で同期したくないファイル名を除外していすれば解決します。
s3cmd --config=./kfwebsite.s3cfg --delete-removed --exclude '.DS_Store' sync ./website/ s3://www.kfield.co.jp
このように --exclude 指定をすると、指定されたファイルはローカル側に無いものとして扱われます。
試しに実行してみたらサーバにコピーされていた余分なファイルはちゃんと削除されました。


3. Webサイトアップロード専用アカウントが欲しい

セキュリティ上、Webサイトのアップロードはそれだけが出来るユーザーをAWS上に作っておく事が望ましいということでユーザーを追加してアクセス権の設定をしてみます。

  1. AWS の Security Credentials 画面を開きます。
  2. User の追加を開始します。
  3. 追加するユーザー名を指定します。アクセスキーを生成するチェックボックスにチェックを入れておきます。
  4. 生成されたアクセスキーをメモしておきます。s3cmdで使用するアクセスキーをここで生成されたアクセスキーに置き換えます。
  5. 生成したユーザーのアクセス権設定を開始します。
  6. アクセス権は事前に用意しておいたテキストを使用するので Custom Policy で設定します。
  7. 名前を適当につけて定義を入力します。
    定義はこちらのAWSドキュメントを参考にしました。
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::www.kfield.co.jp"
          ],
          "Effect": "Allow"
        },
        {
          "Action": [
            "s3:DeleteObject",
            "s3:PutObject"
          ],
          "Resource": [
            "arn:aws:s3:::www.kfield.co.jp/*"
          ],
          "Effect": "Allow"
        }
      ]
    }



変更を適用する

前回の 手順6.「S3にWebサイトデータをアップロードする」の
$ s3cmd --configure --config=./kfwebsite.s3cfg

を今回の手順3で作成したユーザーのアクセスキーを使ってやり直します。


以上で前回残っていた課題は解決。
Webサーバ移行は完了です。

Amazon S3 に移行してみたわけですが、s3cmd などのアップロード用ツールやユーザーのアクセス権設定など、トータルの解説がすぐに見当たらなかったので私がやったことを書いてみました。

0 件のコメント :

コメントを投稿