duyojiぶろぐ

技術系ときどき日常系

S3にAPIからアップロードするとリダイレクトされるときの対処法

失敗時の内容

$credentials = array(
    "key"    => "your_key",
    "secret" => "your_secret"
);

$s3 = new AmazonS3($credentials);

$response = $s3->create_object($bucket, $fileName, array(
    "fileUpload"     => $filePath,
    "acl"                => AmazonS3::ACL_PUBLIC,
    "contentType" => $contentType
));

上記のような感じでアップロードを試みたときうまくいかなかったのでvar_dump($responseで確かめたところ)以下のような出力されて、どうやら正しいエンドポイントをセットしてあげてみたいなことを言われているっぽい。

["body"]=>
  object(CFSimpleXML)#17 (6) {
   ["Code"]=>
    string(17) "PermanentRedirect"
    ["Message"]=>
    string(137) "The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint."
    ["RequestId"]=>
    string(16) "xxxxxxxx"
    ["Bucket"]=>
    string(23) "xxx.xxx.xxx.com"
    ["HostId"]=>
    string(64) "xxxxx"
    ["Endpoint"]=>
    string(40) "xxx.xxx.xxx.com.s3.amazonaws.com"
  }
  ["status"]=>
  int(301)

解決方法

以下のように東京リージョンならap-northeast-1なので、以下のようにセットしたらちゃんとアップロードできるようになった。

$s3->set_region(AmazonS3::REGION_APAC_NE1);

参考URL

Silex(phpunit, doctrine/orm)のテンプレートを作った

githubにアップした

github上に表題の通りSilexのテンプレートをアップした。

composerを使って依存関係を管理

composer.jsonにプロジェクトで使うライブラリなどを記述する。
今回は何かしらサービスを作る際のAPI実装で最低限あったら便利と思われるものをcomser.jsonに記述した。

composerを使ってインストールするものは以下の通り。

このテンプレートの使い方はgithubにアップしたREADME.mdに書いたのでここでは割愛。

ライブラリの依存関係の管理の他にも、ライブラリをダウンロードするときのレポジトリの指定や、クラスの自動ロードなど、composerはphp開発の際にすごく便利なのでphpで開発していてcomposerを知らない人は一回composerを使ってみると良いと思う。

Doctrine ORM コマンド メモ

追記(2013/1/26)

#composer.json
{
    "require": {
        "phpunit/phpunit": "3.7.*",
        "doctrine/orm": "*"
    }
}

上記のcomposer.jsonを用意して「./composer.phar install」を実行してvendorディレクトリがつくられるとき、vendorディレクトリの中にbinディレクトリがあって、composerでインストールしたもので、コマンドから実行する系のものはbinディレクトリに入っている。

以下は上記の「composer.json」を「./composer install」したとき、vendor/binディレクトリに作られるファイル一覧

#/path/to/vendor (include 「bin」directory)
$ tree bin/
bin/
├── doctrine -> ../doctrine/orm/bin/doctrine
├── doctrine.php -> ../doctrine/orm/bin/doctrine.php
└── phpunit -> ../phpunit/phpunit/composer/bin/phpunit

前回このページの「25.1.3. Configuration (Non-PEAR)」からdoctrineコマンドを実行させるためのphpファイルをつくっていたがわざわざそんな事しなくても良かったみたい。

前準備

今回composerを使ってインストールしているからこのページの「25.1.3. Configuration (Non-PEAR)」を見てdoctrineのコマンドを使えるようにする

基本的にわからなくなったらhelp

以下のように「doctrine」コマンド(ここではphp doctrine.php)とorm:○○の間にhelpを入れればorm:○○の使い方の詳細が見れるからとりあえずまずはhelpを使って使い方を確認。

php doctrine.php help orm:generate-entities

既にあるDBからORMの設定ファイル(yaml形式)と関連するエンティティ(各DBのオブジェクト)クラスを生成

php doctrine.php orm:convert-mapping --namespace="Entities\" --from-database yml /path/to/config_yaml_dir

php doctrine.php orm:generate-entities /path/to/entitities_dir

php doctrine.php orm:validate-schema

気になったところ

  • TinyIntはbooleanとして認識されるっぽい
    • しかも2以上いれても全て1になる(0か1だけしか値が入らないようにマッピングされている?)
  • フィールドにreadが入っているとバグが発生する(readが原因じゃないかもしれないが、read_flagとフィールド名を変更したところ直った)

指定できる型一覧

  • string: Type that maps an SQL VARCHAR to a PHP string.
  • integer: Type that maps an SQL INT to a PHP integer.
  • smallint: Type that maps a database SMALLINT to a PHP integer.
  • bigint: Type that maps a database BIGINT to a PHP string.
  • boolean: Type that maps an SQL boolean to a PHP boolean.
  • decimal: Type that maps an SQL DECIMAL to a PHP string.
  • date: Type that maps an SQL DATETIME to a PHP DateTime object.
  • time: Type that maps an SQL TIME to a PHP DateTime object.
  • datetime: Type that maps an SQL DATETIME/TIMESTAMP to a PHP DateTime object.
  • text: Type that maps an SQL CLOB to a PHP string.
  • object: Type that maps a SQL CLOB to a PHP object using serialize() and unserialize()
  • array: Type that maps a SQL CLOB to a PHP array using serialize() and unserialize()
  • float: Type that maps a SQL Float (Double Precision) to a PHP double. IMPORTANT: Works only with locale settings that use decimal points as separator.

http://docs.doctrine-project.org/en/latest/reference/basic-mapping.html

参考URL

VirtualBoxでRAID 10な環境を構築する(CentOS6.3)

はじめに

RAIDについて触れる機会が出来て、今まで構築したことがなかったので一度構築して感覚をつかもうと思い、ハードウェアをそろえるのも大変だったので、VirtualBoxで構築してみた。

参考にしたページ

VirtualBoxで手を加えたところ

システム

  • マザーボード
    • インメモリをデフォルトの512MBから1024MBに変更 こちらのサイトの11番目(ページ中央部)あたりにメモリが652MB以下とそれ以上ではCnetOSネットワークインストール後の画面が異なり、652MB以下で一度やってみたが、RAIDを設定できるページが見つからず(見落としているだけかもしれない)、上記に記述している参考にしたページでは652MB以上だとRAID設定が出来る画面が出てきていたので1024MB(652MB以上)にした。

f:id:duyoji:20130120213907p:plain

ストレージ

  • IDEコントローラ

    • 上記の「参考にしたページ」を参考にダウンロードしたネットワークインストール用のCentOSのisoファイルをセット
  • SATAコントローラ

    • 仮想ハードディスクを4つセットする(RAID 10を作る用)

IDEコントローラはCentOSのインストールが終わったらリストから外しておく。 (そうでないとインストールしたあともインストール画面が開く。それかシステムタブの起動順序をCD/DVD-ROMを最後に読み込むように変更するのでも大丈夫だと思う。)

f:id:duyoji:20130120213921p:plain

ネットワーク

  • アダプタ2
    • ネットワーク経由でインストールをするためネットワークを読み込めなくてはいけないので追加
    • 今回はWi-fiを選択したが、LANケーブルでインターネット接続している場合はEthernetを選択すれば良いと思う

f:id:duyoji:20130120213936p:plain

CentOSネットインストール、 RAID設定

CentOSネットインストール、 RAID設定の方法に関しては、上記の「参考にしたページ」の最後に2つのyoutubeのURLを見たほうが、動画で説明されている分、そちらの方が分かりやすいと思うので動画を参考にした方が早いと思うのでここでは割愛。以下にもう一度先程のyoutubeのURLを貼っておく。

まとめ

実際にはハードウェアでRAID構築をする予定なので、実際に自分がやるのとは違うかもしれないが、実際にRAIDを構築してみてHDDのパーティションの分け方とか、どういう構成でHDDを用意すれば良いとかが学べたので実践の場で学んだことを活かせられたらなと思う。

Elastic Beanstalkの流れ(コマンドラインから実行)

メモ

  1. eb init
  2. eb start
  3. CloudFormationが作られる
  4. CloudFormationのテンプレートに記述されている内容が実行される
    1. ファイル作成
    2. パッケージインストール
    3. リソース(EC2, S3など)の割り当て
    4. 起動時に実行されるデーモンの起動
    5. 必要があればEC2インスタンス立ち上げの時に実行させるUserDataを記述

参考URL