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設定とかやります)

前提条件

とりあえず以下のものは用意しておいてください。

では、行ってみよう!

やり方

とりあえず、今お使いの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ついきなり立ち上げてくれるのは楽ちんだと思います。 もっとうまく使いこなせたらいいんですけどね。。。精進します。