Amazon Web Service 徳島勉強会に参加してひたすらツイートしたり、 EC2インスタンス起動できたのかコレ!?という具合で遊んでたのですが、流石に毎回毎回OSセットアップするのはだるいわけです。 (まぁそれでも実際のサーバにあれこれやるよりかはずっと楽なのですが。。。)
そんな折に、かねてよりUbuntuのjujuという機能が気になっていたので本腰を入れて調べていたところ、 EC2のセットアップもjujuからできるとのことで、これはすごいな、是非習得したいな、と思いまして。 ですが、jujuの参考資料で日本語のドキュメントは皆無(おそらくこちらのサイトぐらいかな→ Ubuntu で juju のインストールとテスト実行 (書きかけ) )。 あとTwitterでgdgdやってたら @_hito_ さんからいろいろご助言いただいたこともありまして、ここに僕の活動の記録を載せておきます。
言っておきますが、普通にjujuコマンド叩いてる人には得るもの何もないですよ?w あと、僕のやり方だと最後失敗してるっぽいので、何かご存じの方教えてください><
大雑把な流れ
「Ubuntuでコマンドを叩くと、EC2のインスタンスを作って必要なシステムを構築して、あまつさえアプリも入れてくれる!これは呪文のようだ!!!!!」という具合です。 自動的にEC2のインスタンスも作ってくれますし、設定次第ではRegionも指定できます。 あと、EC2に限らず、Ubuntu Orchestra(MAAS)、つまりUbuntuで構成されたサーバー群にも使えるし、単一サーバでもXLC使ったら十分使えるようです。が、今回は省く。つか知らない。
まぁそんなわけで、この記事では本格的ではない使い方、カジュアルな使い方としてのワークフローをご紹介します。 あと、ほとんどUbuntu公式の Getting started と同じことをやります。 (それにプラスして、日本で使うのにおいしいRegion設定とかやります)
前提条件
とりあえず以下のものは用意しておいてください。
- ネットワーク環境(ネットにつながってたらOK)
- Ubuntuが動く環境(Ubuntuのフレーバーは何でも良さそう。デスクトップでOK)
- EC2のアカウント( アカウント作成の流れ | アマゾン ウェブ サービス(AWS 日本語) )
では、行ってみよう!
やり方
とりあえず、今お使いのUbuntu環境にjujuを入れます。 jujuは現在のところベータ版なので、ppaを追加して最新状態を維持できるようにします。
$ sudo add-apt-repository ppa:juju/pkgs
$ sudo apt-get update && sudo apt-get install juju
これでjuju(と関連パッケージ)がインストールされます。
jujuの設定ファイルを用意します。
$ juju bootstrap
エラー出ますけど気にしないでください。次に設定ファイルを開きます。
$ nano ~/.juju/environments.yaml
すると、だいたい以下のように設定されていると思います。(ちょっとだけマスクしましたけども。)
environments:
sample:
type: ec2
control-bucket: juju-****9b917d8a4f269d23dd69af6c****
admin-secret: ****adf1b0e7487e99bb318d85c7****
default-series: precise
ssl-hostname-verification: true
(control-bucketなどは一意のIDということですよ念のため書きますが) さて、このサンプルはいきなりEC2で動かすことを目的に生成されています。 でも、このままだとちょっといろいろ都合がよくないので書き換えます。
environments:
sample:
type: ec2
control-bucket: juju-****9b917d8a4f269d23dd69af6c****
admin-secret: ****adf1b0e7487e99bb318d85c7****
default-series: precise
ssl-hostname-verification: true
access-key: AWSのアクセスキー
secret-key: AWSのアクセスシークレット
juju-origin: ppa
region: ap-northeast-1
これをenvironments.yamlに書き込みます。
ちょっとだけ解説。 まず、access-keyとsecret-keyは、「AWS access key」とかでググると良いかもしれないです。 juju-originは、そういうおまじないだと思ってください。 regionはサーバの所在地をどこにするかを指定してあげます。 この記録の読者層は日本人だと仮定しているので、Tokyo Region(ap-northeast-1)を指定しました。
次に、というか、やってる人はやらなくても良いのですが、SSH鍵を作っておきます。
$ ssh-keygen -t rsa -b 2048
Enterを適当に押していけば終わります。あんま詳しくないのでごにょごにょ。
さて、次がお金にまつわるコマンドです。。。 次のように叩くと、無料枠のEC2インスタンスとしてjujuを発動できます。
$ juju bootstrap --constraints "arch=i386 instance-type=t1.micro"
archはアーキテクチャです。i386があるということは、x86_64もあるということですね。 instance-typeはインスタンスタイプで、性能に関わります。t1.microとすると無料枠で使えます。 このあたりは財政状態との兼ね合いでどうぞ。ほかにもいろいろコマンド指定できるようですよ( DeprecatedEnvironmentSettings - Juju )
2012-10-21 08:51:46,887 INFO Bootstrapping environment 'sample' (origin: ppa type: ec2)...
2012-10-21 08:51:54,354 INFO 'bootstrap' command finished successfully
このような出力が帰ってきたら成功です。すかさず、次のコマンドを叩いてあげましょう。
$ juju status
すると、だいたいの確率でkey fingerprintを登録するように促されるので、「 yes 」と入力してあげましょう。 次にこのような出力が帰ってくると思います。
2012-10-21 08:51:58,855 INFO Connecting to environment...
The authenticity of host 'ec2-***-***-***-***.ap-northeast-1.compute.amazonaws.com (***.***.***.***)' can't be established.
ECDSA key fingerprint is **********.
Are you sure you want to continue connecting (yes/no)? yes
2012-10-21 08:56:38,545 INFO Connected to environment.
machines:
0:
agent-state: not-started
dns-name: ec2-***-***-***-***.ap-northeast-1.compute.amazonaws.com
instance-id: i-72f0****
instance-state: running
services: {}
2012-10-21 08:56:42,520 INFO 'status' command finished successfully
ここまでいけたら、後はコマンドを叩くだけでいろいろなサービスの立ち上げができます。 では、今回はWordpressを立ち上げてみましょう。( Juju Charms )
Wordpressは、データベースとしてmysqlを持ちます。なので、mysqlとwordpressが最小構成となります。 それでは、Charmのページに従ってコマンドをたたき込んでいきましょう。
$ juju deploy mysql
$ juju deploy wordpress
それぞれ「successfully」などと出力されたら成功です。このあたりで試しに juju status とか叩くとおもしろいかもね。
$ juju add-relation wordpress mysql
このコマンドも、成功らしき出力が帰ってきたらOK。 コマンドの意味ですが・・・まだ説明できるほど知識ないのですが、大雑把かつ適当に述べると、 mysql用のサーバとwordpress用のサーバは独立していて、このままだと何の意味もないのですが、 それを結びつけてあげるコマンドが、これなのかなー、という感じです。 まぁrelationが「関係」という意味ですからね、ええ。
$ juju status
ステータスを確認します。3つのインスタンス(machines:の項目)がrunningになっているか、public-address:が割り当てられた状態になっているかを確認してください。よろしいですか?
次のコマンドで、あなたが叩いたコマンドたちが世に放たれます。Expose!
$ juju expose wordpress
で、あとはstatusの一番下のURL(正確にはwordpressを有するインスタンスのpublic-address)にアクセスするとOK・・・なはずなんだがなぁ。。。 というのも、僕の方ではうまくいってないです。。。orz nginxのエラーとして502 Bad gatewayが返ってきてしまいます。。。
まとめ
僕はうまくいきませんでしたが、なんだかんだでインスタンスを3ついきなり立ち上げてくれるのは楽ちんだと思います。 もっとうまく使いこなせたらいいんですけどね。。。精進します。