344 Views
October 14, 24
スライド概要
trapConference 2024で発表したスライドになります。
詳細記事 -> 工事中
AWS CDKユーザーがTerraform のAWS Providerを使ってみた話 seigo2016
自己紹介 seigo2016 数理計算科学系 22B (B3) 今月で無事サイクリング部の部長を引退 ! 最近はNestJSやAWS CDKと戯れるお仕事をしています SysAd Emoine_R / CTF (ごめんなさい) https://seigo2016.com @seigo2018 @seigo2018
LTするといったんですが、テーマに困った… セキュリティ… ? traQのバグ x2 の修正…? @seigo2018
… @seigo2018
IaC @seigo2018 してますか?
Infrastructure as Code の略 インフラをコードで管理すること インフラのバージョン管理や再現性を確保する インフラの変更を自動化することで、運用コストを削減する @seigo2018
ツール 何使ってますか? IaC @seigo2018
Terraformとは HashiCorp社が開発したオープンソースのIaCツール HCL (HashiCorp Configuration Language) という言語で記述 AWS、GCP、Azureなどのクラウドプロバイダーに対応 プラグイン形式で様々なリソースを管理できる 要は「IaC界のオールラウンダー」 @seigo2018
AWS CDKとは AWSが提供するIaCツール TypeScript、Python、Java、C#などの言語で記述 汎用プログラミング言語を使ってリソースを定義できる AWSのリソースをオブジェクト指向で管理できる (TypeScriptの場合) AWS CloudFormationのテンプレートに変換され、デプロイされる 要は「AWSネイティブの巧者」 @seigo2018
前提 自分の立場 メインではAWS CDKを使っている 実務では1年ほど ECS / RDS / Codepipeline / Codebuild / ECR / VPC / ALB / SG TypeScript Terraformは多少 実務ではAWS Providerを多少(-1ヶ月)触った程度 ECS / Codebuild / ECR / VPC / ALB / SG 個人開発ではProxmox Providerを使ったり 多分、CDK寄りの視点。 @seigo2018
AWS CDKとTerraformの主な違い AWS CDK Terraform 提供元 AWS HashiCorp 対応クラウド AWS AWS/GCP/Azure … 言語 TS/Go/Python … HCL 状態 AWS側 手元 (など) @seigo2018
AWS CDKの特徴 (賛否ありそうなところ) CloudFormationのラッパー CloudFormationのテンプレートを生成する 抽象度が高い L1 (Low Level Construct) と L2 (High Level Construct) と L3 (Patterns) の3つレイヤーが存在 L1: CloudFormationのリソースを直接操作する ( CfnBucket , CfnTable ) L2: L1をラップして使いやすくしたもの ( Bucket , Table ) L3: 複数のL2を組み合わせたパターン ( StaticSite , Pipeline ) プログラマブル 既存の言語の構文を使ってリソースを定義できる @seigo2018
CDKの気に入ったポイント 文法チェック・コード補完や型チェックが効く 基本的なリソースは実装量が少なく記述できる CDKのつらいポイント ベストプラクティス的なアーキテクチャがない リソースの依存関係を考える必要がある (例: Bucket , Table ) 構文が複雑にできてしまう ロールバックができる! リソースの詳細設定が難しい 抽象度が高いので、実装が楽 @seigo2018 属人化・闇鍋化しやすい
Terraform気に入ったポイント Terraformのつらいポイント 複雑な構文や型が少ない HSL… / 表現力が低い 実環境とコードの差分がわかりやすい 失敗時に一部だけ反映されて面倒 ( terraform plan ) ある程度リソースの依存関係が自動で解決される AWSだけでなく、他のクラウドプロバイダーにも 対応 同時にAzure OpenAIなどを使いたい場合に便利 @seigo2018
じゃあ、 Terraform で良くない? @seigo2018
AWS CDKを使うと良さげな場面 アプリ開発メンバーがAWSリソースを管理する場合 とにかく早くリソースを作りたい場合 シチュエーション : プロトタイプ作成、開発環境の構築 組織 : 個人開発 / 小規模開発 (大規模でも、チームで強い規約を作って推進していくなら使える?) @seigo2018
Terraformを使うと良さげな場面 AWS以外のクラウドプロバイダーを使う場合 細かいパラメータを設定したい場合 既存のリソースを管理する場合 シチュエーション : マルチクラウド環境、既存のリソースを管理する場合 組織 : 大規模開発 @seigo2018
まとめ AWS CDKを推す記事を書くつもりだった 1年使ってきて、ツラミが見えてきた 組織やプロジェクトの規模によって使い分けるのが良さげ 自分はAWS OnlyのプロジェクトであればAWS CDKを使い続ける予定(?) IaCまわりとかCI/CDとか楽しい! 家のProxmox鯖のTerraform管理/k8sクラスタ化の話でもよかった… @seigo2018