はじめに
JavaScript/TypeScript/Python/Goを用いてInfrastructure as Codeできるpulumiでさくらのクラウドに対応するためのプロバイダー(プラグインとSDK)を公開しました。
このプロバイダーを用いることで、以下のようなコードでさくらのクラウド上のリソースを操作可能になります。
さくらのクラウド上にサーバ(CentOS)を作成する例(TypeScript)
import * as sakuracloud from "@sacloud/pulumi_sakuracloud"; // CentOSパブリックアーカイブのIDを参照 const centOSArchive = sakuracloud.getArchive({osType: "centos"}); // CentOSパブリックアーカイブをコピー元とするディスクを作成 const disk = new sakuracloud.Disk("pulumi-example", { name: "pulumi-example", sourceArchiveId: centOSArchive.id, }); // ディスクを接続したサーバを作成、ディスクの修正機能を利用してrootユーザーのパスワードを指定 const server = new sakuracloud.Server("pulumi-example", { name: "pulumi-example", disks: [disk.id], password: "YourPassword01", }); // Outputとして作成したIDを指定 export const serverID = server.id; export const diskID = disk.id;
この記事ではこのさくらのクラウドプロバイダーについて紹介します。
Pulumiについて
PulumiとはJavaScriptやTypeScript、Python、Goを利用してインフラの定義をコードで行えるプラットフォームです。
各種プログラミング言語を用いて宣言的にインフラのプログラミングを行うためのSDKやランタイム、CLIなどがオープンソースとして提供されています。
マルチクラウド対応を謳っており、AWS/Azure/GCP/Kubernetesなどに対応しています(他にも多数サポートしています)。
また、Pulumi社はCNCFのSilverメンバーでもあり、そのプロダクトPulumiもCNCF Landscapeに載ってたりします。
https://landscape.cncf.io/selected=pulumi
Pulumiについての概要は以下の記事などを参照ください。
Pulumiのファウンダー/CEOであるJoe Duffy氏のブログ
先日v1.0に到達
このPulumiですが、2019/9/5に正式版となるv1.0がリリースされました。
Publickeyさんでも取り上げられていました。 www.publickey1.jp
この記事の執筆段階で早速v1.1がリリースされていましたので活発な開発が行われているようです。
Pulumiのさくらのクラウド対応
Pulumiでの操作対象は拡張可能
Pulumiで操作する対象となるインフラ/プラットフォームはプロバイダーという仕組みで拡張できるようになっています。
TerraformプロバイダーがあればPulumiプロバイダーを容易に作成可能
TerraformのプロバイダーからPulumiのプロバイダーを生成できるPulumi-Terraformブリッジというツールが提供されており、Terraformプロバイダーが用意されている環境であれば容易にPulumiプロバイダーを作成して利用できるようになっています。
余談ですがPulumiには元HashiCorp社のメンバーもJoinしてたりしますのでこの辺の連携が充実しているのも納得ですね。
今回リリースしたさくらのクラウド向けプロバイダーもTerraformプロバイダーを元に作成しました。
なのでさくらのクラウド向けのTerraformプロバイダーが対応しているリソースであればPulumiから利用可能となっています。
Pulumi+さくらのクラウドプロバイダーの使い方
それでは早速利用方法についてみていきます。
Pulumiの基本的な使い方
Pulumiの基本的な使い方については公式ドキュメントのチュートリアルや以下の記事などを参照ください。
さくらのクラウドを使うための設定
Pulumiでさくらのクラウドを利用するにはPulumiプラグインのインストールが必要です。
以下のコマンドでプラグインをインストールできます。
$ pulumi plugin install resource sakuracloud 0.0.1 --server https://github.com/sacloud/pulumi-sakuracloud/releases/download/0.0.1
プロジェクトの作成 & さくらのクラウド向けSDKのインストール
次にプロジェクトを作成してさくらのクラウド向けSDKをインストールします。
空のプロジェクトを作ってnpm
やyarn
、pip3
などを実行しても良いのですが、これらを簡単に行えるようにテンプレートを用意していますのでこちらを利用します。
Pulumiプロジェクトの作成
ディレクトリを作成してpulumi new
コマンドを実行します。
pulumi new
にはテンプレートの名前 or URLを指定します。
さくらのクラウド向けには以下のURLでテンプレートを提供しています。
- JavaScript:
https://github.com/sacloud/pulumi-sakuracloud/tree/master/templates/javascript
- TypeScript:
https://github.com/sacloud/pulumi-sakuracloud/tree/master/templates/typescript
- Python:
https://github.com/sacloud/pulumi-sakuracloud/tree/master/templates/python
例えばTypeScriptの場合は以下のようにします。
# ディレクトリの作成 $ mkdir example && cd example # プロジェクトの作成 $ pulumi new https://github.com/sacloud/pulumi-sakuracloud/tree/master/templates/typescript
これを実行するとプロジェクト名やスタック名などの入力が求められます。
入力するとnpn install
などが実行されさくらのクラウド向けSDKのインストールが行われます。
注: Pythonの場合
Pythonの場合はpulumi new
実行後に以下のように表示されます。任意のコマンドを実行してSDKをインストールしてください。
APIキーの設定
(2019/9/12追記: 書き忘れてたため追記)
続いてさくらのクラウドのAPIキーを設定します。
設定はpulumi config set
コマンドや環境変数などで行えます。
今回は環境変数で行います。以下のコマンドで環境変数を設定しておきます。
$ export SAKURACLOUD_ACCESS_TOKEN=APIトークン $ export SAKURACLOUD_ACCESS_TOKEN_SECRET=APIシークレット
プレビュー & デプロイ
あとは任意のコードを書いてプレビュー&デプロイするだけです。 先ほどのテンプレートはスイッチリソースを作成する内容となってますのでそのままプレビュー&デプロイ可能となっています。
プレビュー
$ pulumi preview
プレビューを実行すると実際にどのようなリソースが作成されるかが確認できます。
デプロイ
次はpulumi up
を実行して実際にリソースのデプロイを行ってみます。
デプロイして良いか尋ねられますのでyesを選択するとデプロイされます。
これでデプロイできましたね!!
お片づけ
pulumi destroy
コマンドでリソースの削除ができます。
お試しの場合は忘れずに削除しておきましょう。
おまけ: Terraformからの移行について
PulumiではtfファイルからPulumiのコードを生成できるtf2pulumiというツールも提供されており、Terraformからの移行を楽にしてくれています。
一からコードを書いても良いですが、こういったツールを利用することでコーディングが多少楽になるかもしれません。
終わりに
様々なプログラミング言語からInfrastructure as CodeができるPulumiとさくらのクラウドプロバイダーについて紹介しました。
リリースしたばかりでドキュメントなどが追いついていない場面もありますがぜひ使ってみてください!
以上です。