40
Help us understand the problem. What are the problem?

posted at

Organization

AWSのインフラ管理はIaC? いやちゃうちゃう。時代はInfrastructure as SQL (IaSQL)でしょ

概要

  • 皆さんAWSのインフラ管理どうしてますか?

  • なるべくならインフラ管理は自動化。手順書も作らず、資源作成時誰でもどの環境に対し同じものを作成したいですよね。

  • そんな時、Infrastructure as Code(IaC)を採用し、インフラ管理をコード化するのは当たり前になってきているんじゃないでしょうか。

  • AWSにおけるIaCだと例えば、Cloudformationとか、AWS CDKとかTerraform等、様々です。

  • ただ今回は、そんなIaCの紹介・・・ではなく、全く新しい概念のInfrastructure as SQL (IaSQL) なるものについて、ご紹介したいと思います。

Infrastructure as SQL (IaSQL)

  • Infrastructure as SQL (IaSQL)とは何か。
    => 一言で表すなら、インフラ構成をPostgreSQLで管理するためのSaaSになります。

  • 仕組みとしては、AWSアカウントとホストされているPostgreSQLデータベース間を接続し、インフラ構成をデータとしてモデル化するようになっています。
  • そして、モジュールシステムにてすべてのIaSQLモジュールがAWSサービス(例えばaws_ec2、aws_elb)にマッピングされる形で適用される。

スクリーンショット 2022-06-21 10.22.18.png

何が嬉しいの??

  • 一番のメリットは、インフラ構成をSQLで管理できることにより、インフラを操作するために新しい言語を学ぶ必要がないことだと思います。
  • SQLであれば、エンジニアリングチームで既に使用されているケースも多いでしょう。

実は既にIaSQLのSaaSは存在する

どんな感じで記述するのか

  • こちらにアクセスしていただき「Try IaSQL now」をクリックしてください。

スクリーンショット 2022-06-21 10.38.21.png

  • ログイン画面に遷移するので、ログインしていきます。

スクリーンショット 2022-06-21 10.37.07.png

  • ログインできると、下記のような画面に遷移するので、接続するAWSアカウントの情報を入力し接続しておきます。

スクリーンショット 2022-06-21 10.40.05.png

スクリーンショット 2022-06-21 10.40.59.png

SQLのサンプル

  • IaSQLにおけるschemaの情報は下記より参照できます。

EC2の資源をクエリする

  • まず初めにEC2モジュールをインストールします。
SELECT * FROM iasql_install('aws_ec2');
資源の作成クエリ組み立て
  • トランザクションを張り、それぞれでインスタンスを作成するような例になります。
  • 今回、インスタンスのタイプはt2.microを指定し、amiは最新のものを確認し記載します。
  • また、後に以下で作成するインスタンスを参照したいので、タグを付与し名前を「i-1」「i-2」としています。
BEGIN;
  INSERT INTO instance (ami, instance_type, tags)
    VALUES ('ami-0892d3c7ee96c0bf7', 't2.micro', '{"name":"i-1"}');
  INSERT INTO instance_security_groups (instance_id, security_group_id) SELECT
    (SELECT id FROM instance WHERE tags ->> 'name' = 'i-1'),
    (SELECT id FROM security_group WHERE group_name='default');
COMMIT;

BEGIN;
  INSERT INTO instance (ami, instance_type, tags)
    VALUES ('ami-0892d3c7ee96c0bf7', 't2.micro', '{"name":"i-2"}');
  INSERT INTO instance_security_groups (instance_id, security_group_id) SELECT
    (SELECT id FROM instance WHERE tags ->> 'name' = 'i-2'),
    (SELECT id FROM security_group WHERE group_name='default');
COMMIT;
資源の適用
  • 準備は整ったので、早速資源を作成しましょう。
  • 資源作成時に使用するSQLは下記になります。
SELECT * FROM iasql_apply();
作成した資源の読み取り
  • 上記で作成した資源を今度は読み取ってみましょう。
  • 直感的にSQLを組み立てれば良さげです。
  • ここで先ほどEC2を作成した際に付与していたタグを指定することで、読み取るEC2を限定することができます。
SELECT *
FROM instance
WHERE tags ->> 'name' = 'i-1' OR
tags ->> 'name' = 'i-2';
  • ちなみにこんなこともできたり。
  • 下記はインスタンスの数を取得するクエリですね。
SELECT COUNT(*)
FROM instance;

IaSQLで用意されている関数

  • IaSQLで用意されている関数には以下のようなものがあります。
name signature 説明 サンプル
apply iasql_apply() リソースを作成、削除、または更新する。 SELECT * FROM iasql_apply()
plan_apply iasql_plan_apply() 変更するデータベース内のリソースのプレビューができます。 SELECT * FROM iasql_plan_apply()
sync iasql_sync() dbをクラウドアカウントの現在の状態と同期します。 SELECT * FROM iasql_sync()
plan_sync iasql_plan_sync() 同期時に変更するデータベース内のリソースのプレビューをします。 SELECT * FROM iasql_plan_sync()
install iasql_install(variadic text[]) modsをdbにインストールし、作成されたすべてのテーブルのレコードを返します。 SELECT * FROM iasql_install('aws_vpc@0.0.1', 'aws_ec2')
uninstall iasql_uninstall(variadic text[]) dbでモジュールをアンインストールし、ドロップされたすべてのテーブルのレコードを返します。 SELECT * FROM iasql_uninstall('aws_vpc', 'aws_ec2@0.0.1')
modules_list iasql_modules_list() インストール可能なすべてのモジュールを一覧表示します。 SELECT * FROM iasql_modules_list()
modules_installed iasql_modules_installed() データベースに現在インストールされているすべてのモジュールを一覧表示します。 SELECT * FROM iasql_modules_installed()
delete_all_records delete_all_records() iasqlモジュールによって管理されているテーブルのすべてのレコードを削除します。 SELECT * FROM delete_all_records()
help iasql_help() ヘルプの表示です。 SELECT * FROM iasql_help()

現在/将来的なサポート範囲

  • 現在、AWSのサービスの一部のみしかサポートしていません。ただ、Gitを見ると他のサービスのサポートもされそうな気配を感じます。
    => (EC2、ECR、ECS + Fargate、ELB、RDS、VPC、IAM、Route53)

スクリーンショット 2022-06-21 10.30.18.png

  • また、将来的にGCP、Azure、他のクラウドプロバイダーもサポートする予定であるとも書いてありますね。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
40
Help us understand the problem. What are the problem?