おっさん社内SEエンジニアの勉強ブログ

勉強記録のブログとなります。

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のベストプラクティスより環境の自動化のスコープの概略図は以下のようになります。

f:id:In-houseSE:20211109160515p:plain

主要サービス

AWSで環境の自動化を行うサービスとして以下のものが挙げられます。

  • Auto Scaling
  • Cloud Formation
  • Code シリーズ
  • ECS
  • Elastic Beanstalk
  • OpsWorks
  • SystemManager Run Command

目的

環境を自動化することで開発速度を高め、DevOpsとCI/CDによる開発を実現します。

クラウドファーストの時代背景

テクノロジー×ビジネスに柔軟に対応するため、クラウドファーストが必要不可欠となります。
概略図は以下のようになります。

f:id:In-houseSE:20211109160540p:plain

また、リーンによる素早いサービス検討とCI/CDによる素早い開発をマイクロサービスに対し実施します。
概略図は以下のようになります。

f:id:In-houseSE:20211109160608p:plain

環境自動化サービス

AWSでは、DevOpsを実現する環境自動化サービスを豊富に提供されております。
概略図は以下のようになります。

f:id:In-houseSE:20211109160742p:plain

環境自動化サービスの概要は以下のようになります。

サービス名 概要
Codeシリーズ 開発コードのgit上のコミット・実行・デプロイを自動。
PipelineはCloudFormation/ECSのデプロイ自動化にも利用可能
Elastic Beanstalk Webアプリやサービスを使い慣れたサーバーでデプロイやスケーリングをするサービス
OpsWorks ChefやPuppetのマネージド型インスタンスのサーバー設定・デプロイ・管理を自動できるようになる設定管理サービス
CloudFormation クラウド環境内のすべてのインフラストラクチャリソースを記述し、
プロビジョニングするためテンプレート化されたプロビジョニングサービス
Amazon ECS AWS上でDockerコンテナによる環境構築のテンプレート化するサービス
DockerFile開発イメージを設定したインフラ設定をコード化
CloudWatch EC2インスタンスやEBSボリューム・DBインスタンス、カスタムメトリクスなどリソースを簡単にモニタリング

Codeシリーズ

Codeシリーズは、開発コードをgitベースのリポジトリ上で、コミット・実行・デプロイを自動化する一連のサービスとなります。 概略図は以下のようになります。

f:id:In-houseSE:20211109160805p:plain

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で記述
  • クロスリージョンとクロスアカウントで管理
  • 直接サポートされていないリソースや機能を利用する場合、カスタムリソースでスタック作成の一部に独自ロジックを組み込むことが可能

コンテナ

コンテナは、ホストマシンのカーネルを利用し、プロセスやユーザーなどを蚊瓜する仮想化方式となります。 イメージ図としては以下のようになります。

f:id:In-houseSE:20211109160914p:plain

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を使用することでテンプレートの変更/実行/展開を自動化できます。

今回のテーマは以上です。