ちょっと話題の記事

運用自動化サービス『SIOS Coati』がサーバーレスでリニューアルされたので早速触ってみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

大栗です。

本日サイオステクノロジー株式会社(以下サイオス)が提供している運用自動化サービスである『SIOS Coati』がサーバーレスアーキテクチャになってリニューアルされたので、早速触ってみました。

『SIOS Coati』が大幅バージョンアップ。 導入を完全に自動化し、運用に期待される全ての機能を追加。 フリーミアムモデルでの提供も開始しました

SIOS Coati

SIOS Coati(以下Coati)は一言で言うと、『AWSのEC2インスタンス上で動作するアプリケーションを監視し、障害発生時に復旧させるサービス』1です。サイオスで障害復旧と言うとLifeKeeper/DataKeeperが有名ですが、自動障害復旧のサービスも提供しています。

インスタンスの増減も自動で検出して、複数リージョン、複数VPCのEC2を監視できます。復旧動作もサービス再起動や、インスタンスの再起動を設定可能です。障害時のログレポートを送付できたり、他の監視ツールなどの連携も可能です。

先日開催されたAWS Summit Tokyo 2018では、SIOS Coatiをサーバーレスアーキテクチャーで全部書き直してみた!というセッションを開催されていました。サーバーレスアーキテクチャで全面的に書き換えており、リリース間近でしたがこの度リリースされました。

[レポート]SIOS Coatiをサーバーレスアーキテクチャーで全部書き直してみた! #AWSSummit

アーキテクチャ

気になる中味のアーキテクチャを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のテンプレートにしてみました。これを実行してパラメータでロール名を入力します。

CreateCoatiRole.yml

---
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の仕組みを活用した上手いサービスだと思います。以前のように最低利用額も撤廃されたので、少数のインスタンスの監視などにも使えると思います。まず使ってみて、欲しい機能をフィードバックすると更に良いサービスになっていくと思います。