2014年5月8日木曜日

Symfony2でDoctrine2使う時によく使うEntityのアノテーション一覧とDoctrine2のコマンド一覧

Symfony2シリーズ第二弾です。
Doctrine2はアノテーションでEntityの関係や属性を指定出来るので便利です。
ただドキュメントが英語だったので自分用によく使うヤツをまとめて置いときます。

公式ドキュメント(アノテーション一覧)

/**
 * UNIQUE制約のIndexを作るとき
 * nameを指定しない場合はIDX_6E72A8C13B66675Bのように種類_ランダムの名前が付けられる
 * @ORM\Table(name="テーブル名", uniqueConstraints={@UniqueConstraint(name="キー名", columns={"カラム名"})})
 * 複数指定もできる
 * @ORM\Table(name="テーブル名", uniqueConstraints={@UniqueConstraint(columns={"カラム名", "カラム名"})})
 *
 * Indexを指定したい時
 * @ORM\Table(name="テーブル名", indexes={@index(columns={"カラム名"})})
 * 複数指定もできる
 * @ORM\Table(name="テーブル名", indexes={@index(columns={"カラム名", "カラム名"})})
 *
 **/
class テーブル名
{
    /**
     * ID
     *
     * @var integer
     * 
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * オートインクリメントの指定
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * ほげ(外部キー貼る側)
     * 外部制約(リレーションを指定するときは名前空間を指定すると補完が効く
     * @var \project\MyBundle\Entity\Hoge\Hoge
     * リレーションの指定
     * @ManyToOne(targetEntity="\project\MyBundle\Entity\Hoge\Hoge", inversedBy="hoge")
     * @JoinColumn(name="hoge_id", referencedColumnName="id")
     * */
    private $hoge;

    /**
     * ほげ(外部キー貼られる側)
     * 外部キー貼られる側も指定がいる
     * @var \Doctrine\Common\Collections\ArrayCollection
     * カスケードの動作等は貼られる側で指定する
     * @OneToMany(targetEntity="\project\MyBundle\Entity\Hoge\Hoge", mappedBy="hoge", cascade={"persist","remove"})
     * */
    private $hoge;
 
     /**
     * 登録日時
     *
     * @var \DateTime
     *
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(name="created_at", type="datetime")
     */
    private $createdAt;

    /**
     * 更新日時
     *
     * @var \DateTime
     *
     * @Gedmo\Timestampable(on="update")
     * @ORM\Column(name="updated_at", type="datetime")
     */
    private $updatedAt;
}

注意が必要なのはリレーションを定義するときは両方のEntityにアノテーションを記載する必要があります。
そしてSQL的にはカスケードの条件は外部キーを貼る側に記載しますがアノテーションは外部キーを貼られる側に記載します。
というよりも実際にカスケードの条件はDDLとしては付与されてません。
アノテーションでのカスケード処理はDoctrineが処理する際に行うだけで実際のDBのDDLには関与しないので注意が必要です。
同じようにdefaultやon="create"も同様です。
DDLとしてdefaultやtimestamp型が使われるわけではないのです。
このへんはDBとコードが不一致なので動作については注意が必要ですね。

それとDoctrine2のよく使うCUIコマンドです。

//DBの作成
php app/console doctrine:database:create

//エンティティの作成
php app/console doctrine:generate:entity --entity="MyBundle:Entity名" --fields="name:string(255) price:float description:text"

//ゲッター・セッターの作成
php app/console doctrine:generate:entities project名/MyBundle/Entity/エンティティ名

//全部のエンティティの作成
php app/console doctrine:generate:entities projectMyBundle

//テーブルの作成
php app/console doctrine:schema:update --force

//データの投入
php app/console doctrine:fixtures:load --env=test


Doctrine2でDBマイグレーションを管理すると環境の複製やリリース等が簡単になります。
またFuelPHP2.0でもDoctrineを採用するようです。
PHPフレームワークのDBのスタンダードになりつつあるのでDoctrine2を覚えておいて損はないと思います。
(NetBeansはDoctrine2対応していますしね!)


ということで今日のところは以上です。

Symfony2のTwigExtentionをからContainerやEntityManagerを呼び出す

Symfony2は重厚で大規模開発には非常に優秀だと思います。
そんなSymfony2ですがちょっと手の込んだ事を調べると日本語情報が少ない印象です。
英語の公式ドキュメントとstackoverflow.comを行ったり来たりした結果をメモとして残しておきます。

やりたいこと


  1. Symfony2でTwigExtentionを作る
  2. 作ったTwigExtentionのgetGlobals()からDBの呼び出しやサービスの呼び出しをする
  3. base.html.twigの変数にDBから取り出した値を使う。

この2.をするのに情報がなかったです。
1.については公式ドキュメントがありますのでそちらを参考にしてください。

カスタムTwig拡張の書き方


さて本題ですがTwigExtentionをサービスコンテナに登録しましょう。
その際に

# src/Acme/DemoBundle/Resources/config/services.yml
services:
    acme.twig.acme_extension:
        class: Acme\DemoBundle\Twig\AcmeExtension
        tags:
            - { name: twig.extension }

    arguments:
            em: "@doctrine.orm.entity_manager"
            container: "@service_container"

とargumentsとしてEntityManagerとContainerを渡します。
次にTwigExtentionクラスのコンストラクタに
public function __construct($em, $container)
    {
        $this->em = $em;
        $this->container = $container;
    }
と記載します。
あとはControllerと同様に各メソッドからDoctrine2のmodelを呼び出すだけです。
実際にbase.html.twigの初期値にDBから取り出したデータを使いたいときはgetGlobals()をオーバーライドします。
public function getGlobals()
    {

        $var = $this->container
                ->get('my_domain.hoge_repository')
                ->getHoge();
        return [
            'hoge' => $hoge,
            'fuga' => 'fuga',
        ];
    }
と言った感じです。
base.html.twigの拡張すればかなりDRYにすることが出来るます。
ただしTwigExtentionでDBを呼び出すと毎回呼ばれます。
ですので出来るだけ回数を減らす必要があると思います。

Symfony2シリーズ続くかわかりませんが現場からは以上です。

2014年4月30日水曜日

第三回 中国地方DB勉強会を開いてきた

第二回から少し間が空きましたが第三回を開催しました。
今回もJPUG主催で行いましたがDBの種類関係なくハンズオンを行いました。
詳細は次のとおりです。

■中国地方DB勉強会のポータルサイト

GitHub上に作ってます。

中国地方DB勉強会

■第三回のコンテンツ内容

第三回中国地方DB勉強会申し込みサイト

■メーリングリスト

次回の告知についてはMLを使います。
興味がある方はチェックしてみてください。
講師の資料についてはポータルサイトのまとめに添付されています。

Googleグループ

dbstudychugoku@googlegroups.com

■動画とtwitterのまとめ

今回は諸事情によりありません。

■第三回のアンケート募集中

当日に参加やUst拝見された方は下記のアンケートに答えてくださると嬉しいです。
次回のコンテンツや今後の運営に活用させて頂きます。

アンケートはこちら
※匿名アンケートです


と以上のとおりです。

今回は久々に登壇しました。




資料としては非常にシンプルです。
実際の設定や詳細を知りたい人は

  「Linux HA PostgreSQL」

とかで検索すると幸せになれると思います。
Linux-HA Japan様が本当に詳しく情報提供してくれてます。
pgpool2については公式の日本語ドキュメントがあります。
また作者の石井さんには色々と助けていただきありがとうございました。

そして開催した感想ですが今回は初めてハンズオンに挑戦しました。
内容は会員向けファイルダウンローダーサイトのDB設計です。
すっごいざっくりとした仕様と僕が作ったWebのモックを元に皆さんに設計していただきました。
DB設計に慣れてる方が多く、結果は綺麗な正規化ばかりでした。
なのでマサカリの投げ合いになることはありませんでしたね(残念
その中でも印象に残ったのは

  • ファイルのバイナリをDBに保存するチームは居なかった
  • DBユーザをロールで複数作るチームも居なかった
  • ハンガリアン記法(m_userとか)も居なかった
ことですかね。
僕は例では3つともした(だってViewとか作る時にv_hogeとかしたいじゃん!)ので僕の実装例の時に集中マサカリを受けました(震え声。
そりゃ血塗れになったので覚えてるって話です(涙目
他にも

  • みんな外部制約キーを設定してた
  • DB固有の機能はほぼ使われてなかった
  • 極端な設計(IDリクワイアドとか)もなかった

といった感じでした。
これは参加者が純粋にレベルが高かったと言う印象です。
逆に言うとホントは来て欲しいDB初心者にはまだ参加のハードルが高いのかなとも思います。
初心者の参加については次の回の課題ですね。
またバリバリのRails使いが居たりすると結果は違ったかもしれません。

このハンズオンとは別に話題に上がったのは

  • column順番拘るか
  • updated_atやcreated_atは必要か
  • 削除の扱いについて
  • 外部制約かけるとER図をリバース・エンジニアリングする時に楽

というのがありました。
この変は実装の文化の違いなどもあるでしょうから他の人にも聞いてみたいところですね。

といった感じで非常に濃い内容の勉強会でした。
特にハンズオンをきっかけに色んな人の文化や考え方に触れられたのは勉強になりました。
意見交換自体は毎回やるようにしたいと思います。
個人的にはDDLの管理(DBマイグレーション?)はみんなどうしてるのか知りたいですね。


以上が第三回のことですが第四回は次のとおりに考えてます。

○第四回 中国地方DB勉強会 in 岡山

■開催概要
日時:2014年7月13日か21日(予定)
会場:岡山駅周辺を検討中
内容:PostgreSQLとMySQLの実行計画の使い方とチューニングについて

をやろうと思います。
講師については調整中なのでどこまで細かいところまでフォロー出来るかはわかりません。
ですが初心者の方こそ参加して欲しい内容になっております。
また勉強会の最後に意見交換の時間を用意します。
ここで日頃の疑問や困ってることをぶつけていただけたらと思います。

詳細が決まりましたら随時MLで告知していきます。
ご興味がある方はMLに参加をよろしくお願いします。
また申し込みサイトはDoorKeeperを利用予定です。
そちらのコミュニティも合わせてご活用ください。

といった感じで次は7月です。
久々の岡山ですが既に楽しみな内容にワクワクしてます!
また次回もどうぞよろしくお願いします。

2014年4月20日日曜日

ソニックガーデンのオフィスに突撃してみた

納品のない受託開発で有名なソニックガーデンに遊びに行ってきました。

ソニックガーデン


ソニックガーデンに行った目的はただ一つ、そう!倉貫さんに会うためです!!

倉貫さんのブログ


倉貫さんと言えばやっぱりアジャイル!!
そしてソニックガーデンと言えば冒頭でも触れた納品のない受託開発ですよね。
そこで聞いて感じたところをまとめてみました。

■納品のない受託開発についてそーだい的な考察

1. ターゲット

スタートアップみたいな変化の多いサービスを作りたい人に向いてます。
さらに言うとサービス作りたくて技術以外にフォーカスしてる人が合うと思います。
何故ならば技術の部分はソニックガーデンが全て請け負ってくれるからです。

だから「より良いサービス作り」に集中出来る←←←

これって非常に大切なことですよね。
逆に「業務系のような一回作ったら終わり」なシステムには向いてないと感じました。

2. 対象期間

これは「サービスが終わるまで」です。
最後まで付き合う=手抜きをせずちゃんと付き合うってことです。
なので対応するエンジニアのスキルは勿論のこと折衝力とかマーケティングとか技術以外の部分の負担も大きいですね。

3. 関わるエンジニアからみたメリット

これはホント色々あるのですが「自分の時間を作れる」ことが最大のメリットと思います。。
納期が無いので自分で作業時間をマネージメント出来ます。
なので上手くプロジェクトが回れば自分の時間が沢山作れます。
その時間で書籍を書くもよし、OSSに貢献するもよし、自分のサービスを作るもよし。
まるでGoogleの80%ルールみたいですよね。
でもこれってエンジニアのモチベーション維持には非常に大切です。
納品のない受託開発のビジネスモデルって長い目で見てるから社員の定着率も大事です。
そう考えるとモチベーション維持はとても大事なテーマだと思うのですがそれが綺麗に吸収されてると感じましたね。



ざっとですがこんな感じです。
話を聞けば聞くほど面白かったですね!
しかも自社サービスの話も伺いましたがこれがまた面白い!!
でもこれは企業秘密な所も多いと思うので興味がある方は直接聞いて見るのがいいと思います。
中国地方近隣ではオープンセミナー岡山に登壇されます。
セミナーや懇親会で是非アタックしてみてください!!

オープンセミナー岡山 申し込み

オープンセミナー岡山 懇親会申し込み


そしてエンジニアの人で納品のない受託開発に興味がある人はギルドと言う選択肢があります。
これは要はソニックガーデンのやり方を教えてもらいながら仕事を請け負う形です。
上記以外にもキャッシュ・フローが安定するなど色んなメリットがあります。
ただし一緒にやる仲間になる以上、ソニックガーデンの水準に達する必要があります。
その水準は低くなく、誰でも簡単になれるものではないなぁと感じました。
ただ今、その水準になっている必要はなく「将来的にそのレベルに達する見通しがある」ならチャンスだと思います。
興味がある方は下記のリンクを参考にしてみてください。

ソニックガーデンギルド


ということでソニックガーデン。
色々言われるIT業界のビジネスモデルにおいて非常に参考になる例の一つだと思いました。
また渋谷に行った際は是非ともお話を聞かせていただきたいですね!!

2014年4月19日土曜日

クレオフーガにお邪魔してきました

今、岡山のベンチャー企業でノリに乗ってるクレオフーガに遊びに行ってきました!

今、岡山のITベンチャーが熱い

クレオフーガは音楽コンテストコミュニティ クレオフーガを運営する会社です。
詳しくは最近リプレースしたコーポレートサイトを見てください。




クレオフーガは東京と岡山にオフィスがあるのですが今回は東京にお邪魔してきました。
その目的はこの人、西尾さんに会うためです!!
僕の個人的な友人であるハーレムさんや真央ちゃんがいる会社なので「非常に楽しそうな会社だなぁ」って印象だったのですが「じゃあトップはどう考えてるのよ?」ってのが今回お会いしようと思ったきっかけ。
で実際にあってどうだったかと言うと
  • 社員がベストパフォーマンスを出せるように色んな配慮をしてる
  • 自社サービスを育てることに対して非常に論理的
  • 音楽に対する想いがアツい

特に自社サービスの話は聞いててためになりましたね。
ドックフーディングも「自分が音楽大好き!」って視点なので本当にサービスに対する目線がユーザ目線なんですよね。
また楽曲を提供してるユーザとご飯を食べに行ったり、ボタンの配置一つも試行錯誤してて

売れるサービスには売れる理由がある


って当たり前のことを凄く感じましたね。
ただ今後の課題としてはマーケティングとデータアナリストが不足してるみたいです。
そういうのが得意で音楽が大好きな人はクレオフーガの門を叩いてみるといいかもしれません。


そしてそんなクレオフーガさんが協賛してるイベントが来月あります。

オープンセミナー岡山


去年は西尾さんが登壇してました。
今年はクレオフーガのメンバーである逸見さんが実行委員長です。
興味がある人はイベントや懇親会に顔を出してみるのもいいんじゃないでしょうか。

ということでクレオフーガ、勢いに納得の内容でした!!

2014年2月3日月曜日

オープンセミナー2014@広島に行ってきた

年に一回の広島のビックイベントに参加してきました。

■当日のTwitterのまとめ
#osh2014のまとめ

■オープンセミナー2014@広島の公式サイト
オープンセミナー広島のサイト

■テーマ
「TDD…そして Be Agile」

今年も参加してきました。
去年は実行委員長として開催側でしたが今年は副委員長として一歩後ろから応援してました。
また久々にオープンセミナーで登壇してお話させていただきました。
当日の発表資料はこちらです。




資料の中で紹介したリンク先

AWSのPostgreSQL(RDS)を使えるようになるまでの手順

Webアプリケーションを作るときに知ってると嬉しいPostgreSQLの使い方

1 発表者として

アジャイル、TDDをテーマにしてる中で自分だけ全く違う内容でした。
また事前アンケートでは自分のセッションが参加理由の人はいませんでした。
なので今回の内容としてはDBのことを知らない人向けです。
DB大好きな人からするとあんまり魅力を感じない内容かと思います。
ですが全くニーズが無い場所こそ、DB(データの大切さ)を伝える必要があると考えています。
何故ならばデスマの技術的なボトルネックはコードではなくDBが一番多いと思ってるからです。
「私はDB担当じゃないから」とか「DBってストレージの代わりでしょ?」って人にこそ RDS for PostgreSQL ですぐ始めれるのでチャレンジしてほしいなと思います。

とそんな考えで登壇させていただきました。
ただ聴衆の皆様にどれだけ内容が伝わったかわかりません。
また登壇のやり方も正しかったかわかりません。
というわけで聴衆の方はぜひぜひフィードバックをよろしくお願いします。
厳しいお言葉こそ次の課題だと思います。
小さなことでもご意見ご感想をいただけたらと思います。

オープンセミナー広島のアンケート


2 運営スタッフとして

今年は火村さんが実行委員長でした。
その火村さんから副実行委員長として指名されて補佐を務めさせていただきました。
結論からいうと火村さんが素晴らしい活躍を見せ、僕の仕事はほとんどなかったと思います。
また彼はこの一年、沢山のアウトプットと人柄で多くのエンジニアから愛される存在になりました。
これは僕が去年、彼を実行委員長に指名した際の

「ひむひむはもっと評価されるべき」

という狙いを予想を遥かに上回る結果で達成したかなと思っています。
イベントとしてもこれだけの人を集め、問題もなく終えたのは大切な実績になったと思います。
本当に良いイベントだったなぁと贔屓目無しで感じる一日でした。
もう総括すると #ひむひむマジひむひむ コレに集約されるかなと思います。


3 参加者として

本当に含蓄のあるセッションばかりで非常に充実したものでした。
どのセッションも面白く、珍しくセミナー中にコーディングする暇がないくらい聞き入ってました。
その中でも特に自分の心に響いたのは長沢さんのセッション。
大切だなっと感じたこと列挙すると













そして他の人のツイートを拝借すると






ざっくり自分なりにまとめます。


  1. 継続的に成長できる会社文化がないと売上は伸びない
  2. でもそれって会社の人材の能力と文化に依存する
  3. だからこそ高いモチベを維持できる環境と能力を発揮できる環境が必要
  4. そのために政治力を含めて自分になにができるか?

つまりは



ですよね。
と以上を踏まえた上で自分が会社で


  • 出来てること
  • 出来る事
  • やりたいこと


を振り返ってより良い環境つくりを提案・実践していかなきゃと感じました。



と言う感じで非常に有意義な一日でした。
また懇親会ではLTも盛り上がり、Shake Handsさんの魅力と相乗効果で楽しかったです。
やっぱり懇親会での交流は大切ですね。


ということで何度も言いますが最高の一日でした。
来年がどんなイベントになるか今から楽しみですし絶対参加します。
このblogを読まれてる皆様、来年も(は?)会場で会いましょう!!!


※和田さんがオススメしてる本でAmazonで手に入るオススメ本

2014年1月22日水曜日

AWSのPostgreSQL(RDS)を使えるようになるまでの手順



ついにAmazon RDS for PostgreSQLがサポートされました。
今日は各項目をしっかり説明しつつ、実際に使いはじめるまでをまとめてみます。



1 RDSの説明

AWSのアカウントの作成はこちら

またAWS自体初めての方もいると思いますので参考になる情報は次のとおりです。

■ドットインストール
Amazon Web Services入門

■AWSのまとめ記事
2014年からはじめるAWSリンク集←オススメ!

AWSクラウドデザインパターン

■参考図書




■Amazon RDS for PostgreSQLの説明
Amazon RDS と PostgreSQL の概要(PDF)

RDS for PostgreSQLの中を覗いてみた

■PostgreSQLが初めてのかたはこちら
これからPostgreSQLを始める人のための自習用オンライン無料コンテンツ

セミナー資料 - SRA OSS, Inc. 日本支社

ドットインストールは特に分かりやすいのでオススメです。
2014年からはじめるAWSリンク集は非常に丁寧にまとまってますのでこちらもオススメです。
Amazon RDS と PostgreSQL の概要(PDF)にはRDSの詳細の設定項目の説明があります。
詳しく知りたい方はこちらを確認ください。

ということでAWSの知識は上記のリンク先で補充していただき、本題のRDSの作り方です。



2 RDSの作成

アカウントを作成したらログインしてマネジメントコンソールにアクセスします。
作成方法は前述のAmazon RDS と PostgreSQL の概要(PDF)にも書いてあります。
今回は新規アカウント作成した際に付いてくる1年間の無料枠に収まるように設定してみます。

無料枠の説明(公式ドキュメント)

マネジメントコンソールはこちら


まずはEC2のメニュー画面に移動します。



ここでドットインストールにもありますがRDS用のセキュリティグループを作ります。
セキュリティグループはファイアーウォールに用にアクセスするルールを指定できます。
デフォルトでは全て無効になっていますので任意のポートを開けます。


さらにポートを指定します。
※PostgreSQLのデフォルトのポートは5432です
例ではSource(接続元)は全て許可(0.0.0.0/0)になっています。
実際の環境はアプリケーションや開発環境に応じて適切に設定してください。
※このままだと接続先のアカウントとパスワードを知ってる人は誰でもアクセス出来ます



これでセキュリティグループにルールが追加されました。
問題なければ登録します。


これでRDSの下準備は終わりです。
いよいよRDSを作成しましょう。


RDSの画面に移動します。




Launch a DB Instanceを選択して新規作成します。



データベースはPostgreSQLを選択します。


Multi-AZとProvisioned IOPS を利用の有無を選択
Multi-AZの説明については

Amazon公式ドキュメント

または

Amazon RDS と PostgreSQL の概要(PDF)

の14ページに書いてあります。
ここでの選択は次の画面でのデフォルト表示を指定するだけです。


インスタンスの詳細設定です。

License Model:
DBのラインセンスです。
postgresql-licenseしか選べません。
ですがpostgresql-licenseはBSDライセンスベースです。
AWSの場合は特に気にする必要ありません。
詳細は原文をご確認ください。

The PostgreSQL Licence(英語)

DB Engine Version:
DBエンジンのバージョンです。
PostgreSQLのバージョンは現在は9.3.1と9.3.2が選べます。
環境に合わせてお使いください。
例では新しい9.3.2を選択しています。

DB Instance Class:
作成するRDSインスタンスのスペックを選択します。
構成については

Amazon RDS と PostgreSQL の概要(PDF)

の18ページに書いてあります。
価格表についてはAmazonの公式ドキュメントを参考にしてください。

Multi-AZ Deployment:
冗長化構成を取るMulti-AZを有効にするかどうかを指定します。
有効にすると自動でフェイルオーバーしてくれます。
概要はこちらのブログがわかりやすいです。


本手順では、無料枠で収めるためにNo(無効)としています。

Auto Minor Version Upgrade:
DBのマイナーバージョンアップの自動適用の有無です。
マイナーバージョンアップなのでセキュリティやバグフィックスが大半です。
基本的に上げましょう。
ですが停止を伴うためMulti-AZを利用していない場合はServiceが停止します。
今回はテストなのでYes(自動適用)にしています。
Multi-AZは利用していないのでこの構成のままだとServiceが停止する可能性があります。
詳しい注意点については下記のブログがわかりやすです。

【AWS】お知らせ:2013年11月のRDS自動マイナーバージョンアップグレードに際して注意することをまとめました

Allocated Storage:
DBインスタンスに割当てるディスク容量を記入します。
例では最小の5ギガを指定しました。

Use Provisioned IOPS:
IOPSの値を指定できます。
IOPSは一秒間のinputとoutputの回数です。
デフォルトは1000までです。
指定すると指定の値までスケールアウトします。
例では無料枠で収まるようにOFF(無効)としています。

DB Instance Identifier:
AWS上でのDBインスタンスです。
お好きにどうぞ。

Master Username:
DBにアクセスする際のユーザー名です。
こちらも任意で付けてください。
下記のMaster Usernameはhoge-userとなっていますが登録に-使えませんでした
実際の登録はhoge_userとしています。

Master Password:
DBにアクセスする際のパスワードをです。
こちらも任意ですが8文字以上とする必要があります。


次は詳細画面2です。

Database Name:
DB名です。
任意で付けてください。
またここでも-は使えません

Database Port:
アクセスするポート番号です。
ポートは事前に作ったセキュリティグループと合わせてください。
例ではPostgreSQLのデフォルトの5432を指定しています。

Choose a VPC:
RDSインスタンスをどのVPC内に作成するかを指定します。

DB Subnet Group:
どのDB Subnet Groupに作成するかを指定します。
VPC内に1つしかない場合は自動的に指定された状態となります。

これらはAWS上でのセキュリティにかかる部分です。
詳細は公式ドキュメントを参照ください。

Publicly Accessible:
有効にするとDBにVPCの外から直接アクセス出来るようになります。
Noの場合は同VPC上のECなどからアクセス出来ます。
仮にNoの状態で外からアクセスするには同VPC上に踏み台を用意する必要があります。

Availability Zone:
どのAvailability Zoneに作成するかを指定します。
Multi-AZのAZはAvailability Zoneのことです。
指定しなかった場合、任意のZoneに作成されます。
リージョンとアベイラビリティーゾーンの説明の公式ドキュメントはこちらです。
例では特に指定していません。

Option Group:
DBの設定オプションを選べます。
自分で作成していない場合はデフォルトが作成されます。
カスタムしたい場合はRDSの設定画面でOption Groupを作成してください。
OracleやMySQLの時に利用できす。
つまりPostgreSQLは現在(平成26年1月22日)ではOption Groupの設定がありません。
したがってデフォルトのOption Groupを使って問題ありません。

Parameter Group:
DBのチューニング時に設定するパラメータのことです。
こちらも自分で作成していない場合はデフォルトが作成されます。
事前に定義しておいたParameter Groupを指定することで、初期設定を変更できます。
PostgreSQLのパラメータはpostgres.confで設定するような
  • autovacuum
  • checkpoint_timeout
などが設定できます。
チューニングが必要な際はご検討ください。
デフォルト値については前述のとおり、Nagayasuさんが

RDS for PostgreSQLの中を覗いてみた

で調査されてGithubに記載されてます。

postgresql.conf @ RDS for PostgreSQL

ただし、調査日が2013年11月16日なので最新情報が知りたい方は

SELECT name,setting,unit FROM pg_settings;

をSQLで実行して確認してみてください。
今回はデフォルトのままとしています。

VPC Security Group(s):
最初に下準備として作成したセキュリティグループです。
アクセスするポートは5432を指定したので例では作成したPostgreSQLを指定します。



次はバックアップとメンテナンスの設定です。

Enabled Automatic Backups:
自動バックアップの設定でYesで有効です。
有効にすると

1 日 1 回の RDS インスタンスのスナップショット + その日の差分情報

がバックアップされます。
ただし差分は5分置きなのです。
なのでリストアの最新の復元期間は最大で現時刻の5分前です。

Backup Retention Period:
バックアップの保持期間です。

Backup Window:
スナップショットのバックアップを取得するタイミングを指定します。
No Preferenceとすると任意のタイミングで取得されます。
ただし取得時には数分無応答となる可能性があります。
停止時間を把握するため実運用ではアクセスの時間帯に指定しましょう。
Multi-AZを有効にしている場合はこの問題は発生しません。
(スレーブ側からバックアップを取得するため)

Maintenance Window:
AWSの運営がRDSへのメンテナンスする時間を指定できます。
こちらもNo Preferenceとすると任意のタイミングでメンテナンスを実行されます。
パッチを当てる場合など、再起動を伴う可能性があります。
停止時間はメンテナンス内容によって様々です。
ただしこちらもMulti-AZを有効にしている場合はスレーブと切り替えながら行ってくれます。
(ダウンタイムは少なくなるがマスターの切り替えの時間の停止時間は発生する)

これらの詳細は

Amazon RDS と PostgreSQL の概要(PDF)

の20ページから書いてあります。


確認画面です。
問題なければLaunch DB Instance !!


完了すると


と表示されます。
これでRDSの作成は完了です。
Closeをbuttonを押してもそのままウインドウを閉じても問題ありません。
それでは実際に接続してみましょう。
※ただしRDSのInstanceは作成してから起動するまでに時間がかかります。



3 RDSへの接続

やっと待ちにまった接続です。
ネットで検索するとみなさんCUIからpsqlを叩いています。
実際にはGUIで使いたいですよね?
今回の接続方法はGUIツールとしてpgAdmin Ⅲ(以下 pgadmin3)を使います。

■pgadmin3

Windows版

MacOS版

今回は現時点(平成26年1月22日現在)の最新版の1.18.1を使います。

まずはインストール。
インストールについてはバージョンが違いますがこちらがわかりやすくまとめてあります。

※Windows版です
PostgreSQL 9.2にクライアントから接続する pgAdminのインストール設定

基本的にはインストール‐ウィザードにしたがって進んでください。
インストール終わったらまずはAWSのマネジメントコンソールでRDSの管理画面にアクセスします。
そしてInstanceのメニューを開き、接続先を確認します。
※IPアドレスは変わる可能性があるのでエンドポイント名で接続します



接続先を確認したらpgadmin3を起動させます。
接続先の新規追加を行います。
※補足ですが1.18からSSLトンネルできるようになってます


pgadmin3は設定時に一旦接続確認を行います。
設定で弾かれる場合はRDSの設定やセキュリティグループを確認してみてください。
無事接続先が増えた場合は接続できています。


無事な中身が見えました。
これでRDSの簡単な管理はpgadmin3上で出来るようになりました。
またpgadmin3はPostgreSQL専用ツールなだけあって他にも色んな機能があります。
PostgreSQLの高機能な部分を余すこと無くサポートしていますので是非お試しください。
時間がある時に調べてみると便利な発見があると思いますよ。

公式ドキュメント(英語)

GUIでデータベースを簡単にいじれるpgAdminとっても便利ですね

WindowsでPostgreSQLを使ってみよう


それではRDS for PostgreSQLライフをお楽しみにください!!