環境の自動化について

イノベーションノウハウ

テクノロジーの進化とビジネス変化のスピードに対応するため、柔軟で素早いサービス開発が求めれる

◾️テクノロジー×ビジネススピードへの対応  1、テクノロジー進化のスピードが加速  2、テクノロジーを活用したビジネスの展開スピードが加速  3、これまでより短期に開発可能かつ変更に強いシステムの必要性

◾️多様な顧客ニーズへの対応  1、多様な顧客ニーズに柔軟かつスピーディに対応する必要性  2、デザイン思考 / リーンスタートアップなどの顧客中心手法が主流に  3、本当に使うシステムだけを開発・運用する必要性

ビジネスに即応できる開発手法・技術の導入

AWSの環境自動化サービス

システムの安全性・整合性及び組織の効率性を改善するため主導プロセスを自動化する

・関連する主要サービス AutoScaling、CloudFormation、Codeシリーズ、ECS、ElasticBeanstalk、OpsWorks、EC2 Run Command

環境の自動化

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

素早いサービス開発

リーンによる素早いサービス検討とCI / CDによる素早い開発をマイクロサービスに対して実施する

・Codeシリーズ  開発コードのGit上のコミット・実行・デプロイを自動化する  PipelineはCloudFormationとECSのデプロイ自動化にも利用可能

・Elastic Beanstalk  ウェブアプリケーションやサービスを使いなれたサーバーでデプロイおよびスケーリングするためのサービス

・OpsWorks  ChefやPuppetのマネージド型インスタンスのサーバーの設定、デプロイ、管理を自動化できるようになる設定管理サービス

・CloudFormation  クラウド環境内の全てのインフラストラクチャリソースを記述してプロビジョニングするためのテンプレート化されたプロビジョニングサービス

Amazon ECS  AWS上でDockerコンテナによる環境構築のテンプレート化を実現するサービス  Dockerfileに環境イメージを設定しインフラ設定をコード化する

・CloudWatch  EC2インスタンスやEBSボリューム、DBインスタンスまたはカスタムメトリクスなどのリソースを簡単にモニタリングできる

Codeシリーズ

開発コードのGitベースのリポジトリ上でのコミット・実行・デプロイを自動化する一連のサービス

Elastic Beanstalk

WEBアプリケーションの定番構成の構築・デプロイの自動化サービス ・早く簡単にアプリケーションをデプロイするサービス ・JavaPHPRubyPython、Node.js、NET、Docker、Goに対応してWEBアプリケーションを展開できる ・Apache、Nginx、Passenger、IISなど使いなれたサーバーでデプロイおよびスケーリングが可能 ・コードをアップロードすればキャパシティのプロビジョニング、ロードバランシング、AutoScalingからアプリケーションのヘルスモニタリングまでデプロイを自動化できる

Elastic Beanstalkの構成要素

アプリケーションという単位にバージョン・環境設定がコードとして保持され、環境にバージョンが展開される

◾️アプリケーション  ・トップレベルの論理単位でバージョンや環境や環境設定が含まれている入れ物

◾️バージョン  ・デプロイ可能なコードでS3で管理する  ・異なる環境 / 異なるバージョンを展開可能  ・バージョンレポジトリーに保持する

◾️環境  ・各環境(ウェブサーバー / ワーカー)に応じて構築されるインフラ環境  ・バージョン(ソースコード)をデプロイ

◾️環境設定  ・その環境に関連するリソースの動作を定義する設定パラメータ  ・永続データの格納場所はS3やRDSなどの外部サービスを利用する

ユースケース

WEBアプリケーションのデプロイを容易にすることや、タスク時間の長いワークロードの展開に利用する

◾️ウェブサーバー環境 ・ELB+Auto Scalingでスケーラブルな構成をコード化してバージョンとすることで、スケーラブルなウェブアプリケーションを実行できる ・単一コンテナのDockerコンテナを実行可能 ・複数コンテナはECSを使用した環境実行が可能

◾️ワーカー環境 ・SQS+AutoScalingでスケーラブルなバッチ処理ワークを実現 ・定期的なタスク実行基盤の作成:毎日深夜1時に動作するバックアップ処理 ・ワーカーホスト内でWebアプリケーションを動作させ、ワークロードの時間がかかる処理を実行させる

OpsWorks

OpsWorksはChefまたはPuppetを使用してアプリケーションを設定および運用するための設定管理サービス

・OpsWorksスタック ・OpsWorks for Chef Automation ・OpsWorks for Puppet Enterprise

Chefは様々な形式のインフラへのサーバーやアプリケーションの展開を容易にする環境自動化フレームワーク

OpsWorksはこのChefやPuppetによるインフラ設定・運用の仕組みをAWS上でマネージド型サービスとして提供している

OpsWorks for Chef Automation

Chefサーバーを作成し、継続的デプロイメントおよびコンプライアンスチェックのための完全マネージド型サーバーサービス

・ChefAutomationとは、Chefのcookbookやレシピを利用してインフラ管理を自動化するサービス ・インフラおよびアプリの継続的なデリバリーパイプラインを構成することが可能 ・リソースはChefサーバーから構成内容のアップデートを取得する ・オペレーション / コンプライアンス / ワークフローイベントを可視化することが可能 ・AWSでChefサーバを構成することができ、Chef Automate APIやChef DKなどのツールを利用することができる

OpsWorks for Puppet Enterprise

フルマネージド型Puppetマスターにより、アプリケーションのテスト・展開・運用を自動化する

・Puppetマスターは、インフラ内のノードを管理し、ノード情報を保存し、Puppetモジュールの中央リポジトリとして機能する ・PuppetマスターはソフトウェアおよびOSの設定・パッケージのインストール、データベースの設定、変更管理、ポリシー適用、モニタリングおよび品質保証証等のタスクを処理する全スタックを自動化することができる ・モジュールはインフラストラクチャの設定方法に関する手順が格納されたPuppetコードの再利用および共有が可能とするユニット ・Puppetを使用してEC2インスタンスやオンプレミスデバイスにあるノードの設定、デプロイ、管理方法を自動化できる

OpsWorksスタック

スタックとアプリケーションの作成および管理のためのシンプルで柔軟な方法を提供するオリジナルサービス ・スタック / レイヤー / インスタンス / アプリケーションと呼ばれるコンポーネントによりモデル化を実施する ・コードで構成管理やオートスケーリングが可能 ・Linux / Windouwsサーバーをサポート ・ライフサイクルイベントによるタスクの自動化が可能 ・OpsWorksエージェントがChef Clientのローカルモードでレシピを実行する ・スタックがOpsWorksのトップエンティティである全インスタンスの構成情報をJSON形式で管理している ・AWSOpsWorksスタックではChefサーバーは不要

Elastic Beanstalk VS OpsWorks

WEBアプリのデプロイに特化したElastic Beanstalkに対してOpsWorksは様々なアプリケーションに対応する高度なインフラ環境構築が可能

◾️Elastic Beanstalk  アプリケーションの自動デプロイ化   ウェブアプリケーションに置いてサービスを使いなれたサーバーにおいてデプロイとスケーリングするためのサービス

◾️OpsWorks  インフラの設定自動化   ChefやPuppetのマネージド型インスタンスのサーバーの設定・デプロイ・管理を自動化できるようになるインフラの設定管理サービス

CloudFormation

AWSクラウド環境内の全インフラリソースを記述してテンプレート化して展開する環境自動設定サービス

・プロビジョニングされたリソースの変更、削除が可能 ・追加リソースへの通常課金のみで追加料金なし ・JSON / YAMLで記述する ・クロスリージョンとクロスアカウントで管理 ・直接サポートされていないリソースや機能を利用する場合はカスタムリソースでスタック作成の一部に独自ロジックを組み込むことが可能

コンテナ

コンテナはホストマシンのカーネルを利用し、プロセスやユーザーなどを隔離する仮想化方式

Docker

Dockerはコンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム

Amazonのコンテナサービス

◾️レジストリ  コンテナエンジンに実行されるイメージが保管される場所  Amazon ECR

◾️コントロールプレーン  コンテナを管理するサービス  Amazon ECS  Amazon EKS

◾️データプレーン  コンテナが実行される環境  AWS Fargate

Elastic Container Service(ECS)

Dockerコンテナをサポートする拡張性とパフォーマンスに優れたコンテナオーケストレーションサービス

・コンテナ化されたアプリをAWSにおいて簡単に実行およびスケールできる ・Fargateを利用することでコンテナのデプロイと管理にサーバーのプロビジョニングや管理は不要 ・あらゆる種類のコンテナ化されたアプリケーションを簡単に作成できる ・Dockerコンテナの数が数十であっても数秒で簡単に起動 ・ELB / VPC / IAM / ECR / CloudWatch / CloudTrailなどのAWSサービスを利用可能 ・VPCネットワークモードでTask毎にENIを自動割り当てSecurity GroupをTask毎に設定可能  VPC内の他のリソースへPrivate IPで通信が可能 ・Fargate起動タイプとEC2起動タイプという2種類のモードがある

Elastic Container Registry(ECR)

フルマネージド型のレジストリサービスでDockerコンテナイメージを簡単に保管、管理、デプロイが可能

・ECSとDockerCLIに統合されており、開発から本番稼働までのワークフローを簡略化する ・IAMによる強力な認証管理機構 ・エンドポイントにアクセスできるならAWS外からでも利用可能 ・ライフサイクルポリシーでイメージの自動クリーンアップできる ・VPCネットワークモードでタスク毎にENIを自動割り当てして、さらにセキュリティグループをタスク毎に設定可能

Amazon Elastic Kubernetes Service(EKS)

コンテナ化されたアプリケーションのデプロイ、管理、スケールをオープンソースkubernetesを使って実行するサービス

Kubernetesは自動デプロイ、スケーリング、アプリ・コンテナの運用自動化のために設計されたオープンソースのプラットフォーム ・Kubernetesのパートナーやコミュニティが作成した既存のプラグインやツールを使用可能 ・マネージド型サービスでありコントロールプレーンの管理が不要 ・ワーカーノードとマネージドコントロールプレーンとの間に暗号化処理された安全な通信チャネルを自動的にセットアップする ・Kubernetes環境で管理されるアプリケーションとの安全な互換性がある

AWS Fargate

サーバーやクラスターの管理なしにコンテナを実行するECSに対応したコンピューティングエンジン

◾️EC2起動モード  ・ECSでEC2インスタンスを起動する  ・コンテナアプリケーションを実行するインフラストラクチャーに対して、サーバーレベルの詳細なコントロールを実行可能  ・サーバークラスターを管理し、サーバーでのコンテナ配置をスケジュール可能  ・サーバークラスターでのカスタマイズの幅広いオプションが利用できる

◾️Fargate起動モード  ・ECSで設置できる専用のコンピューティングエンジン  ・EC2インスタンスクラスターを管理する必要がない  ・インスタンスタイプの選択、クラスタースケジューリングの管理、クラスター使用の最適化は不要  ・CPU、メモリなどのアプリ要件を定義すると必要なスケーリングやインフラはFargateが管理する  ・秒で数万個のコンテナを起動

CodePipeline × CloudFormation

CloudFormationで設定したAWS環境に対してCodePipelineを使うことでテンプレートの変更・実行・展開を自動化する

CodePipeline × ECS

ECSで設定したDocker環境に対してCodePiplineを使うことでテンプレートの変更・実行・展開を自動化する

CloudFormationの概要

AWSクラウド環境内の全インフラリソースを記述してテンプレート化して展開する環境自動設定サービス ・プロビジョンニングされたリソースの変更、削除が可能 ・JSON / YAMLで記述する ・クロスリージョンとクロスアカウントで管理 ・直接サポートされていないリソースや機能を利用する場合はカスタムリソースでスタック作成の一部に独自ロジックを組み込むことが可能

環境構築を正確に実施しかつ効率的に展開したい時にCloudFormationを活用できる

AWSリソースの構築を効率化したい ・開発、テスト、本番環境で利用するインフラを標準化したい ・毎回同じリソースやプロビジョンニング設定を正確に利用したい ・ソフトウェアと同じように環境構成を管理したい

CloudFormationの構成

テンプレートで定義された内容を読み込んでAWSリソースの集合であるスタックを作成する

CloudFormationの機能

CloudFormationテンプレート自体を管理・便利に使うための機能を提供

◾️変更セット  スタックの更新を行う時の概要が変更セットで変更による影響度を確認するためのスタック  スタック変更は直接更新と変更セットの実行で可能

◾️ドリフト  テンプレートによって展開したAWSリソースを展開後に変更した場合に、元テンプレートとの差分を検出するチェック機能

◾️スタックセット  複数のAWSアカウントと複数のリージョンに対してスタックを作成できる機能

◾️スタック間のリソース参照機能  被参照テンプレートの参照値をエクスポートして値を抽出し、その後参照先のテンプレートのインポートによりリソース参照を行うことで連携したインフラ展開が可能になる機能