SSH やめました その1

多くの開発現場や運用現場で、主にリモートサーバーの操作などのために SSH が使われているかと思います。弁護士ドットコムではこの SSH をやめることができたのでそのことを書こうと思います。

0. SSH を何に使っていたのか

そもそも当社ではどういう用途で SSH を使っていたかというと、ざっくり以下の5つとなります。

1. サーバーにリモートログインしてログを確認
2. DB への SQL 発行
3. サーバーとローカルとのファイルの転送
4. Git 操作
5. サービスのデプロイ
6. ansible による各種操作

1. ログの確認

ローカルの開発環境で作業をしているときにはコンソールやらなんやらにログが出力されると思います。他の人に動作確認をしてもらったり、本番により近いデータで動作の確認をするのにステージング環境でログを見たかったり、場合によっては本番のログを見ないと問題がわからないということもあるかと思います。

当社では何年か前から、サービスの監視に Datadog を導入しています。Datadog には各種ログを取り込む機能があり、これが非常に強力で役に立ちます。 Search の機能を使うと、パスやステータスコードごとなど様々な絞り込みもできるし、複数台で構成しているアプリのログもひとつのウィンドウ内で閲覧できるだけでなく、 ELB のログなども併せて検索対象として探すことができます。ログの検索結果を URL で指定することもできるので、チーム内でログを共有するのにも便利です。

また、 Live Tail の機能を使うと、サーバーにログインして tail -f でログを流すようなことがブラウザ上でできてしまいます。当社では提供しているサービスの全てでコンテナ化を進めていることもあり、そもそもサーバーにログインするということ自体ができなくなってきていることも背景にありますが、これでログの確認用途はクリアできました。

ただひとつ、課金に関する課題はあります。ホストごとに課金される中で、本番環境だけでなくステージング環境にも Datadog を入れるのかという点です。なるべく安くログだけをなんとかしたいのであれば、 Lambda などを駆使して Datadog にログを送ることもできます。しかし、当社ではなるべく作り込みをしないようにという観点から、ステージング環境にも Datadog を導入しています。 Datadog の料金を少しでも安くしたいという場合は、年間契約などの相談をしてみるのも手だと思います。

2. SQL の発行

DB に対して SQL を発行したいということも非常に人気の高い操作(?)だと思われますが、当社では以下の方法で対処しました。

2.1. Adminer の導入

Adminer とはブラウザベースで使える SQL クライアントソフトです。見た目はちょっと懐かしい感じもありますが、わりと活発に開発が行われているようです。公式コンテナイメージもあるので、 ECS などで利用すると便利です。

なお、あまりに大きいテーブルなどを対象とする場合は処理が途中で終了する場合があるそうで、その際には 2.2 の方法を使ってもらっています。

2.2. Session Manager によるログイン

これを書いてしまうとズコーッという感じにもなってしまうのですが、 AWS から提供されている Session Manager (以下 SSM)という機能を使って特定のサーバーにリモートログインして、そこから SQL を発行するというケースもあります。それだと SSH するのと変わらないのでは?と思われるかもしれませんが、 SSH ユーザーの管理をしなくて良いことや SSH 用のポートを開けなくて良いということは大きなメリットの一つだと思います。

また、 SSM を使うことで、どの IAM ユーザーがどのような操作を行ったかということが記録されます。このため、監査が強い要件となっている場合は Adminer よりこちらの方が良いかもしれません。

SSM はブラウザから使えて便利なのですが、どうしても普段触れているターミナルを離れたくないという場合には、 AWS CLI のプラグインがあるのでそちらを使っても良いかもしれません。ただし、こちらは以前何度か使ったところ、ログに操作者についての情報がうまく残らなかったため、社内ではあまり推奨していません。

2.3. Aurora Serverless

まだあまり実績が無いのですが、 Aurora Serverless を使うと AWS コンソール上で SQL が発行できるようになります。 v2 になったことである程度のサービスで十分投入可能になっているのではないかと想像します。

2.4. redash の利用

ちょっと横道に逸れることになるかもしれませんが、 SQL 発行対象がサービスで使用中の DB でなくて良い場合には redash を使うのでも十分かもしれません。当社 SRE のメンバーの t_odash がいくつか記事を書いている中に redash に関するものもあるので、もしかしたら参考になるものがあるかもしれません。


ここまで書いて、予想以上に長くなってしまったので、続きはその2に書こうと思います。

この記事が気に入ったらサポートをしてみませんか?