AWS CodeDeployでアプリケーションの更新を自動化
目次
AWS CodeDeployとは
アプリケーションやWebサイトに対し、機能をアップデートしたり、セキュリティ上の脆弱性を改善することを目的とし、新しいコードなどを適用することをデプロイといいます。デプロイの作業は、時に誤ったコードをアップしたり、手順を誤ったりすることで、本番環境のサービスが止まってしまうことがあります。それを防ぐために、手順を自動することで手作業を極力排除して安全にデプロイを行う必要があります。
AWS CodeDeployは、Amazon Web Services(AWS)が提供するサービスの一つで、ソフトウェアのデプロイを支援する機能を持っています。CodeDeployを利用することで、ソフトウェアの新しいバージョンをAmazon EC2インスタンスやオンプレミスサーバーに簡単に、そして安全にデプロイすることができます。手動によるデプロイメント作業を自動化することで、エラーを減らし、効率的な運用を実現します。
本記事では、CodeDeployの機能や利点について解説していきます。
AWS CodeDeployの利点
AWS CodeDeployを導入することにより、以下のような利点があります。
運用効率の向上
デプロイを行う手順のことをデプロイメントプロセスといいますが、デプロイメントプロセスには様々なステップがあります。具体的にはプログラムコードを実行可能な形式にするビルドや、新しいアプリケーションが正しく動作することを確認するためのテストです。CodeDeployではこれらのプロセスの自動化により、人的リソースを削減し、運用効率を大幅に向上させることができます。
安定性の向上
デプロイを手動で行うと、コマンドの実行ミスやテスト結果の見落としにより、エラーが発生するケースがあります。CodeDeployでは極力自動でデプロイメントプロセスを実行することにより、手動デプロイによるヒューマンエラーを削減し、安定した運用を実現します。また、万が一エラーが発生した場合にも、アプリケーションを前のバージョンに戻すロールバック機能により、迅速にリカバリー対応が可能です。
多様な環境への対応
CodeDeployはAWSのリソースだけでなく、オンプレミスのサーバーにもデプロイする機能を持っています。したがって、オンプレミスとクラウドにまたがるハイブリッド構成のアプリケーションにも柔軟に対応します。
AWS CODEシリーズを活用して柔軟な開発環境を実現するスタイルズのDevOps(CI/CD)導入支援サービスはこちら→
AWS CodeDeploy for オンプレミス/EC2
AWS CodeDeployは、オンプレミスとEC2インスタンスの両方に対してデプロイメントを行うことが可能です。これにより、既存のインフラストラクチャを活用しながらクラウドへの移行をスムーズに進めることができます。
オンプレミスでの利用
オンプレミス環境においても、CodeDeployエージェントをインストールすることで、AWSのクラウドと同様にデプロイを自動化できます。既存のサーバーインフラを最大限に活用しつつ、クラウドへの部分的な移行や災害対策などに役立てることができます。
EC2での利用
EC2インスタンスに対するデプロイメントは、AWS環境内で完結するため、ネットワークの遅延やセキュリティリスクを最小限に抑えることができます。また、AutoScalingの機能を利用することで、負荷に応じたスケーリングと連動したデプロイが可能です。
デプロイパターン
AWS CodeDeployには、いくつかのデプロイパターンが用意されており、これにより柔軟なデプロイ戦略を立てることができます。主なデプロイパターンとしては以下のものがあります。
- インプレースデプロイ…現在のインスタンス上で直接新しいバージョンのソフトウェアをデプロイする方法です。リソースの消費が少なく、迅速にデプロイできる一方で、停止時間が発生する可能性があります。
- Blue/Greenデプロイ…新しいバージョンを新しい環境にデプロイし、テストが完了した後にトラフィックを新環境に切り替える手法です。旧バージョンの環境(Green)を保持し続けるため、問題が発生した際のロールバックが容易です。一方で、新しい環境と古い環境が同時に存在することになるため、インプレースデプロイの方式よりも多少コストが高くなる点に注意が必要です。
デプロイメントフック
デプロイメントフックは、デプロイプロセス中に特定のタイミングでカスタムスクリプトを実行するための機能です。これにより、デプロイメント前後に必要な処理を自動化し、プロセス全体をより柔軟に制御することができます。たとえば、デプロイ前にバックアップを取ったり、デプロイ後にシステムをテストするスクリプトを実行することが可能です。EC2の場合はアプリケーションの停止(ELBがある場合は通信のブロック)→インストール→アプリケーションの再開→ステータスチェック→トラフィックの切り替え、といったそれぞれの順序にデプロイメントフックを設定可能です。
AWS CodeDeploy for ECS
AWS CodeDeployは、Amazon Elastic Container Service(ECS)を利用するアプリケーションにも対応しています。ECSはコンテナ管理サービスであり、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを容易に行うことができます。EC2やオンプレミス向けのCodeDeployと異なり、エージェントのインストールが不要です。
デプロイパターン
基本的にはBlue/Greenのみがサポートされていますが、Blue/Greenの中からでも複数のオプションを採用することができます。
- Canaryデプロイ…新しいバージョンを一部のコンテナにデプロイし、問題がないことを確認してから、すべてのコンテナに展開する手法です。これにより、新しいバージョンの安定性を確認しつつ、安全に全体へのデプロイを進められます。
- Linearデプロイ…一定時間ごとに一定割合のコンテナに新しいバージョンをデプロイしていく方法です。段階的な更新を行うことで、負荷を管理しつつ安全にデプロイを行います。
- All-at-onceデプロイ: すべてのコンテナに同時に新しいバージョンをデプロイします。迅速なデプロイが可能ですが、リスクが高いことに注意が必要です。
デプロイメントフック
EC2と同様に任意のスクリプトを実行できるデプロイメントフックが利用可能ですが、EC2の場合と比較して採用できるオプションが少ないことが特徴です。具体的にはステータスチェックと、アプリケーションの起動・停止の処理がありません。
AWS CodeDeploy for Lambda
AWS CodeDeployは、AWS Lambda関数のデプロイメントにも対応しています。Lambdaは、サーバーレスコンピューティング環境を提供し、インフラ管理の負担を減らしつつ、コードに集中することが可能です。こちらもECS同様エージェントが不要になっています。
デプロイパターン
ECSと同様に、デプロイパターンはBlue/Greenのみがサポートされています。また、Blue/Greenデプロイにおいて選択できるオプションもCanary、Linear、All at Onceとなっています。
デプロイメントフックについて言及
AWS CodeDeploy for Lambdaにおいてもデプロイメントフックは利用可能です。ECSの場合と比較してさらにインストールの処理が選択できなくなっており、トラフィックの切り替えに関する順序においてデプロイメントフックが設定可能です。
AWS CODEシリーズを活用して柔軟な開発環境を実現するスタイルズのDevOps(CI/CD)導入支援サービスはこちら→
まとめ
アプリケーションに対するデプロイ作業は運用の上でマストである一方で、多少のリスクが存在する行為となっています。また、慎重に行うためにはダブルチェックなど、工数もかかってしまいます。AWS CodeDeployを利用することで、効率よく、安全にAWSやオンプレミスにおいて稼働するアプリケーションに対してデプロイ作業を実施することができます。EC2やECSなどのサービスに対して、要件に応じ様々なデプロイに関するオプションが選択可能になっています。安全なシステム運用のために、ぜひ利用してみてください。