Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2023-12-18 SRETT8 Terraform使いがPulumiに入門する

2023-12-18 SRETT8 Terraform使いがPulumiに入門する

SUZUKI Masashi

December 18, 2023
Tweet

More Decks by SUZUKI Masashi

Other Decks in Technology

Transcript

  1. © 2022 3-shake Inc. 2 自己紹介 • 所属 ◦ 株式会社スリーシェイク

    Sreake 事業部 2022/6入社 ◦ AWS上で動くサービスのインフラ構築 /運用支援が主 • Skills ◦ AWS ▪ ほんのちょっとだけわかる ◦ Google Cloud ▪ 最近ほんのちょっとだけわかるようになりました ◦ Terraform ▪ 最近書くコードの9割はHCL すずきまさし (@masasuz)
  2. © 2022 3-shake Inc. 4 前提 • 普段はAWSをメインに触っている • 普段はTerraformをメインで使ってる

    • Pulumiはプロダクションでは使ってない。 ◦ むしろ触り始め ◦ ちゃんとわかっていない
  3. © 2022 3-shake Inc. 5 今回語らないこと • そもそもIaCとは ◦ 概要、特徴、メリット・デメリット

    • そもそもTerraformとは ◦ 概要、特徴、メリット・デメリット、操作方法
  4. © 2022 3-shake Inc. 6 モチベーション • Terraform(HCL)の記述力に限界を感じていた ◦ 足りない関数

    ◦ 二重ループのための Module使用 ◦ 分岐処理のためのcountと三項演算子 • (とはいえ、記述力が低いからこそ複雑なことを抑制できて可読性が上がっている面もある ) • 他の選択肢 ◦ CDKはAWSに限定される ◦ CDKTFは結局terraformに依存する ▪ これ自体は悪いことではない ▪ でもどうせならterraformの世界から離れたものを調べたかった そこでなにか良いものがないかと思い当たったところに Pulumiがあって興味が出たので調べてみよう
  5. © 2022 3-shake Inc. 8 • TypeScript & JavaScript (Node.js)

    • Python • Go • C#, VB, F# (.NET) • Java • Pulumi YAML 参考: Pulumi Languages & SDKs | Pulumi Docs Pulumi対応言語
  6. © 2022 3-shake Inc. 9 Pulumiのアーキテクチャ • Language host ◦

    インフラリソースの定義を Program (後述)として好きな言 語で定義します。 • Deployment Engine ◦ 希望する状態に変更するための操作セットを実行する役割 を果たします。 • Resource Provider ◦ クラウドサービスとの通信を処理して、 Programで定義したリソースの変更処理を行います。 参考: How Pulumi Works | Pulumi Docs
  7. © 2022 3-shake Inc. 10 • Project ◦ Programのソースコードとメタデータ (Programの実行方法)を格納し

    たディレクトリ • Program ◦ インフラのあるべき姿を定義したもの • Resource ◦ インフラを構成するオブジェクト。 ResourceのプロバティはOutputと して他のResourceのInputに使用することができます • Stack ◦ Programを実行すると作成されるインスタンス。同一の Programか ら開発、ステージング、本番環境の Stackを個別に作成することが できます。 参考: What is Pulumi? | Pulumi Docs Pulumiのコンポーネント
  8. © 2022 3-shake Inc. 15 ディレクトリ内にはPulumi実行に必要な 各種ファイルが生成されます。 ここで見るべきは以下の 3ファイルです。 •

    Pulumi.yaml ◦ プロジェクト設定 • Pulumi.dev.yaml ◦ Stack(dev)設定 • index.ts ◦ リソース定義 Projectの作成 cont.
  9. © 2022 3-shake Inc. 16 plumi preview コマンドでStackの変更差分を確認できます。 terraform plan

    を似ていますが、こちら差分の詳細は表示されませ ん。 リソース変更を確認
  10. © 2022 3-shake Inc. 17 pulumi up コマンドでStackをデプロイできます。 terraform plan

    と terraform apply を組み合わせた挙動になります。 実行すると選択肢が出ます。 Stackデプロイ
  11. © 2022 3-shake Inc. 20 pulumi destroy でStackを削除できます。 pulumi up

    と同じようにdetailsで詳細表示、 yes で削除実行ができます リソース削除
  12. © 2022 3-shake Inc. 21 Stateを操作するコマンドは以下のとおりです。 • StackのState出力(terraform state pull

    ) ◦ pulumi stack export • State インポート(terraform import) ◦ pulumi import <TYPE> <NAME> <ID> • State 削除(terraform state rm) ◦ pulumi state delete <URN> State操作
  13. © 2022 3-shake Inc. 22 Terraformからの移行オプションは以下の通りとなります。 1. terraformとPulumiを共存する ◦ Pulumiからtfstateを参照する

    2. tfstateからリソースをPulumiへインポートする 3. TerraformのコードをPulumiのコードに変換する 参考: Adopting Pulumi | Pulumi Docs 参考: Migrating from Terraform | Pulumi Docs Terraformからの移行
  14. © 2022 3-shake Inc. 24 tfstateからインポート pulumi import --from terraform

    ./terraform.tfstate のようにすることによって tfstateからリソースをインポートするこ とができます。 terraformからコード変換 pulumi convert --from terraform コマンドを使用することで、既存の TerraformのコードをPulumiのコードに変換することがで きます。 ただし、変換できないコードは TODOコメントが付きます。 90%~95%は変換が対応しているとのこと。 Terraform からの移行cont.
  15. © 2022 3-shake Inc. 25 Pulumiの概要と基本操作を Terraformと対比しながら説明してきました。 • 新規プロジェクトである程度複雑な処理をしたい。 •

    プログラミング言語に精通している人がメンバーにいる。 そういった場合には Pulumiは良さそうに思えます。 しかしながら、ある程度 Terraformで出来上がっているプロジェクトを Pulumiに移行するのはそれなりに大変 なので、プロジェクトの規模感とコストに見合うかを考えて導入するか考えると良いでしょう。 自分自身まだまだ使いこなせていないですし、追いきれてない Pulumiのトピックもあるので、今後も選択肢 の一つとして調べていきたいところです。 まとめ