運用自動化サービス『SIOS Coati』がサーバーレスでリニューアルされたので早速触ってみた
大栗です。
本日サイオステクノロジー株式会社(以下サイオス)が提供している運用自動化サービスである『SIOS Coati』がサーバーレスアーキテクチャになってリニューアルされたので、早速触ってみました。
『SIOS Coati』が大幅バージョンアップ。 導入を完全に自動化し、運用に期待される全ての機能を追加。 フリーミアムモデルでの提供も開始しました
SIOS Coati
SIOS Coati(以下Coati)は一言で言うと、『AWSのEC2インスタンス上で動作するアプリケーションを監視し、障害発生時に復旧させるサービス』1です。サイオスで障害復旧と言うとLifeKeeper/DataKeeperが有名ですが、自動障害復旧のサービスも提供しています。
インスタンスの増減も自動で検出して、複数リージョン、複数VPCのEC2を監視できます。復旧動作もサービス再起動や、インスタンスの再起動を設定可能です。障害時のログレポートを送付できたり、他の監視ツールなどの連携も可能です。
先日開催されたAWS Summit Tokyo 2018では、SIOS Coatiをサーバーレスアーキテクチャーで全部書き直してみた!というセッションを開催されていました。サーバーレスアーキテクチャで全面的に書き換えており、リリース間近でしたがこの度リリースされました。
アーキテクチャ
気になる中味のアーキテクチャをAWS Summit 2018の登壇資料から構成図を抜粋します。
API GatewayからLambda、Step Functionsとフルにサーバーレスなカッコいいアーキテクチャになっています。OSの中のサービスの状態はSSM経由でチェックしています。
料金
FreeとStandardの2種類のプランが有り、Freeは無料、Standardは1時間5円/台とフリーミアムな料金体系となっています。
Free | Standard | |
---|---|---|
利用料金 | 無料 | 1時間 5円/1台〜 |
初期費用 | 無料 | 無料 |
仮想マシン数 | 1-無制限 | 1-無制限 |
監視頻度(分) | 30分 | 2分 |
インスタンス監視/復旧設定 | ◯ | ◯ |
サービス監視/復旧設定 | ◯ | ◯ |
障害レポート | ◯ | ◯ |
データ保存期間 | 3ヶ月 | 1年間 |
API連携 | ☓ | ◯ |
Support | △ FAQのみ |
◯ |
注意
CoatiではEC2のAuto Recoveryとの併用が強く推奨されています。EC2のAuto RecoveryではAWS基盤側のハードウェア障害が発生した場合に復旧、CoatiではEC2上のサービスの復旧と役割が異なっているので、監視/復旧の対象を理解して利用しましょう。
やってみる
Coatiのドキュメントに沿って試してみます。
監視対象は以下の環境とします。早速Amazon Linux 2に対応していたので、監視対象のOSとしました。
- リージョン: 東京
- OS: Amazon Linux 2
利用登録
Coatiのサイトの右上にある新規登録(無料)
をクリックするとアカウント作成画面が表示されます。
登録するメールアドレス、パスワードを入力して利用規約に同意下後にアカウント作成
をクリックします。
すると入力したメールアドレスへメールが送付されます。
メールには検証コードが載っています。
登録 URL
のリンク先でメールアドレスと検証コードを入力します。
認証・登録が完了します。
IAM Roleの設定
次にIAM Roleを作成します。ドキュメントに作成手順が載っているのですが、面倒なのでCloudFormationのテンプレートにしてみました。これを実行してパラメータでロール名を入力します。
--- AWSTemplateFormatVersion: '2010-09-09' Description: Coati Role Parameters: RoleName: Description: Name of Coati Role Type: String Resources: CoatiRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: AWS: arn:aws:iam::398878680527:root Action: - sts:AssumeRole Condition: StringEquals: sts:ExternalId: Coati-Service ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonEC2FullAccess - arn:aws:iam::aws:policy/AmazonSSMFullAccess MaxSessionDuration: 3600 Path: "/" RoleName: !Ref RoleName Outputs: RoleName: Value: !Ref RoleName AWSAccountID: Value: !Ref AWS::AccountId
Coatiのサイトの右上にあるlogin
をクリックするとAWSアカウント初期設定画面が表示されます。ここにAWSアカウントIDとIAMロール名を入力します。
内容を確認して設定完了
をクリックします。
ここで、自動的にリソースの検出を行うか、手動でリソースの検出を行うかを選択します。ここでは手動でリソースの検出を行う
を選択します。(色々既存のリソースがあるので。。。)
ダッシュボードが表示されます。
監視対象のEC2を起動
東京リージョンにEC2を起動します。ここではAmazon Linux 2とします。EC2を起動後に以下のコマンドでSSM Agentをインストールします。なおEC2にはSSM権限のRoleが必要です。
$ mkdir /tmp/ssm $ cd /tmp/ssm $ sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm $ sudo systemctl status amazon-ssm-agent
監視対象サービスとしてhttpdをインストールします。
$ sudo yum install -y httpd $ sudo systemctl enable httpd $ sudo systemctl start httpd $ sudo systemctl status httpd
監視対象の登録
リソースの検出
をクリックします。
検出の開始
をクリックします。
1分程待ちます。
するとEC2が検出されます。
SSHが利用できないインスタンスはステータスがSSM利用不可
となります。
監視対象インスタンスの設定
をクリックします。
すると、インスタンスで登録されているサービスが自動で監視対象となっています。監視対象の増減がある場合はここで設定します。
プラン変更
ここで、アカウント情報からプラン変更
を行います。
クレジットカード情報を入力します。
カード情報を登録するとStandardプラン
に変わります。これで監視間隔が30分から2分となります。また、サポートへのリクエストも可能になります。
監視開始
Coatiによる監視を開始します。Coatiの開始/停止
をクリックします。
開始します。
監視中インスタンス
が1になり、対象インスタンスのステータスが監視中
になっています。
ここでAWS Management ConsoleのSystems ManagerのRun Commandの履歴を確認してみると、Coatiが実行したコマンドが確認できます。
Run Commandでサービスの起動状態を確認しています。
復旧確認
ここでは意図的にhttpdを停止して復旧されるかを確認します。
httpdを停止してみます。
$ sudo systemctl stop httpd $ sudo systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: inactive (dead) since 木 2018-08-09 08:43:44 UTC; 3s ago Docs: man:httpd.service(8) Process: 3601 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=0/SUCCESS) Main PID: 3601 (code=exited, status=0/SUCCESS) Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec: 0 B/sec" 8月 09 06:51:39 ip-192-0-2-1.ap-northeast-1.compute.internal systemd[1]: Starting The Apache HTTP Server... 8月 09 06:51:39 ip-192-0-2-1.ap-northeast-1.compute.internal systemd[1]: Started The Apache HTTP Server. 8月 09 08:43:43 ip-192-0-2-1.ap-northeast-1.compute.internal systemd[1]: Stopping The Apache HTTP Server... 8月 09 08:43:44 ip-192-0-2-1.ap-northeast-1.compute.internal systemd[1]: Stopped The Apache HTTP Server.
するとサービスが落ちたことを検知してメールが通知されます。
その直後に復旧メールも来ています。
サービスのステータスを確認すると、ちゃんと立ち上がっています。08:43:44
に停止して08:45:27
に起動しているので、1分43秒で復旧できています。
$ sudo systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since 木 2018-08-09 08:45:27 UTC; 12s ago Docs: man:httpd.service(8) Main PID: 1584 (httpd) Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec: 0 B/sec" CGroup: /system.slice/httpd.service ├─1584 /usr/sbin/httpd -DFOREGROUND ├─1585 /usr/sbin/httpd -DFOREGROUND ├─1586 /usr/sbin/httpd -DFOREGROUND ├─1587 /usr/sbin/httpd -DFOREGROUND ├─1588 /usr/sbin/httpd -DFOREGROUND └─1589 /usr/sbin/httpd -DFOREGROUND 8月 09 08:45:27 ip-172-31-4-218.ap-northeast-1.compute.internal systemd[1]: Starting The Apache HTTP Server... 8月 09 08:45:27 ip-172-31-4-218.ap-northeast-1.compute.internal systemd[1]: Started The Apache HTTP Server.
なお、回復ができない場合は以下の様なメールが届き、監視対象から外れます。復旧できない場合は別途人の手で復旧が必要になるので、監視対象から外れるのは妥当な動作です。
さいごに
AWS Summit Tokyo 2018でCoatiをサーバーレスアーキテクチャで作り直していると聞いて、ニューバージョンのリリースを期待していました 。SSMを活用するなどAWSの仕組みを活用した上手いサービスだと思います。以前のように最低利用額も撤廃されたので、少数のインスタンスの監視などにも使えると思います。まず使ってみて、欲しい機能をフィードバックすると更に良いサービスになっていくと思います。