Pulumi+さくらのクラウドでjs/ts/py/goを使ってInfrastructure as Codeする

f:id:febc_yamamoto:20190912110915p:plain

はじめに

JavaScript/TypeScript/Python/Goを用いてInfrastructure as Codeできるpulumiさくらのクラウドに対応するためのプロバイダー(プラグインSDK)を公開しました。

www.pulumi.com

github.com

このプロバイダーを用いることで、以下のようなコードでさくらのクラウド上のリソースを操作可能になります。

さくらのクラウド上にサーバ(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 f:id:febc_yamamoto:20190912121541p:plain

Pulumiについての概要は以下の記事などを参照ください。

Pulumiのファウンダー/CEOであるJoe Duffy氏のブログ

joeduffyblog.com

先日v1.0に到達

このPulumiですが、2019/9/5に正式版となるv1.0がリリースされました。

www.pulumi.com

Publickeyさんでも取り上げられていました。 www.publickey1.jp

この記事の執筆段階で早速v1.1がリリースされていましたので活発な開発が行われているようです。

Pulumiのさくらのクラウド対応

Pulumiでの操作対象は拡張可能

Pulumiで操作する対象となるインフラ/プラットフォームはプロバイダーという仕組みで拡張できるようになっています。

TerraformプロバイダーがあればPulumiプロバイダーを容易に作成可能

TerraformのプロバイダーからPulumiのプロバイダーを生成できるPulumi-Terraformブリッジというツールが提供されており、Terraformプロバイダーが用意されている環境であれば容易にPulumiプロバイダーを作成して利用できるようになっています。

参考: Pulumi vs. Terraform

github.com

余談ですがPulumiには元HashiCorp社のメンバーもJoinしてたりしますのでこの辺の連携が充実しているのも納得ですね。

今回リリースしたさくらのクラウド向けプロバイダーもTerraformプロバイダーを元に作成しました。
なのでさくらのクラウド向けのTerraformプロバイダーが対応しているリソースであればPulumiから利用可能となっています。

参考: Terraformのさくらのクラウドプロバイダー

Pulumi+さくらのクラウドプロバイダーの使い方

それでは早速利用方法についてみていきます。

Pulumiの基本的な使い方

Pulumiの基本的な使い方については公式ドキュメントのチュートリアルや以下の記事などを参照ください。

www.pulumi.com

dev.classmethod.jp

さくらのクラウドを使うための設定

Pulumiでさくらのクラウドを利用するにはPulumiプラグインのインストールが必要です。
以下のコマンドでプラグインをインストールできます。

$  pulumi plugin install resource sakuracloud 0.0.1 --server https://github.com/sacloud/pulumi-sakuracloud/releases/download/0.0.1

プロジェクトの作成 & さくらのクラウド向けSDKのインストール

次にプロジェクトを作成してさくらのクラウド向けSDKをインストールします。
空のプロジェクトを作ってnpmyarnpip3などを実行しても良いのですが、これらを簡単に行えるようにテンプレートを用意していますのでこちらを利用します。

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をインストールしてください。

f:id:febc_yamamoto:20190912141228p:plain

APIキーの設定

(2019/9/12追記: 書き忘れてたため追記)

続いてさくらのクラウドAPIキーを設定します。 設定はpulumi config setコマンドや環境変数などで行えます。

今回は環境変数で行います。以下のコマンドで環境変数を設定しておきます。

$ export SAKURACLOUD_ACCESS_TOKEN=APIトークン
$ export SAKURACLOUD_ACCESS_TOKEN_SECRET=APIシークレット

プレビュー & デプロイ

あとは任意のコードを書いてプレビュー&デプロイするだけです。 先ほどのテンプレートはスイッチリソースを作成する内容となってますのでそのままプレビュー&デプロイ可能となっています。

プレビュー

$ pulumi preview

プレビューを実行すると実際にどのようなリソースが作成されるかが確認できます。

f:id:febc_yamamoto:20190912142320p:plain

デプロイ

次はpulumi upを実行して実際にリソースのデプロイを行ってみます。

f:id:febc_yamamoto:20190912142424p:plain

デプロイして良いか尋ねられますのでyesを選択するとデプロイされます。

f:id:febc_yamamoto:20190912142530p:plain

これでデプロイできましたね!!

お片づけ

pulumi destroyコマンドでリソースの削除ができます。 お試しの場合は忘れずに削除しておきましょう。

f:id:febc_yamamoto:20190912142656p:plain

おまけ: Terraformからの移行について

PulumiではtfファイルからPulumiのコードを生成できるtf2pulumiというツールも提供されており、Terraformからの移行を楽にしてくれています。

github.com

一からコードを書いても良いですが、こういったツールを利用することでコーディングが多少楽になるかもしれません。

終わりに

様々なプログラミング言語からInfrastructure as CodeができるPulumiとさくらのクラウドプロバイダーについて紹介しました。

リリースしたばかりでドキュメントなどが追いついていない場面もありますがぜひ使ってみてください!

以上です。