2023-12-18 SRETT8 Terraform使いがPulumiに入門する
by
SUZUKI Masashi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
3-shake SRE Tech Talk #8 Terraform使いがPulumiに入門する
Slide 2
Slide 2 text
© 2022 3-shake Inc. 2 自己紹介 ● 所属 ○ 株式会社スリーシェイク Sreake 事業部 2022/6入社 ○ AWS上で動くサービスのインフラ構築 /運用支援が主 ● Skills ○ AWS ■ ほんのちょっとだけわかる ○ Google Cloud ■ 最近ほんのちょっとだけわかるようになりました ○ Terraform ■ 最近書くコードの9割はHCL すずきまさし (@masasuz)
Slide 3
Slide 3 text
3-shake SRE Tech Talk #8 Terraform使いがPulumiに入門する
Slide 4
Slide 4 text
© 2022 3-shake Inc. 4 前提 ● 普段はAWSをメインに触っている ● 普段はTerraformをメインで使ってる ● Pulumiはプロダクションでは使ってない。 ○ むしろ触り始め ○ ちゃんとわかっていない
Slide 5
Slide 5 text
© 2022 3-shake Inc. 5 今回語らないこと ● そもそもIaCとは ○ 概要、特徴、メリット・デメリット ● そもそもTerraformとは ○ 概要、特徴、メリット・デメリット、操作方法
Slide 6
Slide 6 text
© 2022 3-shake Inc. 6 モチベーション ● Terraform(HCL)の記述力に限界を感じていた ○ 足りない関数 ○ 二重ループのための Module使用 ○ 分岐処理のためのcountと三項演算子 ● (とはいえ、記述力が低いからこそ複雑なことを抑制できて可読性が上がっている面もある ) ● 他の選択肢 ○ CDKはAWSに限定される ○ CDKTFは結局terraformに依存する ■ これ自体は悪いことではない ■ でもどうせならterraformの世界から離れたものを調べたかった そこでなにか良いものがないかと思い当たったところに Pulumiがあって興味が出たので調べてみよう
Slide 7
Slide 7 text
© 2022 3-shake Inc. 7 Pulumiとは Pulumiはプログラミング言語でインフラを構築可能なプロビジョニングツールです。 Terraformと同じようにProviderを通して複数のクラウドに対応しています。 TerraformはHCLという宣言的言語を使用するのに対し、 Pulumiは汎用的なプログラミング言語を使用して インフラリソースを定義します。 参考: Pulumi - Infrastructure as Code in Any Programming Language
Slide 8
Slide 8 text
© 2022 3-shake Inc. 8 ● TypeScript & JavaScript (Node.js) ● Python ● Go ● C#, VB, F# (.NET) ● Java ● Pulumi YAML 参考: Pulumi Languages & SDKs | Pulumi Docs Pulumi対応言語
Slide 9
Slide 9 text
© 2022 3-shake Inc. 9 Pulumiのアーキテクチャ ● Language host ○ インフラリソースの定義を Program (後述)として好きな言 語で定義します。 ● Deployment Engine ○ 希望する状態に変更するための操作セットを実行する役割 を果たします。 ● Resource Provider ○ クラウドサービスとの通信を処理して、 Programで定義したリソースの変更処理を行います。 参考: How Pulumi Works | Pulumi Docs
Slide 10
Slide 10 text
© 2022 3-shake Inc. 10 ● Project ○ Programのソースコードとメタデータ (Programの実行方法)を格納し たディレクトリ ● Program ○ インフラのあるべき姿を定義したもの ● Resource ○ インフラを構成するオブジェクト。 ResourceのプロバティはOutputと して他のResourceのInputに使用することができます ● Stack ○ Programを実行すると作成されるインスタンス。同一の Programか ら開発、ステージング、本番環境の Stackを個別に作成することが できます。 参考: What is Pulumi? | Pulumi Docs Pulumiのコンポーネント
Slide 11
Slide 11 text
© 2022 3-shake Inc. 11 Terraform Cloudのようなものと考えていただいて良いです。 デプロイの状態、履歴やシークレットを管理して、CI/CDやGitHubと連携してデプロイを実行することもできます。 Pulumi CLIはバックエンドを明示的に指定しない限りはでデフォルトでPulumi Cloudを使用します。 Terraformはデフォルトでlocalバックエンドを使用します。 Pulumi Cloud
Slide 12
Slide 12 text
© 2022 3-shake Inc. 12 個人で使う限りは無料で使用することができます。 ※2023/12/18現在 Pulumi Cloud 料金
Slide 13
Slide 13 text
© 2022 3-shake Inc. 13 デフォルトではPulumi CloudにStateを保存します。 そのためにまずログインします。以下のコマンドを実行するとブラウザが起動するので、ログイン処理をします。 Pulumi CLoudを使わず、ローカルにstateを保存したい場合は以下のとおりです。 Pulumi Cloudへログイン
Slide 14
Slide 14 text
© 2022 3-shake Inc. 14 pulumi new コマンドで新しいProjectを作成できます。同時にStackも作成されます。引数にテンプレートを指定できます。 ウィザード形式で設定をすることができます。 以下の例は awsプロバイダーを使用して、言語はTypeScriptを使用するテンプレートとなります。 Projectの作成
Slide 15
Slide 15 text
© 2022 3-shake Inc. 15 ディレクトリ内にはPulumi実行に必要な 各種ファイルが生成されます。 ここで見るべきは以下の 3ファイルです。 ● Pulumi.yaml ○ プロジェクト設定 ● Pulumi.dev.yaml ○ Stack(dev)設定 ● index.ts ○ リソース定義 Projectの作成 cont.
Slide 16
Slide 16 text
© 2022 3-shake Inc. 16 plumi preview コマンドでStackの変更差分を確認できます。 terraform plan を似ていますが、こちら差分の詳細は表示されませ ん。 リソース変更を確認
Slide 17
Slide 17 text
© 2022 3-shake Inc. 17 pulumi up コマンドでStackをデプロイできます。 terraform plan と terraform apply を組み合わせた挙動になります。 実行すると選択肢が出ます。 Stackデプロイ
Slide 18
Slide 18 text
© 2022 3-shake Inc. 18 details を選択すると変更差分の詳細が表示されます。 Stackデプロイcont.
Slide 19
Slide 19 text
© 2022 3-shake Inc. 19 yesを選択すると、変更が適用されます。 Stackデプロイcont.
Slide 20
Slide 20 text
© 2022 3-shake Inc. 20 pulumi destroy でStackを削除できます。 pulumi up と同じようにdetailsで詳細表示、 yes で削除実行ができます リソース削除
Slide 21
Slide 21 text
© 2022 3-shake Inc. 21 Stateを操作するコマンドは以下のとおりです。 ● StackのState出力(terraform state pull ) ○ pulumi stack export ● State インポート(terraform import) ○ pulumi import ● State 削除(terraform state rm) ○ pulumi state delete State操作
Slide 22
Slide 22 text
© 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からの移行
Slide 23
Slide 23 text
© 2022 3-shake Inc. 23 TerraformとPulumiを共存 以下のようなコードで localのtfstateが参照できるので、 terraformの値を参照して利用することができます。 networkリソースに関しては既存の terraformを使いつつ、その outputをPulumiで使うイメージになります。 Terraform からの移行cont.
Slide 24
Slide 24 text
© 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.
Slide 25
Slide 25 text
© 2022 3-shake Inc. 25 Pulumiの概要と基本操作を Terraformと対比しながら説明してきました。 ● 新規プロジェクトである程度複雑な処理をしたい。 ● プログラミング言語に精通している人がメンバーにいる。 そういった場合には Pulumiは良さそうに思えます。 しかしながら、ある程度 Terraformで出来上がっているプロジェクトを Pulumiに移行するのはそれなりに大変 なので、プロジェクトの規模感とコストに見合うかを考えて導入するか考えると良いでしょう。 自分自身まだまだ使いこなせていないですし、追いきれてない Pulumiのトピックもあるので、今後も選択肢 の一つとして調べていきたいところです。 まとめ