SAA学習-環境の自動化-AWSの環境自動化サービス
今回のテーマ:AWSの環境自動化サービス
主要サービスの公式資料
Auto Scaling: docs.aws.amazon.com
Cloud Formation: docs.aws.amazon.com
CodeCommit: docs.aws.amazon.com
CodeBuild: docs.aws.amazon.com
CodeDeploy: docs.aws.amazon.com
ECS: docs.aws.amazon.com
Elastic Beanstalk: docs.aws.amazon.com
OpsWorks: docs.aws.amazon.com
SystemManager Run Command: docs.aws.amazon.com
スコープ
5つの設計原則と11のベストプラクティスより環境の自動化のスコープの概略図は以下のようになります。
主要サービス
AWSで環境の自動化を行うサービスとして以下のものが挙げられます。
- Auto Scaling
- Cloud Formation
- Code シリーズ
- ECS
- Elastic Beanstalk
- OpsWorks
- SystemManager Run Command
目的
環境を自動化することで開発速度を高め、DevOpsとCI/CDによる開発を実現します。
クラウドファーストの時代背景
テクノロジー×ビジネスに柔軟に対応するため、クラウドファーストが必要不可欠となります。
概略図は以下のようになります。
また、リーンによる素早いサービス検討とCI/CDによる素早い開発をマイクロサービスに対し実施します。
概略図は以下のようになります。
環境自動化サービス
AWSでは、DevOpsを実現する環境自動化サービスを豊富に提供されております。
概略図は以下のようになります。
環境自動化サービスの概要は以下のようになります。
サービス名 | 概要 |
---|---|
Codeシリーズ | 開発コードのgit上のコミット・実行・デプロイを自動。 PipelineはCloudFormation/ECSのデプロイ自動化にも利用可能 |
Elastic Beanstalk | Webアプリやサービスを使い慣れたサーバーでデプロイやスケーリングをするサービス |
OpsWorks | ChefやPuppetのマネージド型インスタンスのサーバー設定・デプロイ・管理を自動できるようになる設定管理サービス |
CloudFormation | クラウド環境内のすべてのインフラストラクチャリソースを記述し、 プロビジョニングするためテンプレート化されたプロビジョニングサービス |
Amazon ECS | AWS上でDockerコンテナによる環境構築のテンプレート化するサービス DockerFile開発イメージを設定したインフラ設定をコード化 |
CloudWatch | EC2インスタンスやEBSボリューム・DBインスタンス、カスタムメトリクスなどリソースを簡単にモニタリング |
Codeシリーズ
Codeシリーズは、開発コードをgitベースのリポジトリ上で、コミット・実行・デプロイを自動化する一連のサービスとなります。 概略図は以下のようになります。
Elastic Beanstalk
Elastic Beanstalkは、Webアプリケーションの定番構成の構築・デプロイの自動化サービスとなります。
ポイントは以下のようなものがあります。
- 速く簡単にアプリをデプロイするサービス
- Java,PHP,Ruby,Python,Node,js,.Net,Docker,Goの開発言語に対応し、Webアプリを展開
- Apatch,Nginx,Passenger,IISなどのWebサービスでデプロイ
- コードをアップロードすれば、キャパシティのプロビジョニング、ロードバランシング、Auto Scalingからアプリケーションのヘルスチェックまでデプロイを自動化
Elastic Beanstalkの構成用途
Elastic Beanstalkの構成用途として、アプリケーション単位にバージョン・環境設定をコードし、保存されて環境にバージョンが展開されます。
項目としては以下のものが挙げられます。
項目 | 概要 |
---|---|
アプリケーション | ・トップレベルの論理単位でバージョン/環境/環境設定が含まれる要素 |
バージョン | ・デプロイ可能なコードでS3で管理 ・異なる環境/異なるバージョンを展開可能 |
環境 | ・各環境(Webサーバー/ワーカー)に応じて構築されるインフラ環境 ・バージョン(ソースコード)をデプロイ |
環境設定 | その環境に関連するリソースの動作を定義する設定パラメータ ・永続データの格納場所はS3やRDSなどの外部サービスを利用 |
Elastic Beanstalkのユースケース
Elastic Beanstalkのユースケースは、Webアプリケーションのデプロイを容易にすることやタスクの長いワークロード展開に利用します。 Webサーバー環境とワーカー環境では以下のようになります。
Webサーバー環境
- ELB+Auto Scalingでスケーラブルな構成をコード化し、バージョン管理を実施
- スケーラブルなWebアプリケーションを実行の実現
- 単一コンテナのDockerコンテナを実行可能
- 複数コンテナはECSを使用した環境実行が可能
ワーカー環境
- SQS+Auto Scalingでスケーラブルなバッチ処理ワークを実現
- 定期的なタスク実行基盤の作成:毎日深夜1時に動作するバックアップ処理
- ワーカーホスト内でWebアプリケーションを動作させワークロードの時間がかかる処理を実行
OpsWorks
OpsWorksは、ChefやPuppetによるインフラ設定・運用の仕組みをAWS上でマネージド型サービスとして提供してます。
AWS上で使用できるサービスは以下になります。
- OpsWorksスタック
- OpsWorks for Chef Automation
- OpsWorks for Puppet Enterprise
OpsWorks for Chef Automation
OpsWorks for Chef Automationは、Chefサーバーを作成し、継続的なデプロイメントおよびコンプライアンスチェックの完全マネージド型サーバーサービスとなります。
サービスの概要としては以下のものがあります。
- Chef Automaionは、Chefのcookbookやレシピを利用しインフラ管理を自動化するサービス
- インフラおよびアプリの継続的なデリバリーパイプラインを構成することが可能
- リソースはChefサーバーから構成内容のアップデートを取得
- オペレーション/コンプライアンス/ワークフローイベントを可視化
- AWSでChefサーバを構築でき、Chef Automate APIやChef DKなどのツールを利用
OpsWorks for Puppet Enterprise
OpsWorks for Puppet Enterpriseは、フルマネージド側Puppetマスターにより、アプリケーションのテスト/展開/運用を自動します。
サービスの概要としては以下のものがあります。
- Puppetマスターは、インフラないノードを管理し、ノード情報を保存とPuppetモジュールの中央リポジトリ
- Puppetマスターは、以下のタスクを処理する全スタック自動可
- ソフトウェア
- OS設定
- パッケージのインストール
- データベース設定
- 変更管理
- ポリシー適用
- モニタリング
- 品質保障
- モジュールは、インフラストラクチャの設定方法に関する手順を格納したPuppetコードを再利用および共有が可能とするユニット
- Puppetを使用し、EC2やオンプレミスデバイスにあたるノードの設定/デプロイ/管理方法を自動化
OpsWorksスタック
OpsWorksスタックは、スタックとアプリケーションの作成/管理のため、シンプルで柔軟な方法を提供するAWSのオリジナルサービスとなります。
サービスの概要としては以下のものがあります。
- スタック/レイヤー/インスタンス/アプリケーションと呼ばれるコンポーネントによりモデル化を実施
- コードで構成管理やオートスケーリングが可能
- Linux/Windowsサーバをサポート
- ライフライクルイベントによるタスクの自動化が可能
- OpsWorksエージェントがChef Clientのローカルモードでレシピを実行
- スタックがOpsWorksのトップエンティティである全インスタンスの構成要素をJSON形式で管理
- AWS OpsWorksスタックはChefサーバ不要
Elastic BeanstalkとOpsWorksの違い
Webアプリのデプロイに特化したElastic Beanstalkに対し、OpsWorksは様々なアプリケーションに対応する高度なインフラ環境構築が可能です。
Elastic Beanstalk
アプリケーションのデプロイ自動化
Webアプリケーションやサービスを使い慣れたサーバーにおいてデプロイとスケーリングをするためのサービスとなります。OpsWorks
インフラの設定自動化
ChefやPuppetのマネージド型インスタンスのサーバー設定/デプロイ/管理を自動化できるようになるインフラの設定管理サービスとなります。
CloudFormation
CloudFormationは、AWSクラウド環境内の全インフラリソースを記述しテンプレート化して展開する環境自動設定サービスとなります。
ポイントは以下のものがあります。
- プロビジョニングされたリソースの変更/削除が可能
- 追加リソースは通常課金のみで追加料金なし(CloudFromationのみなら)
- JSON/YAMLで記述
- クロスリージョンとクロスアカウントで管理
- 直接サポートされていないリソースや機能を利用する場合、カスタムリソースでスタック作成の一部に独自ロジックを組み込むことが可能
コンテナ
コンテナは、ホストマシンのカーネルを利用し、プロセスやユーザーなどを蚊瓜する仮想化方式となります。 イメージ図としては以下のようになります。
Docker
Dockerは、コンテナ側の仮想環境を作成/配布/実行するためのプラットフォームとなります。
ポイントは以下のものが挙げられます。
- コード化されたファイルを共有するため誰でも同じ環境構築が容易に可能
- 作成した環境を配布教諭が容易
- 環境の即時構築/削除が容易なため、CI/CDによる開発が可能
AWSのコンテサービス
AWSで使用できるコンテナサービスとして以下のものがあります。
種別 | AWSサービス名 | 概要 |
---|---|---|
レジストリ | Amazon ECR | コンテナエンジンに実行されるイメージを保管 |
コントロールプレーン | Amazon ECS/EKS | コンテナを管理するサービス |
データプレーン | AWS Fargate | コンテナが実行される環境 |
Amazon ECS
Amazon ECS(Elastic Container Service)は、Dockerコンテナをサポートする拡張性とパフォーマンスに優れたコンテナオートストレーションサービスとなります。
ポイントは以下のものが挙げられます。
- コンテナ化されたアプリをAWSにおいて簡単に実行およびスケール可能
- Fargateを利用することでコンテナのデプロイと管理サーバーのプロビジョニングや管理は不要
- あらゆる種類のコンテナ可されたアプリケーションを簡単に作成可
- Dockerコンテナの数が多くても数秒で起動可能
- ELB/VPC/IAM/ECR/CloudWatch/CloudFormation/CloudTrailなどのAWSサービスを利用可
- VPCネットワークモードで、TaskごとにENIを自動割り当てし、Security GroupをTaskごとに設定可
- VPC内の他リソースへPrivete IPで通信が可能
- Fargate起動タイプとEC2起動タイプの2種類のモード
Amazon ECR
Amazon ECR(Elastic Container Registry)は、フルマネージド型のレジストリサービスでDockerコンテナイメージを簡単に保存/管理/デプロイすることが可能です。
ポイントは以下のものが挙げられます。
- ECSとDocker CLIに統合されており、開発から本稼働までのワークフローを簡略化
- IAMによる協力な認証管理機構
- エンドポイントにアクセスできるならAWS外からでも利用可能
- ライフサイクルポリシーでイメージの自動クリーンアップ
- VPCネットワークモードでタスクごとにENIを自動割り当てし、さらにセキュリティグループをタスクごとに設定可能
Amazon EKS
Amazon EKS(Elastic Kubernetes Service)は、コンテナ化されたアプリケーションのデプロイ/管理/スケールをオープンソースのKubernetesを使用し実行するサービスとなります。
ポイントは以下のものが挙げられます。
- Kubernetesは、自動デプロイ/スケーリング/アプリ/コンテナの運用自動化のため設計されたオープンソースプラットフォーム
- Kubernetesのパートナーやコミュニティが作成した既存のプラグインやツールを使用可能
- マネージド側サービスであり、コントロールプレーンの管理不要
- ワーカーノードとマネージドコントロールプレーンとの間に、暗号化処理された安全な通信チャネルを自動的にセットアップ
- Kubernetes環境で管理されるアプリケーションと完全な互換性
AWS Fargate
AWS Fargateは、サーバーやクラスターの管理なしにコンテナを実行するECSに対応したコンピュータエンジンとなります。 起動モードは2種類あり以下のものになります。
EC2起動モード
- ECSでEC2インスタンスを起動
- コンテナアプリケーションを実行するインフラストラクチャに対し、サーバーレベルの詳細なコントロールを実行可能
- サーバークラスタを管理し、サーバーでのコンテナ配置をスケジュール可能
- サーバークラスターでのカスタマイズの幅広いオプションの利用可能
Fargate起動モード
- ECSで設置できる専用のコンピューティングエンジン(2019年12月よりEKSも対応可)
- EC2インスタンスのクラスター管理は不要
- インスタンスタイプの選択/クラスタースケジューリング管理/クラスター使用の最適化は不要
- CPUやメモリなどアプリ要件を定義すると必要なスケーリングやインフラはFargateが管理
- 秒で数万個のコンテナを起動
CodePipeline × CloudFormation の連携
CloudFromationで設定したAWS環境に対し、CodePipelineを使うことでテンプレートの変更/実行/展開を自動化できます。
CodePipeline × ECS の連携
ECSで設定したDocker環境に対し、CodePipelineを使用することでテンプレートの変更/実行/展開を自動化できます。
今回のテーマは以上です。