AWS OpsWorks とは

#AWS OpsWorks とは
> AWS OpsWorks は、Puppet または Chef を使用して、クラウドエンタープライズでアプリケーションを設定および運用するための設定管理サービス

> AWS OpsWorks スタックおよび AWS OpsWorks for Chef Automate を使用して、Chef クックブックとソリューションを設定管理に使用できます。また、OpsWorks for Puppet Enterprise を使用すると AWS 内で Puppet Enterprise マスターサーバーを設定できます。Puppet は、インフラストラクチャの目的の状態の強化、およびオンデマンドタスクの自動化のための、一連のツールを提供します。

#AWS OpsWorks サービス
* AWS OpsWorks for Puppet Enterprise
* AWS OpsWorks for Chef Automate
* AWS OpsWorks スタック

##AWS OpsWorks for Puppet Enterprise

> OpsWorks for Puppet Enterprise を使用して、AWS マネージド Puppet マスターサーバーを作成できます。Puppet マスターは、インフラストラクチャ内のノードを管理し、それらのノードに関する情報を保存し、Puppet モジュールの中央リポジトリとして機能します。モジュールは、インフラストラクチャの設定方法に関する手順が格納された Puppet コードの再利用および共有が可能なユニットです。Puppet Forge からコミュニティモジュールをダウンロードすることも、Puppet 開発キットを使用して独自のカスタムモジュールを作成することもできます。その後、Puppet Code Manager を使用してデプロイを管理できます。

> OpsWorks for Puppet Enterprise では Puppet Enterprise ソフトウェアが管理されるため、ユーザーが選択した時間に自動的にサーバーをバックアップでき、サーバーでは常に最新の AWS 対応バージョンの Puppet が実行され、常に最新のセキュリティ更新プログラムが適用されています。新しい Amazon EC2 Auto Scaling グループを使用して、新しい Amazon EC2 ノードを自動的にサーバーと関連付けることができます。

##AWS OpsWorks for Chef Automate
> AWS OpsWorks for Chef Automate により、Chef Automate のプレミアム機能が含まれる AWS によって管理される Chef サーバーを作成でき、Chef DK など Chef ツールを使用してそれらを管理できるようになります。Chef サーバーは、環境内のノードを管理し、それらのノードに関する情報を保存し、Chef クックブックの中央リポジトリとして機能します。クックブックには、Chef を使用して管理する各ノードに対して Chef Infra クライアント (chef-client) エージェントによって実行されるレシピが含まれています。knife や Test Kitchen などの Chef ツールを使用して、AWS OpsWorks for Chef Automate サービスの Chef サーバー上でノードおよびクックブックを管理できます。

> Chef Automate は、継続的デプロイおよびコンプライアンスチェックのための自動化ワークフローを提供する、付属のサーバーソフトウェアパッケージです。AWS OpsWorks for Chef Automate では Amazon Elastic Compute Cloud の 1 つのインスタンスを使用して、Chef Automate、Chef Infra、Chef InSpec がインストールされて管理されます。AWS OpsWorks for Chef Automate を使用すると、AWS OpsWorks に固有の変更を行うことなく、コミュニティ作成またはカスタムの Chef クックブックを使用できます。

AWS OpsWorks for Chef Automate では 1 つのインスタンスで Chef Automate コンポーネントが管理されるため、お客様が選択した時間に自動的にサーバーをバックアップでき、サーバーでは常に最新のマイナーバージョンの Chef が実行され、常に最新のセキュリティ更新プログラムが適用されています。新しい Amazon EC2 Auto Scaling グループを使用して、新しい Amazon EC2 ノードを自動的にサーバーに関連付けることができます。


##AWS OpsWorks スタック

> クラウドベースのコンピューティングには通常、EC2 インスタンスや Amazon Relational Database Service (RDS) インスタンスなどの AWS リソースのグループが関与します。たとえば、ウェブアプリケーションでは通常、アプリケーションサーバー、データベースサーバー、ロードバランサー、その他のリソースが必要です。このインスタンスのグループは通常、スタックと呼ばれます。

オリジナルのサービスである AWS OpsWorks スタックでは、スタックとアプリケーションを作成および管理するためのシンプルで柔軟な方法が提供されています。AWS OpsWorks スタックによって、スタック内のアプリケーションをデプロイおよびモニタリングできます。レイヤーと呼ばれる、特別なグループ内のクラウドリソースの管理に役立つスタックを作成できます。レイヤーは、アプリケーションへのサービス提供やデータベースサーバーのホスティングなどの特定の目的を果たす一連の EC2 インスタンスを表します。レイヤーでは、Chef レシピに基づいて、インスタンスへのパッケージのインストール、アプリケーションのデプロイ、スクリプトの実行などのタスクが処理されます。

AWS OpsWorks for Chef Automate とは異なり、AWS OpsWorks スタックでは Chef サーバーは不要であり、Chef サーバーは作成されません。AWS OpsWorks スタックは Chef サーバーの機能の一部を実行します。AWS OpsWorks スタックは、インスタンスのヘルスチェックをモニタリングし、自動ヒーリングおよび Auto Scaling を使用して、必要な場合に新しいインスタンスのプロビジョンを実行します。シンプルなアプリケーションサーバースタックの例を次の図に示します。

##AWS OpsWorks スタック
<img width="725" alt="スクリーンショット 2020-05-26 17.13.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/6892b8a7-cd2d-69a1-9b73-e8d0a13b394a.png">

* スタック
    * スタックは AWS OpsWorks スタックの中心となるコンポーネントです。これは基本的に AWS リソース (Amazon EC2 インスタンス、Amazon RDS データベースインスタンスなど) 用のコンテナです。目的が共通で、論理的に一括して管理されます。スタックにより、ユーザーはこれらのリソースをグループで管理することができます。また、インスタンスのオペレーティングシステムや AWS リージョンなどの一部のデフォルトの構成設定もスタックにより定義されます。ユーザーの直接操作から分離する必要のあるスタックコンポーネントがある場合、そのスタックを VPC 内で実行することもできます。
* Layer
    * 1 つ以上の Layer を追加することにより、スタックのコンポーネントを定義します。Layer は、アプリケーションへのサービス提供やデータベースサーバーのホストのような特定の目的を果たす一連の Amazon EC2 インスタンスを表します。
* レシピおよびライフサイクルイベント
    * 1 つのインスタンスが複数のレイヤーに属している場合、AWS OpsWorks スタックはレイヤーごとにレシピを実行するため、たとえば、PHP アプリケーションサーバーと MySQL データベースサーバーをサポートする 1 つのインスタンスを作成できます。

* インスタンス
    * インスタンスとは、Amazon EC2 インスタンスなどの 1 つのコンピューティングリソースを意味します。インスタンスは、オペレーティングシステムやサイズなど基本的な設定を定義します。Elastic IP アドレスや Amazon EBS ボリュームなどのその他の設定は、インスタンスの Layer によって定義されます。Layer のレシピは、パッケージをインストールして設定したりアプリケーションをデプロイしたりするタスクを実行することで設定を完了します。
    * AWS OpsWorks スタックを使用してインスタンスを作成し、それをレイヤーに追加できます。インスタンスを起動すると、AWS OpsWorks スタックによって、インスタンスとそのレイヤーで指定されている設定を使用して Amazon EC2 インスタンスが起動されます。Amazon EC2 インスタンスの起動後、AWS OpsWorks スタックはインスタンスとサービス間の通信を処理するエージェントをインストールし、ライフサイクルイベントに応じて適切なレシピを実行します。
    * AWS OpsWorks スタックは、起動方法と停止方法によって区別される以下のインスタンスタイプをサポートしています。
        * 24/7 インスタンスは、ユーザーが手動で起動し、ユーザーが停止するまで実行されます。
        * 時間ベースのインスタンスは、指定した日単位や週単位のスケジュールに応じて AWS OpsWorks スタックによって実行されます。
        * 負荷ベースのインスタンスは、CPU 使用率などの負荷のメトリクスに基づいて AWS OpsWorks スタックによって自動的に起動および停止されます。

> AWS OpsWorks スタックでは、インスタンスの自動ヒーリングがサポートされています。エージェントとサービスの間の通信が途絶えると、AWS OpsWorks スタックは自動的にインスタンスの停止と再起動を行います。

##アプリケーション
> ユーザーは Amazon S3 バケットなどのリポジトリにアプリケーションおよび関連ファイルを保存します。各アプリケーションは、アプリケーションタイプを指定した App として表されます。App には、リポジトリからインスタンスにアプリケーションをデプロイするために必要な情報 (リポジトリ URL、パスワードなど) も指定します。アプリケーションをデプロイすると、AWS OpsWorks スタックによって Deploy イベントがトリガーされ、スタックのインスタンスで Deploy レシピが実行されます。

* 自動
    * インスタンスを起動すると、AWS OpsWorks スタックによってインスタンスの Deploy レシピが自動的に実行されます。
* 手動