Table of Contents
はじめに
FundastA Inc.の鈴木です。
現在、AWS ソリューションアーキテクトアソシエイト試験合格に向けAWSについて勉強中です。
今回は 「環境の自動化」 について勉強したことを備忘録として、記述していきます。
環境の自動化サービス
Codeシリーズ
開発コードのGit上の操作を可能にするサービス
種類
-
Code Commit
-
ソース管理サービス
- インフラ管理が不要
- AWS版GitHubのようなもの
-
-
Code Build
-
デプロイ可能なソフトウェアパッケージを作成できる完全マネージド型ビルドサービス
-
-
Code Deploy
-
開発・テスト・本番環境へのデプロイの自動化サービス
-
Elastic Beanstalk
ウェブアプリケーションやサービスを使い慣れたサーバーでデプロイおよびスケーリングするためのサービス
特徴
-
速く簡単にアプリケーションをデプロイするサービス
-
コードをアップロードすればキャパシティのプロビジョニング、ロードバランシング、Auto-Scalingからアプリケーションのヘルスモニタリングまでデプロイを自動化
-
様々なサーバーと言語に対応している。(Go、Java、.NET、Node.js、PHP、Python、Ruby)
ユースケース
- AWSの難しいところを意識せずに素早く運用環境を用意したい
- 構築だけではなく、デプロイ運用を省力化したい
Ops Works
Chef や Puppet のマネージド型インスタンスを利用できるようになる構成管理サービス
特徴
-
Chef、Puppet
-
様々な形式のインフラへのサーバやアプリケーションの展開を容易にする環境自動化フレームワーク
-
-
CloudFormationと似ている部分あり
※Elastic Beanstalk と Ops Worksの比較
Elastic Beanstalk より Ops Works は様々なアプリケーションに対応する高度なインフラ環境構築が可能
AmazonECS
AWS 上で Docker コンテナによる環境構築のテンプレート化を実現するサービス
- Elastic Container Service の略
-
コンテナ化されたアプリを AWS において簡単に実行およびスケールできる
-
Fargate を利用することで、コンテナのデプロイと管理にサーバーのプロビジョニングや管理が不要
-
コンテナ化されたアプリケーションを簡単に作成できる
-
コンテナ数が数万であっても数秒で簡単に起動
-
様々な AWS サービスを利用可能
-
Fargate 起動タイプと EC2 起動タイプという 2 種類のモードがある。
EC2 起動モード
-
ECS で EC2 インスタンスを起動する
-
サーバーレベルの詳細なコントロールを実行可能
-
サーバークラスターを管理し、サーバーでのコンテナ配置をスケジュール可能
-
サーバークラスターでのカスタマイズの幅広いオプションが利用できる
Fargate 起動
-
EC2 インスタンスのクラスターを管理する必要がない
-
インスタンスタイプの選択、クラスタースケジューリングの管理、クラスター使用の最適化は不要
-
必要なスケーリングやインフラは Fargate が管理する。
-
秒で数万個のコンテナを移動
※Dockerを理解する
コンテナとは?
ホストマシンのカーネルを利用し、プロセスやユーザなどを隔離する仮想化方式
Dockerとは?
コンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム
-
コード化されたファイルを共有するため誰でも同じ環境構築が容易に可能
-
作成した環境を配布共有が容易
-
環境の即時構築・削除が容易なため、CI/CDによる開発ができる
EKS
フルマネージド型の Kubernetes サービス
-
フルマネージド型のレジストリサービスでDockerコンテナイメージを簡単に保存、管理、デプロイが可能
-
Dockerなどのコンテナが増えてきた際にシステム全体を効率よく管理したり、効果的に組み合わせたりする力がある。
-
複数のDockerを管理する手間が減り、コスト削減可能
Kubernetesとは
自動デプロイ、スケーリング、アプリ、コンテナの運用自動化のために設計されたオープンソースのプラットフォーム
メリット
-
サービスディスカバリー
-
ポート番号やIPアドレスを知ることができるため、どのようなアプリケーションが動いているかわかる。
-
-
自己回復機能
-
コンテナがダウンしても、間違えて削除してしまったりした場合も自動で回復できる。
-
障害性に強い
-
-
オンプレミスとクラウドで利用できる
-
自社サーバーでもクラウドでも使えるので、利用する場所を選ばない。
-
-
ストレージ管理
-
データはコンテナに記録され、有効期限が定められた状態でPod内に保存される。
-
Dockerとの違い
- Dockerはアプリケーションをコンテナの中で管理し、実行できるようにする実行環境及びツール群のこと。
- Kubernetesはクラスターで実行される。
CloudWatch
EC2 インスタンスや EBS ボリューム、DB インスタンス、またはカスタムメトリクスなどのリソースを簡単にモニタリング
特徴
-
AWS上で稼働するシステム監視サービスで、死活監視、性能監視、キャパシティ監視を実施
-
有料枠では確認内容や設定の柔軟性が充実化する
CloudWatchLogs
-
ログ管理プラットフォームサービス
-
EC2上のOS・アプリケーションのログやAWSマネジメントサービスのログを取得する。
-
ログの保存をして、可視化・分析する仕組みを提供
-
EC2インスタンスの場合はエージェント経由でログメッセージをCloudWatchエンドポイントに転送する。
-
ログデータは1日から永久に保存期間設定可能
-
AmazonS3にログをエクスポート可能
-
サブスクリプションフィルタによってログのフィルタリングパターンによって、リアルタイムにKisnesisやLambdaにログ送付するアクションを実施
CloudWatchEvents
-
AWSリソースに対するイベントをトリガーにアクションを実行
CloudFormation
全インフラリソースを記述してテンプレート化して展開する環境自動設定サービス
-
プロビジョニングされたリソースの変更削除が可能
-
Json / Yaml で記述
-
クロスリージョンとクロスアカウントで管理
-
直接サポートされていないリソースや機能を利用する場合はカスタムリソースでスタック作成の一部に独自ロジックを組み込むことが可能
ユースケース
- AWS リソースの構築を効率化したい
- 開発・テスト・本番環境で利用するインフラ標準化したい
- 毎回同じリソースやプロビジョニング設定を正確に利用したい
- ソフトウェアと同じように環境構成を管理したい
機能
- 変更セット
- スタック更新を行うときの概要が変更セットで、変更による影響度を確認するためのスタック
- ドリフト
- テンプレートによって展開した AWS リソースを展開後に変更した場合に、元テンプレートとのさぶんを検出チェック機能
- スタックセット
- 複数の AWS アカウントと複数のリージョンにスタックを作成可能
- スタック間のリソース参照機能
- 被参照テンプレートの参照値をエクスポートして値を抽出し、その後参照先のテンプレートのインポートによりリソース参照を行うことで連携したインフラ展開が可能になる。
おわりに
今回は環境の自動化について記述しました。
環境設定の自動化は様々あり、素早く環境構築をしたいなど用途によって使い分けが必要です。
コンテナサービスなどはチュートリアルなどがドキュメントや他のブログでの豊富にあるので、まず触ってみると良いかもしれません。
ご覧いただきありがとうございました。