今回紹介する「Spinnaker」は、継続的デリバリ(CD:Continuous Delivery)ツールです。もともとNetflixで開発され、その後Googleと共同開発されるようになり、2015年11月にOSSとして公開されました。2017年6月にversion 1.0がリリースされ、CDF(Continuous Delivery Foundation)にホストされています。

Spinnaker

CDに関する豊富な機能を持ち、Webブラウザで直感的に管理/設定することができます。またAWS/GCP/Azureなどのマルチプラットフォームで動作します。以降では、Spinnakerの特徴を以下の項目に分けて、もう少し詳しく説明します。

  • 豊富なCodePipeline機能
  • Immutable Infrastructureの強制
  • Webブラウザによる直感的な管理
  • マルチプラットフォーム
  • インストールが簡単

豊富なCodePipeline機能

CodePipeline機能を豊富に備えるSpinnakerには、継続的デリバリのためのベストプラクティスもビルトインされています。例えば、Spinnakerの公式サイトで無料公開されている「Continuous Delivery With Spinnaker」の第4章では、以下のパイプラインが紹介されています(Figure 4-1)。

パイプライン

このパイプラインでは、カナリアリリースによって本番環境への部分適用を実行し、手動承認や一定時間の経過をもって、本番環境へRed/Blackリリースします。つまり、一定期間古い環境を残しておき、品質や安全性が確認された後に古い環境を削除するわけです。

また、Pipelineを起動するデプロイトリガーとして、手動以外にも以下が用意されています。

  • Cron起動
  • Docker registryへのPush
  • JenkinsやTravisCIなどのイベント

その他のツールとの連携も充実しています。Datadog、Prometheusなどのモニタリングツールとの統合や、カオスモンキーとの統合が可能となっており、システムのテスト/監視/アプリケーションの配備全体をカバー可能です。

Immutable Infrastructureの強制

自動構築されたサーバに対して、個別に暫定対処し、その後戻し忘れるといったいわゆる「Configuration Drift(構成の逸脱)」を避けるために、Immutable Infrastructureを徹底することは重要です。なぜなら、設定がほかのサーバと異なるのかどうかがわからなくなる(スノーフレークサーバ化する)と、再度構築することができなくなるケースもあるからです。

SpinnakerはImmutable Infrastructureを強制的に適用するため、上記のような問題が発生しません。

Webブラウザによる直感的な管理

Spinnakerは、Webブラウザによる直感的な管理が可能です。例えば以下の例では、パイプライン上のどこまで処理が進んでいるかを把握することができます。人手による承認待ちの状態で、「Continue」をクリックするとパイプラインが次のステップに進みます。

パイプライン

マルチプラットフォームでインストールが簡単

Spinnakerは、以下のプラットフォームに対応しています。

  • Amazon ECS
  • Azure
  • Cloud Foundry
  • Google App Engine
  • Google Compute Engine
  • Kubernetes (Manifest Based)
  • Oracle Cloud

また、簡単にインストール可能です。ここでは、AWSを例にインストール方法を紹介しましょう

AWSクイックスタート」ページの「デプロイ方法」タブの手順に従ってCloudformationの設定画面を起動し、以下の3つのステップでスタックを作成します。

  1. テンプレートの指定
  2. スタックの詳細を指定
  3. スタックオプションを設定
ステップ

スタックを作成すると、構築される環境を確認することができます。

確認

※ その他のプラットフォームで試してみたい方は、公式サイトをご参照ください。

参考:細かな設定がしたい方は

「Halyard」は、SpinnakerをCLIベースで設定する機能(halコマンド)です。これを使って以下のような流れで構築することで、細かな設定が可能です。
  • 環境定義
     hal config provider(AWSやGCPなどのクラウドの選択)
     hal config storage(S3やGoogle Cloud Storageなどのストレージの選択)
     hal config deploy(無停止リリースなどのリリース設定)
  • デプロイ
     hal deploy apply
  • Spinnaker UIへ接続
     hal deploy connect
その他のコマンドについては公式サイトをご参照ください。

* * *

以上、今回はSpinnakerを紹介しました。説明してきたように、Spinnakerは豊富なCodePipeline機能を備え、Immutable Infrastructureを強制的に適用してくれます。簡単にインストールできてマルチクラウドで動作し、ブラウザによる直感的な管理が可能な点も魅力です。ぜひ一度、ご自身の環境で試してみてはいかがでしょうか。