【参考訳】otto

【参考訳】otto

【参考訳】otto はてなブックマーク - 【参考訳】otto


HashiConf 2015 day 1 の KeyNote で発表された Otto (https://ottoproject.io/)に関する blog 記事がありましたので、例によって日本語訳です。参考程度にどうぞ。

Otto – HashiCorp
https://www.hashicorp.com/blog/otto.html

■ Otto

今日、私達は Otto を公開します。これは Vagrant の後継者です。Otto はアプリケーションを開発・デプロイするための単一のソリューションであり、マイクロサービスを最もサポートしているものです。これは私達が開発してきた中でも、最も強力なツールです。

Otto は、あらゆる設定を必要とせずに開発環境を構築するものです。Otto を使うことにより、自分のプロジェクト・タイプを判別し、業界標準として知られる組み込み型のツールを使い(役者注;構成管理ツールのこと)、開発環境を使えるようにセットアップするものです。デプロイの準備が整えば、otto はインフラを構築・管理し、サーバをセットアップし、構築し、アプリケーションをデプロイします。

マイクロサービスの発達する傾向で、Otto は開発やデプロイに関するサービスの依存関係にあたり、どのようにインストールするかや、設定方法について知っています。Otto はアプリケーションを使い続けられるように、DNS を通して、これら依存関係を自動的に公開できるようにします。

Vagrantは、開発を単純にし、力をもたらしました。そして、私達は Otto を使った開発とデプロイにおいても、同様にエレガントなユーザ経験をもたらすものと信じています。

詳細は以下をお読みください。

業界が長い間に渡り必用としてきたのは、この類いの抽象化です。ようやく Otto で実現しました。
-- Ben McRad、Conde Nast Commerce 技術オペレーション主任

■ Vagrant 後継者

Vagrant は正しく多くのことを実行します。Vagrant は今日に渡るまで、多くの方にダウンロードされ、成長してきました。以前より増して、日にちに多くの Vagrant のダウンロードが続いています。ですが、私達は、これを更に良くできると考えています。

私達は6年間に渡り、開発者と開発環境について学んできました:

* 開発環境は似ている:全ての Ruby 開発環境は似ていますし、全ての PHP 開発環境等も似ています。この2つの開発環境は、同じ言語やフレームワークを使っている場合、差分はあまりありません。Vagrantfile は抽象化のためより、むしろユーザに対しては開発環境ごとに必用とする設定となったのでした。

* 開発者はデプロイしたい:アプリケーションの開発後、次のステップはデプロイです! 「vagrant up」でプロダクション(訳者注;本番環境)へという気の要望は何年にも渡り頂いています。本番環境は開発環境とは大きく異なります。たとえば、ロードバランサ、ファイアウォール、ルーティング関係、新しい設定などです。残念ながら Vagrantfile は、この種の情報に関する指定をうまく扱えませんでした。

* マイクロサービスは難しい:より多くのアプリケーションはサービス指向で書かれるようになってきました。これらのサービス向けの開発環境をモデリングしたりデプロイすることは難しいです。利用者(エンドユーザ)にとっては、各サービスごとに Vagrantfile を準備してインストールや設定を行う必用がありました。

Otto はこれらの問題全てを解決します。

Vagrant は健全に成熟したプロジェクト出会いr、今日も成長し続けています。私達は今後も可能な限り Vagrant のサポートを行い続けますし、新しいバージョンもリリースし続けます。Otto は私達の次世代のビジョンであり、Vagrant と並行して開発を続けます。

■ Appfile

私達は Otto 向けに新しい設定フォーマットを作成しました。先ほど述べた Vagrant に関する不具合全てを解決するのが、この Appfile です。

この名前が示唆するように、Appfile はアプリケーションを高レベルで記述することに焦点をおいています。完全な例は、次のようなものです。

application {
  name = “my-app”
  type = “ruby”

  dependency {
     source = “github.com/hashicorp/otto/examples/postgresql”
  }
}

customization “ruby” {
  ruby_version = “2.1”
}

Appfile は OS やメモリやディスク容量等に関して扱いませんのでご注意ください。Otto とはベスト・プラクティスとしての知識を取り込んだものであり、あなたにとってスマートなデフォルトになるものです。付け加えると、依存関係をどのように解決するかが、優先的な機能であると分かるでしょう。Otto はこの Appfile の情報を使い、開発環境とデプロイ環境に対して、自動的なインストールと設定を行うものです。

Appfile は私達がこれまで作成してきた中でも、最も簡単な設定フォーマットです。実際、Appfile における記述は殆どがオプションです(Appfile 自身を必用とすることを含めてです)。Otto を直接実行することもできますし、それによりアプリケーションのタイプと自動的に検出することもできます。

単純化の更なる上に、「customization」ブロックによって Otto の動作をカスタマイズできます。これらもかなり高レベルなものですが、より深く下まで掘り下げるものです。これにより、メモリをどうするか手動でチューニングするようなことが指定を行えます。

■ 知識の集約

単純化と Appfile における意図的な詳細の欠如によってもたらされるのは、知識の集約を具現化することです。

Otto はスマート(賢い)です。Otto に対居てデプロイするアプリケーションの種類と伝える時、Otto はアプリケーションを業界のベスト・プラクティスを用い、どのように開発したりデプロイするかを理解しています。Otto はどのように設定するかや、Terraform、Consul などのように、どのようにシステムを管理するかを知っています。

いずれ Otto はより賢くなり、環境に応じて新しいベスト・プラクティスを採用するでしょう。たとえば、アプリケーションが安全になるよう、Vault を使って自動的にシークレットの保管・提供を行えるようにするため、Otto が設定と準備に間もなく対応できるようになります。

このようなシナリオをご想像ください。OS で致命的なセキュリティ・アップデートが提供されたとします。普通の開発者やオペレータ達は、常に対応できないかもしれません。ですが、Otto を使えば迅速に更新をかけられるでしょう。Otto が更新されれば、自動的にデプロイしたサーバの OS に対するローリング・アップグレードが実施され、最新のベスト・プラクティスに基づきインフラが安全になります。

このシナリオはフィクションではなく、これを行えるように Otto は設計されました。

■ 開発

開発環境の構築には「otto dev」を実行します。

これにより、アプリケーションの開発環境をローカルの仮想マシン上に構築します。たとえば、上記の Appfile を使えば、Otto は自動的に RUby をインストールし、それらをまとめ、Ruby 開発環境(この後で説明します)向けの様々な OS 設定を行います。Otto は、アプリケーションが予め指定した開発環境の作成指示に従い、その結果を表示します:

$ otto dev
...

A development environment has been created for writing a generic Ruby-based
application. For this development environment, Ruby is pre-installed. To
work on your project, edit files locally on your own machine. The file changes
will be synced to the development environment.

When you’re ready to build your project, run 'otto dev ssh' to enter
the development environment. You’ll be placed directly into the working
directory where you can run ‘bundle install’ and ‘ruby’ as you normally would.

設定に対する指示が全くない、あるいは少ない場合でも、Otto は多くの主要言語やフレームワークの開発環境を知っています。Appfile を使えば、若干環境で違うところがあれば調整することも可能です。ですが、Otto の目指すところは、あらゆる一般的なアプリケーション・タイプ用の開発環境における、ベスト・プラクティスを構築することです。

開発環境が起動・実行されると、「otto dev ssh」のようなコマンドを使って環境に SSH で入れますし、「otto dev address」でホスト上に割り当てられている静的 IP アドレスを入手することなど可能です。これらは Vagrant 利用者にとっては慣れ親しんだものでしょう。

■ デプロイ

Otto はいくつかの単純なコマンドを使うことで、業界のベスト・プラクティスに基づきアプリケーションをデプロイします。Otto はインフラを管理し、アプリケーションを構築し、アプリケーションをデプロイします。

Appfile はクラウド不可知論(cloud-agnostic;訳者注、クラウドの認識は不要)です。Otto は特定の設定を行わなくても、あらゆるクラウド環境におけるアプリケーションのデプロイをサポートしています。Otto 0.1 では AWS のサポートのみですが、対象クラウドは迅速に増やす予定です。

他にも「otto infra」「otto build」や「otto deploy」といったコマンドがあります。Otto は完全なるインフラを起動し、アプリケーションを構築し、デプロイするものです。

インフラは複数の Appfile にまたがって共有することもできます。これにより複数のアプリケーションを同じインフラにデプロイすることが可能です。インフラを構築する時に必用なのは「otto infra」コマンドの実行が必用だということのみです。

■ マイクロサービス

マイクロサービスの開発やデプロイは、これまでチャレンジングなものでり、退屈な手順でした。Otto は一流の機能によってマイクロサービスをサポートするので、これらを簡単に、楽しい経験へともたらします。

サービスの依存関係(dependency)は Appfile で定義します。以下の Appfile は HashiCorp が内部で使っているもので、Binstore と storagelocker という2つの内部サービスの依存関係を記述したものです。

application {
  ...

  dependency {
    source = "github.com/hashicorp/binstore"
  }

  dependency {
    source = "github.com/hashicorp/storagelocker"
  }
}

依存関係の宣言には「dependency」ブロックを使い、URL で依存関係を指定します。この URL はファイルのパス、Git、Mercurial、HTTP 等が指定できます。

これだけで Otto に対して必用な依存関係全てを伝えられます。Otto は Appfile を読み込むことで、これらの依存関係によって、どのようにインストールや設定するかを把握します。また、Otto は自動的に依存関係に対する依存関係も集めますので、これらを手動で明示する必要はありません。

開発環境では、Otto は同じ仮想マシンの中に、これら全ての依存関係を設定して利用できるようにします。プロビジョニング環境においては、通常は DNS を通して利用できるようにします。

デプロイ時、Otto は各サービスが間違いなくデプロイされるようにし、そして、各サービスが DNS 越しに通信できるようにするため、アプリケーションの設定を行います。Otto の将来のバージョンでは、同じサービスを複数のインスタンス上で扱えるようにします。

■ HashiCorp による構築

HashiCorp は DevOps 問題を解決するための、技術的に面白く簡単に使えるソリューションを作り上げます。私達のアプローチ(手法)は、難しい問題をユーザがエレガントに解決するものです。

Otto はこのようにして作られた8番目のツールです。私達は VagrantPackerSerfConsulTerraformVaultNomad を作りました。Otto はこれらのツールを元に構築され、開発やアプリケーションの安全なデプロイ、スケーラブル、そして現代的な手法をもたらします。

Otto は私達の商用ツール Atlas に統合される予定であり、開発者やオペレータの協力、監視、アプリケーションのメンテナンス、組織をまたがるインフラの手助けとなります。Otto は、自身によって異なったチームメンバーが同時にデプロイすることを防止します。これにはデプロイ履歴を使うもので、Atlas でも利用可能になります。

私達は Otto を誇りに思っており、その将来に胸が高まります。ただし免責事項として、Vagrant の後継者とはいえ、Otto は非常に若いものであり、現在の Vagrant のレベルに達するまでは多くの時間を必用とするでしょう。私達は今日 Vagrant を捨てることを推奨しませんが、いずれは Otto に目を向けて欲しいと思っています…。

■ さらに詳しく

Otto に関してより詳しく知りたい場合、Otto のウェブサイト(https://ottoproject.io/)をご覧ください。以下のページは,次のステップのために有用です:

* Intro … 導入セクションでは Otto とは何か、どのように動作するのか、どのような使い道があるのか、そして、簡単に使い始めるための導入ガイドを通して Otto と、その関連機能すべてを学べます。

* Comparison to other software … Otto が他の選択肢とどう違うかを知りたい場合にお読みください。ページの中で、詳細の違いについて述べています。

* GitHub … Otto のソースコードは GitHub に置かれていますので、必要があれば参照できます。私達はまずドキュメントを読むことを推奨します。Otto の実装を理解するにあたって、大きな手助けになるでしょう。

■ 原文

Otto – HashiCorp
https://www.hashicorp.com/blog/otto.html