はじめに
先日、PulumiからAutomation API がリリースされました。
Pulumiはこれまでも汎用プログラミング言語で宣言的な環境構成の定義ができていました(TerraformをHCLではなく汎用プログラミング言語で書けるイメージです)が、構成定義だけでなく、ステートの管理や環境への変更適用などこれまでCLIを使って実施していたタスクもプログラム言語内で完結させて実施できるようになりました。
これによって、Pulumiで行っていた環境構成の定義から、定義した構成の実環境への適用まですべてをバックエンドサーバと統合できるようになりました。こうした機能をAPIなどを通じて公開することで、開発者や運用者が簡単に利用できるようになります(PulumiではこのユースケースをPlatform APIと言う名前で呼んでいます)。
今回これを活用して、外部からAPIや簡単なGUIを使って、定義済みの環境を構築したり・変更したりできるもの作ってみたので紹介したいと思います。
ここで紹介しているものは、こちらで公開していますので是非手元で動かしてみてください
https://github.com/hayato1226/dev-platform
そもそもPulumiって?
主に、Terraformのような構成の定義を汎用プログラム言語で行えるようにしたもの + SaaS上のステート管理などの仕組み(SaaSは使わずに、S3などクラウドストレージ上でステートを管理する方法もあります)です。YAMLやDSLではなく、汎用プログラミング言語で環境構成が定義できるので、既存のプログラミング言語の持っているパッケージ管理の仕組みや、IDEの支援などを受けながら開発できる点に特色があります
。
https://www.pulumi.com/docs/intro/concepts/how-pulumi-works/
Automation API って何ができるの?
ざっくりいうと、プログラム内からpulumi up
(Terraformの terraform apply
) を実行したり、ステートの参照したりと、pulumiコマンドで行っていたようなことが各種プログラム内から実施できるようになるもの。APIドキュメントはこちら https://www.pulumi.com/docs/reference/pkg/nodejs/pulumi/pulumi/x/automation/
作ったものの紹介
開発チームのメンバがが必要に応じて、APIやWeb画面を操作して、AWS上に開発用インスタンス群を作ったり消したりできるものです。サンプルとして、モバイル開発をイメージして、Android端末イメージのGenymotionをデプロイする構成としています。
全体像
Pulumiによる環境管理機能を内包したバックエンドサーバと、APIを通じて環境変更を依頼するフロントエンドサーバから構成されています。
作成する構成
Pulumiで定義したAWS上の構成は下のような構成になります。専用のVPC上にPublicなSubnetを構成し、そこに開発用インスタンスを作成していきます。Security Groupで必要なポートを開けています。
back-end
下の動画は、左ペインがバックエンドサーバ、右ペインの上がクライアント(curl コマンドでAPIを叩いています)、右ペインの下がAWS上のインスタンス状態を表示しています。
下の例では、クライアントの端末から公開されているAPIへ 環境の作成→環境構成変更(端末追加)→環境削除 を順に行っています。単にhttpリクエストを投げるだけで必要な環境が手に入ることが分かるかと思います。
バックエンド側では、ログにpulumi up
コマンドを実行したときと同じようなログが出力されていることが分かると思います。
front-end
下の動画は、左ペインがバックエンドサーバ、右ペインがブラウザ操作を表しています。
バックエンドのAPIができたので、簡易なWebのUIも作成しました。簡易なUIですが、画面上から環境を作って、端末台数を増減させたり、端末へアクセスしたりと言ったことが可能です。
また、環境のステートはSaaS上で管理されていますので、これまでの変更の変遷や、現在の環境の情報なども見ることができます。
今後に向けて
Pulumi Automation APIを使うことで、環境の構成をうまくサービス化する手段が実現されました。これは、書籍「Team Topologies」の中で言われている、Platformチームが機能の X-as-a-Service 化を実現する際に強力なツールとなるなと感じています。
もし、興味持たれる方がいたら、次は実装内容の解説もしてみたいと思います。
参考
-
https://www.pulumi.com/blog/automation-api/
- Pulumi の Automation API を紹介するブログ記事
-
https://medium.com/@danfhern/self-service-platform-development-made-easy-with-pulumi-4e2cf150e93c
- この記事を書くきっかけとなったPulumi Automation APIを使ったセルフサービスプラットフォームのプロトタイプに関する記事
-
https://kari-marttila.medium.com/terraform-vs-pulumi-experiences-c41a8774b637
- TerraformとPulumiの比較はこちら