15
1

More than 1 year has passed since last update.

IaCのSQL版が気になっていたので改めて調べてみる

Posted at

メタップスアドベントカレンダー第三日目の記事です。
IaCのSQL版が少し前に話題になり、ずっと気になっていたので改めて調べてみました。

新たな領域のIaCが登場

最近、IaC(Infrastructure as Code)という言葉が一般的になりつつあり、インフラをコードで管理するという概念が市民権を得てきていると感じています。
代表的なツールとしては

  • Terraform
  • AWS CloudFormation
  • AWS CDK
  • Google Cloud Deployment Manager
  • Azure Resource Manager

あたりが挙げられると思います。これらは様々なプログラミング言語、YAML、JSON等で記述されます。
IaCのメリットとして

  • 開発期間の短縮
  • 信頼性・保守性の向上

がありますが、開発者側はインフラ領域に、インフラ側はコードを書く事に対して苦手意識がある人が多く、導入にはそれなりのコストがかかってしまいます。

これに対してインフラの構成をSQLで記述するものが登場しました。既にいくつかツールやSaaSが出ているようで、

  • IaSQL
  • CloudQuery
  • Steampipe
  • trino-cloud
  • StackQL

といったものが登場しています。
今年の5、6月くらいにTwitterを中心に一時話題となりましたが、まだまだ認知度はあまり無いようで、Googleトレンドを見るとあまり検索はされていないようです。
image24.png

特徴

特徴は以下のとおりです。

  • 普段コードを触っていない人でも取っ付きやすい
    インフラエンジニア等コードよりSQLが慣れている人にとっては最初のハードルが低くなるのではないでしょうか。

  • 切り戻し方法はDB Snapshotからrestore
    Snapshotからrestoreして過去のインフラ状態を復元します。
    DBのsnapshotがインフラのsnapshotになるんですね。Disaster Recoveryの設計等でDBの復旧方法が応用できるかもしれない点面白そうです。

  • システムに組み込みやすい
    やっていることはRDBの操作なので、たとえばWebシステムに組み込んでボタン1つでインフラ環境を簡単に変更できる等作り込みがしやすそうです。
    他のIaCは独自のツールやコマンド操作が必要でなかなか導入ハードルは高そうな点を考えるとこの特徴は大きな利点になりそうです。
    (AWS CDKは組み込みやすそうだが、マルチクラウドな環境を構築するといった場合対応できない)

欠点

欠点は以下が考えられます。

  • 既にIaCを導入している組織にあまり旨味が無い
    IaCツールをすでに使用している場合、わざわざ乗り換えるメリットはあまり無さそうです。
    SQLを扱える人が多い組織で新たにIaCを導入する際候補に挙がるのではないでしょうか。

  • 複雑な処理をするのが大変
    条件分岐等柔軟な記述ができないため、難読SQLが発生しやすくメンテナンス性が悪くなる等SQLを扱う上での困り事が発生しやすそうです。

  • 対応可能なクラウド、リソースが限定的
    現在はAWSの一部リソースのみに対応しており、用途が限定的です。
    githubを見ると扱えるリソースは増えそうでありマルチクラウドに対応する動きもあるようで将来的には扱えるものは増えると思われますが、現状はまだまだ少ないです。

実際に触ってみた

今回はIaSQLというSaaSを触ってみました。

2022年12月3日時点の画面は以下のようになっており、画面の右はモジュールやスキーマの情報、左はSQLの入力画面、下はSQLの入力結果が表示されていました。
image23.png

EC2インスタンスを作成

# tableにEC2インスタンスの行を追加
INSERT INTO instance (ami, instance_type, tags)
  VALUES ('resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2', 't2.micro', '{"name":"i-1"}');

INSERT後のinstanceテーブル

ID INSTANCE_ID AMI INSTANCE_TYPE KEY_PAIR_NAME STATE USER_DATA TAGS HIBERNATION_ENABLED REGION ROLE_NAME SUBNET_ID
1 null resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 t2.micro null running null {"name":"i-1"} null ap-northeast-1 null null

挿入されたレコードの情報を元にAWS環境にapply

# AWS環境にapply
SELECT * FROM iasql_apply();

apply後のinstanceテーブル

ID INSTANCE_ID AMI INSTANCE_TYPE KEY_PAIR_NAME STATE USER_DATA TAGS HIBERNATION_ENABLED REGION ROLE_NAME SUBNET_ID
1 i-XXXXXXXXXXXXXXXXX ami-0b73aa7c1d1b2e901 t2.micro null running null {"owner":"iasql-engine","name":"i-1"} null ap-northeast-1 null 29

これで実際にAWS環境にインスタンスが作成されていました。
割と簡単に作成できて驚きです。

15
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
1