この記事では、コンテナサービス上にHabitatを設定し、ロードバランサーを含む基本的なWebアプリケーションをデプロイして管理します。
本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。
Alibaba Cloud Tech Share執筆者、イルハン・アディヤマン。Tech Shareは、クラウドコミュニティ内での技術的な知識やベストプラクティスの共有を促進するためのAlibaba Cloudのインセンティブプログラムです。
Habitatについて
Habitat は Chef によるオープンソースプロジェクトで、プラットフォームに依存しないビルドアーティファクトを作成することで、アプリケーションの設定、管理、動作をアプリケーション自体に移すことができます。これにより、アプリケーションをパッケージ化することができ、デプロイの準備が整うまでデプロイ先を気にする必要がありません。仮想マシン上にデプロイした後、ランタイム環境をDockerコンテナに切り替えることにした場合、アプリケーションを再パッケージ化したり書き換えたりする必要はありません。同じHabitatパッケージをリファクタリングすることなく、両方の環境で動作させることができます。Habitatは新しいアプリケーションと既存のアプリケーションの両方で動作します。次のようなことができます。
- アプリケーションの実行に必要なすべてのものを含むパッケージを構築します。
- ベアメタル、VM、クラウド、Docker、Mesos、Kubernetesなど、あらゆるプラットフォームにアプリケーションをデプロイできます。
- 実行中のアプリケーションを管理し、同じネットワーク内の他のサービスによる設定変更に対応します。
つまり、簡単に言えば、Habitatを使えばアプリケーションをパッケージ化することができ、デプロイの準備が整うまでデプロイ先を気にする必要がないということです。例えば、VMからDockerコンテナにランタイム環境を切り替える場合でも、アプリのリパッケージや書き換えは必要ありません。
あなたのチームがマイクロサービスの開発を模索している、または積極的に開発を行っている場合、この記事では、Alibaba Cloud Container ServiceとContainer Registryを使用してクラウドネイティブアプリケーションをデプロイして管理するためのシンプルで一貫性のある方法をHabitatがどのように提供しているかを理解していただけると思います。
前提条件
Alibaba Cloudのアカウントを持つ必要があります。まだ持っていない場合は、無料トライアルのページにアクセスして無料アカウントを取得してください。
ワークステーションでは、Dockerもインストールする必要があります。Dockerに慣れていない場合は、Getting Startedガイドを読むと、Dockerの仕組みをよりよく理解することができます。また、HabitatのBuilderサービスで認証できるように、GitHubのアカウントも必要になります。Habitat Builderは、自分のパッケージを保存したり、他の人が作ったパッケージを入手したりするための場所です。
Habitatの設置
ステップ1:Habitat Builderでアカウントを作成する
Habitat Builderは、Habitatのメインハブであり、Habitatのパッケージを保存したり、自動的にビルドしたり、デプロイしたりすることができます。ワークステーションの設定を始める前に、Habitat Builderのアカウントを設定しておきましょう。このチュートリアルでは、ワークステーションがHabitat Builderアカウントと通信するように設定するために、Habitat Builderアカウントのパーソナルアクセストークンが必要になります。
Habitat Builderでアカウントを作成するには、Habitatのドキュメントを開き、アカウントの作成方法を説明しています。このチュートリアルでは、最初の3つのステップを完了させてください。
- ビルダーアカウントの作成
- ビルダーにオリジンを作成
-
アクセス・トークンの生成
上記の手順が完了したら、HAB_ORIGIN
とHAB_AUTH_TOKEN
の環境変数を設定します。これらの環境変数を追加しておくことで、パッケージ名やbuilderでの認証などの作業がしやすくなります。
try-habitat
を以下のようにオリジン名に置き換えてください。
$ export HAB_ORIGIN=try-habitat
トークンを実際のauth_token
の値に置き換えます。
$ export HAB_AUTH_TOKEN=<replace-this-with-your-auth-token>
ステップ2:ワークステーションにHabitatをインストール
hab
と呼ばれるHabitatのコマンドラインインターフェイス(CLI)は、Habitatで必要なことはすべて説明されています。繰り返しになりますが、ドキュメントにはワークステーションのセットアップと設定に必要なことがすべて説明されています。
とりあえず、最初の2つのステップを完了させてください。
ワークステーションの設定では、__personal access token__の入力を求められます。この部分に上記のステップで設定したトークンを貼り付けてください。
インストールされていることを確認するために、hab --versionコマンドを実行します。
$ hab --version
hab 0.57.0/20180530114142
アプリケーション例
このチュートリアルでは、HabitatのサンプルNode.jsアプリケーションを使用します。
このリポジトリを作業ディレクトリにクローンします。
$ git clone https://github.com/habitat-sh/sample-node-app.git
プロジェクトには、サンプルアプリケーションのソースコードとパッケージのビルド方法を説明する Habitat プランが含まれています。
デモのために、/habitat
ディレクトリの下に Habitat Plan ファイルが生成されています。お好みのエディタで plan.sh
ファイルを開き、pkg_origin
の値を先ほど作成したオリジン名に変更してください。
Habitatパッケージの構築
このステップでは、Webアプリケーション用のHabitatパッケージの構築を開始します。Habitatは、Habitat artifact(.hart)
と呼ばれる独自のフォーマットでアプリケーションをビルドします。.hart
パッケージとしてアプリケーションをビルドすることで、以下のようなことが可能になります。
- アプリケーションを様々なクラウドネイティブフォーマットにエクスポート
- 依存関係が更新されたときの自動リビルドの取得
- ハビタット・スーパーバイザーによる本番サービスの管理
まず、アプリケーションレポのルートから hab studio enter
を実行して、Habitat Studio に入りましょう。
$ hab studio enter
Habitat Studioは、Habitatパッケージを作成するための「クリーンルーム」として機能する対話型のLinux環境です。スタジオ内には、あなたが定義したもの以外のソフトウェアはありません。スタジオ内では、ls
やpwd
などの簡単なLinuxコマンドを実行することができます。
[1][default:/src:0]# pwd
/src
ここで、pwd
を実行すると、sample-node-app
ディレクトリとその親ディレクトリが表示されると思うかもしれませんが、/src
が表示されます。これは、スタジオがchroot環境で動作するためです。この環境はしばしば「Unix jail」や「chroot jail」と呼ばれ、指定されたディレクトリツリーの外のファイルにアクセスできません。コンテナなどの仮想化環境ではchroot
の使用が一般的です。実際、Studioは他のソフトウェアを含まないDockerコンテナ内で動作します。これにより、作成するパッケージに必要なものだけが含まれていることを確認することができます。
次に、ビルドコマンドを実行して、アプリケーション用のHabitat artifact(.hart)を生成します。Habitatはパッケージ(.hartファイル)を生成し、結果ディレクトリに配置します。
[2][default:/src:0]# build
ビルド
が終了すると、出力の終わり近くに以下のようなメッセージが表示されます(下のスクリーンショット参照)。"I love it when a plan.sh comes together." これでパッケージがビルドされました。
また、以下のようにスタジオ上のLinuxコマンドls
を使用してディレクトリをリストアップすることで、成果物が生成されているかどうかを確認することができます。
[3][default:/src:0]# ls ./results
last_build.env try-habitat-sample-node-app-1.0.1-2017121904721-x86_64-linux.hart
これでパッケージがビルドされました。スタジオは次のパートのために開いたままにしておきます。
アプリケーションの実行
ビルドが完了したので、パッケージを実行してテストしてみましょう。Habitatのパッケージを実行するには、一般的に2つの方法があります。
.hartをDockerイメージにエクスポートしてdocker run
を使用する方法と、Habitatスーパーバイザを使用してHabitatスタジオから直接サービスを起動する方法があります。Habitatスーパーバイザを使ってアプリケーションを実行する方法についてもっと知りたい場合は、Habitatのドキュメントでスーパーバイザの詳細についても説明されています。
ここでは、後でAlibaba Cloud Docker Registryをアップロードして、クラウド上でコンテナを起動するためにこのイメージを使用するために、dockerイメージのエクスポートを使用します。
Habitat Studioのコマンド1つで、以下のように.hartファイルをDockerイメージとしてエクスポートしたことになります。
[4][default:/src:0]# hab pkg export docker ./results/<path to .hart>
エクスポートが終了したら、exit
を実行してスタジオを離れることができます。
[5][default:/src:0]# exit
logout
さて、Dockerコンテナを実行して結果を見てみましょう。
$ docker run -it -p 8000:8000 try-habitat/sample-node-app
最後に、ブラウザで http://localhost:8000 にアクセスして、下のスクリーンショットにあるようなサンプルアプリケーションの UI を確認します。
コンテナレジストリへの画像の公開
HabitatはDockerとの相性は抜群ですが、ベアメタル、VM、クラウド、Mesos、Kubernetesなど、ほぼすべての環境にHabitatのパッケージをデプロイすることができます。ここでは、Alibaba Cloudが提供するフルマネージドDockerレジストリであるAlibaba Container Registryにイメージを公開します。サンプルアプリケーションのコンテナをAlibaba Cloud上で実行するために、イメージをContainer Registryに公開し、コンテナインスタンスを作成します。
イメージを公開するには、いくつかの簡単な手順があります。
- Alibaba CloudコンソールからAlibaba Container Registryに入ります。
- オリジンの名前空間を作成します。(例: try-habitat)
- アプリケーションのリポジトリを作成します。このステップでは、dockerイメージを公開するだけなので、コードソースセクションで
ローカルリポジトリ
を選択します。 - リポジトリを作成したら、
管理
をクリックして、ドッカーイメージをレジストリに公開する方法を説明したガイドを見てください。
これで、コンテナレジストリに画像を公開する準備が整いました。アリババが提供しているガイドに従うか、以下の手順に従うだけです。
まず、Alibaba Cloud Docker Registryにログインします。
$ sudo docker login --username=<your-email-address-here> registry-intl.us-west-1.aliyuncs.com
次に、エクスポートしたDockerイメージをAlibaba Cloud Docker Registryにプッシュします。ここでは、アカウントの詳細に基づいてパラメータを置き換えることを忘れないでください。
$ sudo docker login --username=<your-email-address-here> registry-intl.us-west-1.aliyuncs.com
$ sudo docker tag try-habitat/sample-node-app registry-intl.us-west-1.aliyuncs.com/try-habitat/sample-node-app:latest
$ sudo docker push registry-intl.us-west-1.aliyuncs.com/try-habitat/sample-node-app:latest
これで、このイメージでコンテナを作成し、Kubernetes上でアプリケーションを実行することができます。
アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ