RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

インフラでの自動化【まとめ】

はじめに

 はじめまして、ラクスでインフラを担当しているftkenjです。
前回は「DNSエラーってなに?」その原因と解決方法を書かせていただきましたが、
今回は「自動化」、その中でもインフラエンジニアの視点に立って紹介させていただこうと思います。

自動化とは?

 人間による作業を削減できるテクノロジーを使ってタスクを実行すること。
ただし、一口に「自動化」といっても様々なものがあります。
例を並べると以下になります。

 一番自動化でイメージしやすいのは「産業オートメーション」でしょうか。
工場などで製品の品質安定や人員の安全のためにロボットによる製作が該当します。
元々はこれがオートメーション(自動化)と呼ばれていたようですが、上記にもあるビジネスの自動化が出現したため混同しないよう「産業オートメーション」となったようです。

 自動化をすることによって生産性の向上が期待できるのはもちろんのことですが、同時に信頼性の向上も期待できます。
機械で繰り返し同じ作業を行うため、テスト時点でほぼ問題ないとなっていればほぼ同じクオリティを出すことが可能です。
(ビジネスプロセス自動化、ロボティック・プロセス・オートメーション、産業オートメーションが特に恩恵が大きいのではないかと思います。)

インフラで自動化といえば・・・

 やはりサーバの構成管理となります。(上記でいうと「ITの自動化」にあたります)
とはいえ、サーバの構成管理といっても範囲が広いため、もう少し細分化すると以下になります。

  • OSやミドルウェアの設定ファイルの一元管理
  • サーバ構成のコード化
  • 冪等性の担保

 これらをツールを使用して管理と実行の自動化を行っていきます。
そうすることで属人化の防止、人為的ミスの削減、サーバの新規構築や設定変更時の作業時間短縮といったことが見込めます。
 今まで物理サーバをサーバラックへマウントからサービスが提供できる状態までおおよそ1日はかかると思います。
それを自動化すると数時間まで短縮させることも可能になります。
特に複数のサーバを構築するとなった場合は効果は目に見えて変わりますね。

主な使用例

  1. 構成管理
    ・使用ツール:Git+AnsibleGit+TerraformCloudFormation
     サーバのMWやその設定ファイルの管理。
    管理している側を正としておき、変更を行うときはGit側に行い常に冪等性を担保できる状態にしておきます。
    AnsibleのymlファイルやtemplateなどをGitで管理していきます。

  2. メンテナンス/リリース
    ・使用ツール:Git+Ansible+Rundeck
     Rundeckなしでもansible-playbookコマンドでも管理対象サーバに変更を反映させることはできます。
    ですが、Rundeckを使用することであらかじめ作成したジョブを実行させることが可能です。
    また設定した時刻に自動実行させることもできます。
    (つまり夜間作業でずっと起きている必要がなくなる!)

  3. 動作確認
    ・使用ツール:Git+Selenium
     ブラウザ操作の動作確認などを自動化することが可能。
    特に同じ動作確認を複数のサーバで実施するときに一括で行うことができ、基本的に起動後は完了するまで待つだけでよくなります。
    Gitは、Ansible同様にSeleniumソースコードを管理します。

自動化ツールの簡単な紹介

インフラの自動化で使用される主なツールをざっくりと紹介します。

  • Git
     分散型バージョン管理システム
    今となってはメジャーなツールですね。
    サーバ上のファイルを直接変更すると、事前にバックアップとしてコピーを取っていなかった場合、差分の確認もできず最悪もとの正常に状態に戻せないこともあります。
    またコミットのコメントも残せるので、いつ・だれが・どういう変更を行ったかを追いやすいのもポイントです。
    ただし、チーム内でルールを決めておかないと想定外の変更が入っていたり、リリースするブランチを間違えたりするので注意です。

  • Ansible
     Agentlessなインフラ自動化ツール
    手動で行っていた手順をプログラム化してサーバにプッシュすることが可能です。
    ansible playbookは人間が読み取れる「YAML 形式」で記述でき、様々なモジュールや実行したコマンドの結果で処理を分岐するなどある程度複雑なことも可能です。
    デフォルトではsshで接続を行い、対象サーバにて上記のansible playbookの処理が行われます。
    対象サーバもansible上で管理することができ、タグ付けでグループごとに実行するといったことも可能です。

Ansibleイメージ図

  • Terraform
     マルチクラウド上のコンピュータやネットワークの構築を自動化するツール
    IaC(Infrastructure as Code)を実現するために、開発されたツールです。
    AWSだけでなくAzure、GCPと特定のプロバイダーに限定されることなくインフラ構成をコード化することが可能となっています。
    こちらもAnsibleと同様にコードをGitでバージョン管理することができます。
    ただあくまで、インフラ構成までを管理することができます。
    それより上のレイヤーについてはAnsibleを使用することになります。

  • AWS CloudFormation
     AWS リソースのモデル化およびセットアップに役立つサービス
    Terraformと異なりAWSでのみ利用可能です。(頭にAWSとついているので当たり前ですが。。。)
    AWS特化のためリソース間の依存関係等については、いい感じに吸収してくれているようですが、コード化しきるまでが大変かつサービスの一部なので無料利用枠を超えてしまうと料金が発生してしまいます。
    他にどれだけAWSのサービスを使用しているかによりますが、どっぷりAWSに浸かっているのであればTerraformよりもこちらの方が良いかもしれませんね。

  • Rundeck
     Agentlessなジョブ管理ツール
    Rundeckを実行するサーバから対象サーバへ、sshが可能であれば使用することができます。
    ジョブネットを作成することが可能であり、もしジョブAの実行に失敗したらジョブBは実行させずに終了させるなどが可能となっています。
    また、cronと同じ要領であらかじめ指定した日時にジョブをスケジュール設定させることも可能です。
    失敗時に通利することもできるので、定常作業であればジョブを作りこんでおけば夜間であってもコンソール画面に張り付いて作業を行う必要がなくなります。
    夜間でなくても作業日時が決まっている場合スケジュール設定していれば、万が一作業のことを忘れてしまっても安心ですね。

Rundeckのイメージ

  • Selenium
     Web ブラウザの操作を自動化するためのフレームワーク
    対応ブラウザはChromeFirefoxInternet Explorerなどがあり、それぞれのドライバーを実装することで各ブラウザに備わっている自動操作ライブラリを使用することができます。
    しかし、ブラウザのバージョンは自動更新されますがドライバーはされないためドライバー管理ソフトウェアを使用する、もしくは環境変数にてドライバーを使用している場合は、その都度ドライバーを手動インストールしてくる必要があります。
    とはいえ、何度も手でページ遷移を行うよりもSeleniumで自動化されている方が断然楽になります。

おわりに

 インフラの運用保守ではリリース作業などで深夜作業が多くなりがちです。
ですが、今回紹介した自動化ツールを使用することで、作業担当者が夜中ずっと起きてPCに張り付いている必要がなくなります。
 それだけでなく、手動実行する場合であっても基本的にツールを実行するだけであり、誰が実行しても同じ結果となります。
そのため特定のメンバーしか作業ができない。。。といった属人化の防止にもつながります。

といいことばかり言っていますが、自動化するにはそれなりに労力と時間がかかるので一筋縄ではいきません。。。

 既存環境を構成管理しようとすると、まずはどこまでの範囲を管理する必要があるのか、今までのリリース手順で自動化する場合、失敗したことを検知できるようエラーハンドリングを十分に行う必要があります。
エラーハンドリングが不十分な状態で自動化してしまうと、失敗したまま処理が進んでしまい取返しのつかないことになりかねないです。

そのためにも、しっかりと現状把握と自動化の準備を行ったうえで検証、動作確認、実装に望むことが大切です。

参考文献


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.