views4GCPのストレージサービスについてまとめてみた。Exp:23510闇の戦士です。TrainerTweetShareHatenaこんばんはやみん、クラウドエースの光の戦士です。Pulumiが注目を浴びていますが、TerraformとPulumiを両方使ったことのある立場から比較をします。約170個のリソースを定義したプロジェクトを3つ、Pulumi歴は約20個のリソースを定義したプロジェクト1つです。Pulumiについては特に歴が浅いため、その記述については正確さを欠く場合があります。Platform(GCP)というパブリッククラウドサービスでの使用経験に基づくものです。料金についてTerraformPulumi依存関係の解決についてTerraformPulumi既存リソースのimportについてTerraformPulumi静的型付けの力についてTerraformPulumi所感Stateファイルの所在について両者に良いところがあります。された状態を任意のファイルに保存することができます。以下のように記述をしてGoogleCloudStorageのようなクラウドストレージに保存しても良いです。よって大量のリソースをimportし始めると、Stateファイルを編集する裏技を実行するTerraformersの方もいると思いますが、そのような小細工が通用する点で、TerraformのStateファイルが目に見えるファイルとして存在していることは有益になり得ます。Consoleという場所で管理されます。画面イメージはこのようなものです。詳細を見にいくと、その変更によりどのリソースにどのような影響があったのかを確認することができます。この例では、BigQueryにDatasetとTableが作成されたことを確認できます。Terraformの場合でもクラウドストレージサービスのファイルバージョニング機能を用いて差分を確認することは不可能ではありませんが、Pulumiの方が見通しが良さそうです。(3/22)追記PulumiのStateファイルもローカルストレージに保存することができました。クラウドのストレージには依然として執筆時点では対応していませんが、PRがありました。https://github.com/pulumi/pulumi/pull/2455こちらのPRがmergeされれば、terraformと同様にStateを管理することができるようになるでしょう。Codeを推進しようとするのであれば、チーム全員でStateを管理する必要があります。State管理については、料金の面から両者には明確な差異があります。TerraformTerraformのStateをチームで管理する手法は、クラウドストレージへStateファイルを保存するような方法が考えられます。これは非常に安価に済みます。Enterpriseを使用する方法も考えられますが、こちらについては明確な料金プランが記載されていませんでした。Enterpriseの機能を調べてみると、PulumiのようなState管理も可能になりそうですので、Terraformを利用しながらPulumiの良いところも取れるでしょう。Pulumi一方で、Pulumiについてはチームでの運用を考えると料金を考慮する必要があります。Slackとの連携には公式記載の料金がかかります。いう単位でStateを管理することができます。金額が必要になります。あることを考えると、会社組織に属する1人の技術者として見ても高く感じます。Viewerの役割を紐付ける場合を考えて両者を比較します。この例のポイントは、役割を紐付けるためにはサービスアカウントが作成されている必要がある、という依存関係です。}Terraformが非常に優れているところは、このような依存関係が存在する場合のほとんどで、自動的にその依存関係を解決してリソースを作成してくれるところにあると思っています。PulumiTerraformのノリでPulumiのコードを書くと、こんな感じでしょうか。apply)した結果は以下のようにエラーになります。errorPulumiは依存関係を勝手に解決してくれません。リソース同士が依存関係を持つ場合には、以下のように記述する必要があります。});JavaScriptやTypeScriptでプログラムを書いたことのある方であれば、非同期処理の解決をしている想像ができると思います。このPulumiのプログラミングモデルは、Pulumiの公式ドキュメントに詳細な記述があります。この性質がデメリットであると書いているわけではありません。依存関係の明示的な解決はメリットになる場面があると考えていますが、プログラミングの経験が浅い方にとっては、Terraformに比べて理解し難い可能性があると考えています。して表現したい、という場面は多いと思います。いう便利な機能があり、AWSの場合はプロジェクト(というのかはわかりませんが)内のリソースを全てチェックしてTerraformの設定ファイル化までしてくれるそうです。羨ましいGCPの場合はそこまで便利なわけではありませんが、起動済みのリソースの定義をStateファイルに記述してくれて、それを元に設定ファイルを書くことができてとても便利です。該当する機能はありません。いうものが存在し、プロジェクト内の全てのリソースをJSON形式でクラウドストレージへ出力するAPIがあります。Pulumiを使って既存のプロジェクト内リソースをコード化しようと思ったら必ず役に立つでしょう。静的型付けの力について最後に、これはTerraformとPulumiの差異というよりは、両者が採用している言語の差異になります。TerraformTerraformはHCLを利用して記述をします。yamlに比べて直感的でわかりやすく、Terraformが習得しやすい技術である理由の1つであると思っています。豊富ですが、ここではTypeScript(TS)について書きます。TSは静的型付けができる言語です。Codeを実現する際に非常に大きな力になります。私の場合、Terraformで記述する際には、Terraformのドキュメントとにらめっこしながら、どんなKeyでどのようなValueを記述すればいいのかを探す時間がとても長いです。覚えてしまえば大した手間ではないのだと思いますが、なかなかそのレベルに到達するのは大変です。PulumiをTSで書いた場合、Pulumiの型定義ファイルを利用することができます。型定義ファイルというのは、TSの世界でクラスやメソッドなどが持つ引数とその型などが定義されているファイルです。必須であることがわかります。どのような値を渡すべきなのかも、すべて右側の型定義ファイルに書いてあります。Codeとしてコードを書く際に非常に大きな力になります。以上のような差異があると理解したうえで、私はPulumiの方が好みです。これはPulumiを使うべきと言っているわけではなく、私がAngularというWebアプリケーションフレームワーク、及びその開発言語であるTypeScriptを好んでいるという事実がそうさせています。Codeを普段自分たちが書きまくっているプログラミング言語で記述できるという点にあると思います。HCLやyamlが特別難しいわけではありませんが、慣れ親しんだプログラミング言語と慣れ親しんだツールで記述できるというのは、明確なメリットになり得るでしょう。Pulumiについて問題を述べるならば、プログラミング言語で記述できるが故に、記述者によってコードの書き方に大きな違いが出そうなところです。GKEClusterクラスやEKSClusterクラスを書くと依存性を注入できて...みたいなことを考え始めてしまうのが悩みです。