はじめに
こんにちは、技術5課の孔です。前回書いた「AWSでDevOpsを実現する ~ DevOpsとは ~」に続き、第2篇となります。DevOpsが何なのかもう知ってるよ!って方はこちらから読んでいただいても全然問題ないです。
前回のブログでは、DevOpsの概要と登場背景、そしてDevOpsを実現するための基本戦略をご説明させていただきました。今回のブログでは前回のブログで説明したそれぞれの基本戦略を、AWSのどのサービスを使って組み合わせることで実現できるのかを見ていきたいと思います。よろしくおねがいします。
Infrastructure as code
まず1つ目のDevOps実現戦略となる、「Infrastructure as code」です。インフラをコードとして管理することで環境の再現性を高め、安定したリリースを実現するための戦略となります。Infrastructure as codeを実現するため、以下の4つのサービスをAWSは提供しています。
- CloudFormation(インフラのプロビジョニング)
- OpsWorks(Chefを使った設定管理)
- System manager(設定管理)
- Config(ポリシー管理)
それでは、それぞれのサービスでどのようにInfrastructure as code戦略を実現しているかを確認してみましょう。
CloudFormation
CloudFormationは、インフラを定義するテンプレートを作成し、テンプレートからインフラをプロビジョニング・アップデートするサービスとなります。CloudFormationのメリットは、インフラをコードとして定義するため、手動でリソースをプロビジョニングする際に起こりうるミスを事前に防止でき、よって安定して一貫したインフラ環境を提供することができるということです。
今回は簡単に説明いたしましたが、CloudFormationはとても奥が深いサービスなので、ぜひ掘り下げてみてください。
OpsWorks
OpsWorksは、PuppetもしくはChefを使ってアプリケーションの設定を管理できるサービスとなります。もともとアプリケーションの環境をPuppetやChefで管理していたのであれば、AWSで互換性のあるこちらのOpsWorksを使うことで既存の環境と同じ環境を設定することができます。
System manager
System managerは、いろいろな機能が集まりすぎてて一言で表すのがとてもむずかしいですが、名前通りシステムを制御するためのサービスとなります。具体的には、例えばOSのパッチを管理したり、システムを構成するために必要なパラメータを管理したりする機能を提供しています。このSystem managerを使用することで、一貫したパッチを適用したりすることで、一貫したシステムの制御を行うことが可能になります。
Config
Configは、構成変更を管理するサービスとなります。一貫した環境を提供して安定したサービス提供のために、インフラの構成を管理して影響を与えそうな変更を事前にポリシーを定義することで未然に防止することが可能になったり、今までのリソースの変更履歴を追跡することも可能です。
・・・
以上の4つのサービスを使用することで、一貫した環境を提供でき、安定したサービス提供を実現できます。インフラのプロビジョニングや構成管理をコードで行うことで、人的ミスを減らし、再現性のある環境を構築するためにAWSではこのようなサービスを提供しています。
CI/CD
2つ目のDevOps実現戦略は、CI/CDとなります。コードをアップデートしたら自動的にビルド行われ、テストもされて、デプロイまで自動的に行われることで一貫して品質の良いコードをアップデートしていき、バグの少ないサービスを提供できるようになります。これによって迅速に、安定したサービスを提供することが可能になります。AWSでCI/CDを実現するために以下のサービスが使用されています
- CodeCommit(gitリポジトリサービス)
- CodeBuild(ビルドおよびテスト)
- CodeDeploy(デプロイの自動化)
- CodePipeline(CI/CDの自動化)
- CodeStar(CI/CDのプロジェクト管理)
それでは、一個ずつサービスを見てみましょう。
CodeCommit
CodeCommitは、AWSで提供しているgitリポジトリサービスとなります。AWS上にリポジトリを作成してコードのバージョン管理をAWSで行えるようになります。また、CodePipelineを作成する際にPipelineが走るイベントトリガーとして、CodeCommitのコミットを指定できるため、プログラマーはコードだけ書いてCodeCommitにpushすれば自動的にCI/CDが動けるように構築できるため、CodePipelineを構築するためのgitリポジトリとしてCodeCommitを使うとコードのバージョン管理もしながらCI/CDのPipelineを作成することも可能です。githubとの連携も可能であり、拡張性もあるサービスとなります。
CodeBuild
CodeBuildは、ソースコードをコンパイルし、テストを実行してデプロイ可能なパッケージを生成するための一連の処理をしてくれるサービスとなります。CodeBuildを使うと自動でプロビジョニングされたサーバが立ち上がり、コードのビルドをやってくれるので別途ビルド用のサーバを管理しなくても良くなります。また、ビルドの手順やテストをコードで管理するため、一貫した品質のパッケージを生成することが可能となるので、迅速なデプロイを実現できます。
CodeDeploy
CodeDeployは、ビルドされたソフトウェアをEC2インスタンスやオンプレサーバ、Lambda、またはECSにデプロイしてくれるサービスとなります。デプロイする手順をコードで管理し、それに従って自動的にデプロイを行なってくれるため、一貫したデプロイを実現する事が可能です。
CodePipeline
CodePipelineは、CI/CDのPipelineを作るサービスとなります。上記で説明したCodeCommit、CodeBuild、CodeDeployを手順化し、それぞれのステージを順に沿って自動的に行ってくれるため、一貫したビルド・デプロイ作業を実現します。これで開発者はソースコードを書いてリポジトリにpushするだけでサービスがデプロイされて自動的にリリースされていくので、コードを書くことに専念できます。結果的により迅速に開発を行い、安定したデプロイを実現することができるため、よりスピーディな開発と安定したリリースを実現することができます。
CodeStar
CodeStarは、コミットからデプロイを管理できるプロジェクトを数クリックで作成し、プロジェクトを一括管理できるダッシュボードを提供するサービスとなります。AWSが使い慣れてない方であってもこちらのCodeStarを使って迅速にプロジェクトを始めることができ、簡単にプロジェクトを管理することができるようになります。
・・・
前回の記事で、CI/CDがDevOpsの核心戦略となる理由として、「リリースのスピードと安定性を上げるため」と話しました。今紹介したAWSのサービスを見てみるとこの「リリースのスピードと安定性を上げる」ことに注目してサービスを作っていることが伝わってくるのではないかと思います。
自動化
3つ目のDevOps戦略は自動化となります。自動化とは、なるべく手動で行うプロセスをなくすことを意味します。一貫した環境や作業を行うことで安定したサービスを提供することができるため、「迅速開発・安定したサービス・予測可能性」を重視するDevOpsでは自動化が必須となります。自動化を代表するAWSのサービスは
- ElasticBeanstalk
があります。
ElasticBeanstalk
ElasticBeanstalkは、開発において一般的に使われるインフラのスタックを迅速にデプロイできるサービスとなります。ランタイムを指定するだけで、それに最適化されている事前に定義されたインフラを数クリックで立ち上げることが可能になります。また、より詳細な設定を行い時には構成ファイルを作成することによって一貫した環境をプロビジョニングすることも可能です。
より詳細なインフラを構築するのであればCloudFormationを使ったり、OpsWorksを使う必要がありますが、ElasticBeanstalkなどを使って定番の一貫した環境を自動的に構築することで迅速にインフラを構築することも可能です。
モニタリング
4つ目のDevOps戦略はモニタリングとなります。開発(Dev)でなく、運用(Ops)も行うために必ず必要となるのがモニタリングになります。DevとOpsを一つのチームで行うために、自分たちのインフラからサービスをモニタリングする必要があります。AWSで提供しているモニタリングのサービスは
- CloudWatch
- X-ray
- CloudTrail
があります。
CloudWatch
CloudWatchは、AWS上で動く全てのリソースと、そのリソース上で動くサービスのモニタリングを担当します。モニタリングだけでなく、それをもとにアラートをあげたり、アラートを基に事前に定義した処理をするなどの機能もあります。リソースやサービスのログを一元化したサービスでモニタリングすることで効率よくサービスの現状を把握することができ、決まった障害に対して自動化された
X-ray
X-rayは、マイクロアーキテクチャで構築されたサービスにおいて、各サービス間の通信を分析し、デバックするに役立つサービスとなります。サービス間でやり取りされる通信を視覚化することで、現状を直感性のある形で見せてくれます。これによって数千個のマイクロサービスで構築された複雑なサービスであっても素早く根本的なバグを発見することができ、俊敏に障害に対応する事ができるようになります。
CloudTrail
CloudTrailは、誰がどのリソースに対してどのような操作をしたのかを追跡できるサービスとなります。コミュニケーションの透明性が求められるDevOpsでは、誰がいつリソースを操作したのかを明確に知ることがとても大事です。AWSのサービスは全てAPIコールで動作するため、そのAPIコールを記録するCloudTrailを使うことでモニタリングおよびガバナンスにも対応できます。
セキュリテイ
5つ目のDevOps戦略はセキュリティとなります。特にDevOpsチームでなかったとしてもセキュリティはどのチームにおいても最優先ではありますね。AWSでのセキュリティサービスはたくさんありますが、今回は代表的なサービスであるIAMを見てみましょう。
IAM
IAMは、AWS利用者・リソースがAWS上でどのような行動ができるのか権限を定めることができるサービスとなります。また、ユーザーのアクセスキーといったcredentialをまとめて管理することができます。アクセス権に関するあらゆる機能を提供しているため、AWSを使うのであればこのIAMを必ずしっかり理解して、起こりうるセキュリティ事故を未然に防ぎましょう。
最後に
いかがでしょうか。DevOpsを実現するためにAWSで提供しているサービスがとても多かったため、一つ一つ詳細までは見れませんでしたが、各サービスがしっかりDevOpsの核心戦略を実現するために作られていることが伝わったのではないかと思います。
よりAWSでDevOpsを実現することに興味のある方は、ぜひ以下の資料も読んでみてください。前編のブログと今回のブログは以下の資料を参考にし、少し肉付けしたものとなります。
それでは、長いブログを読んでくださってありがとうございました!