【AWS】OpsWorks スタック

# はじめに
タダです。
AWS認定資格の試験勉強のためにOpsWorks スタックの情報をまとめた自分用メモになります。
あくまで個人用のメモになるので、その点はご了承ください。
※違う内容書いているなどありましたらご指摘いただけると幸いです。
※随時アップデートがあれば更新していきます。
※本記事では、OpsWorks スタック中心のまとめになります。

# サービス概要
* OpsWorksはChefを使ったAWSリソース(EC2、ELB、RDSなど)やEC2上のアプリケーションの設定・管理を行うためのサービス
* Chefサーバーは不要で、OpsWorksスタックは、インスタンスのヘルスチェックをモニタリングし、自動復旧および Auto Scaling を使用して、必要な場合に新しいインスタンスをプロビジョニングする
* Chefのcookbookレシピを使って、インフラの管理を自動化、アプリケーションの継続的なインストール、構成、管理、デプロイ、スケールが可能なのがChef Automate
	* Chefサーバありきだが、管理はAWS

## OpsWorksエージェント
* OpsWorksスタックで必要
	* OpsWorksの一連のコマンドを取得し、エージェントがChef Clientのローカルモードでレシピを実行

## 利用メリット
アプリケーションのモデル化とサポート
管理作業を自動化

## CloudFormation/Elastic Beanstalkとの違い
* OpsWorksは、DevOps環境を提供することを目的におき、デプロイ、モニタリング、自動スケーリング、自動化の主要なアクティビティに対して統一された設定管理を行う
* CloudFormationはAWSリソースのプロビジョニングと管理をJSON/YAMLで行うことを目的とする
* Elastic BeanstalkはJava、.NET、PHP、Node.js、Python、Ruby、Go、Docker で開発されたウェブアプリケーションとウェブサービスをデプロイおよびスケーリングする

## 制限
デフォルトでは、最大40スタックを作成できる
最大40のレイヤー、最大40のインスタンス、最大40のアプリケーションを保持できる
　
# 専門用語
* スタック
	* OpsWorksの管理対象をまとめたコンポーネントで、属する全員インスタンスの構成を管理する
* レイヤー
	* 1つ以上の Layer を追加することにより、スタックのコンポーネントを定義する
	* レイヤーは、アプリケーションへのサービス提供やデータベースサーバーのホストのような特定の目的を果たす一連のEC2インスタンスを表す
* インスタンス
	* インスタンスのスケーリングタイプは３つある
		* 24/7インスタンス(常時稼働)
		* load-basedインスタンス
			* 負荷に対してサーバを起動することができる
			* メトリックスの閾値は次のものを定義し、インスタンスの増減をコントールできる
				* [Average CPU] – Layer の平均 CPU 使用率 (合計に対する割合)
				* [Average memory] – Layer の平均メモリ使用率 (合計に対する割合)
				* [Average load] – Layer の平均負荷
		* time-basedインスタンス
			* 時間ベースのスケーリングにより指定したスケジュールでインスタンスを起動、停止できる
			* 特定の時間または特定の曜日にレイヤーによりオンラインにされるインスタンス数を制御できる
* App
	* アプリケーショサーバにデプロイするアプリケーション
* レシピ
	* Chefレシピを実行して、アプリケーションの設定、アプリケーションのデプロイ、スクリプトの実行などを行う

## スタックコマンド
スタック全体の構成を変更・管理するためのコマンドで以下のようなものがある
実行方法はAWSマネジメントコンソールやCLI、SDKなど

* Update Custom Cookbook
	* リポジトリにある更新されたCookbookをそれぞれのインスタンスに展開する
* Execute Recipes
	* 指定したレシピを指定したインスタンス上で実行する
* Setup
	* Setupのレシピを実行する
* Configure
	* Configureのレシピを実行する
* Upgrade Operationg System
	* (Linuxのみ)Amazon Linuxを最新バージョンにアップグレードする

# ライフサイクル
OpsWorksのインスタンスで自動的に行う処理をさす 

* Setup : 新しいインスタンスが正常にブートした後に発生する
	* ex: ロードバランサーをインストール、アプリケーションサーバをインストール、データベースをインストール
* Configure : インスタンスがオンライン状態に移行したときとオンライン状態から移行した時にスタックのすべてのインスタンスで発生する
	* ex: アプリケーションサーバのIPをアップデート、DB接続先をアップデートして再起動、アプリケーションサーバのIPのACLをアップデート
* Deploy : ユーザーがアプリケーションをデプロイする時に発生する
	* ex:アプリケーションコードをアップデートして再起動
* Undeploy : アプリケーションを削除する時に発生する
	* ex:アプリケーションを削除して再起動
* Shutdown : インスタンスの終了
	* コネクションをDrainする、ログを保存、スナップショットの保存

# Opsworksと他サービスとの連携
* RDSの他にNoSQL(mongodb,Dynamo)も使える
* ELB
	* Layersのネットワークよりアタッチできる
* S3
* Elasticache
* CodePipeline
* AutoScaling
	* EC2をCloudWatchでカスタム監視を有効にしてスケールさせる
		* http://aws.typepad.com/sajp/2015/05/aws-opsworks-supports-custom-auto-scaling-and-custom-ebs-block-device-settings.html


# モニタリング
スタックは次の方法で監視可能

* CloudWatchによるスタックのインスタンスごとに詳細モニタリング
* CloudTrailによるAPI監視
* CloudWatch Logsでスタックのシステム・アプリケーション・カスタムログを監視する

# セキュリティおよびアクセス許可
* VPC内に展開可能
* AWSリソースにアクセスするためのACLやインスタンスへの接続管理はIAM(ユーザー、許可、ロール)で行う


# 参考
* [サービス概要](https://aws.amazon.com/jp/opsworks/)
* [よくある質問](https://aws.amazon.com/jp/opsworks/stacks/faqs/)
* [ドキュメント](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/welcome.html)
* [SlideShare](https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-aws-opsworks)

# 更新日時
* 2017/05/01 初回投稿