

# アーキテクチャ
<a name="architecture"></a>

このセクションでは、リファレンス実装アーキテクチャ図、[AWS Well-Architected の設計上の考慮事項](aws-well-architected-design-considerations.md)、[セキュリティコンポーネント](security-1.md)、[スケジューラ設定](scheduler-configuration-table.md)、および[このソリューションで使用される AWS サービス](aws-services-used-in-this-solution.md)について説明します。

## アーキテクチャ図
<a name="architecture-diagram"></a>

このソリューションをデプロイすると、AWS アカウント に次のコンポーネントがデプロイされます。

 **AWS クラウド上の Instance Scheduler** 

![InstanceScheduler アーキテクチャ](http://docs.aws.amazon.com/ja_jp/solutions/latest/instance-scheduler-on-aws/images/InstanceScheduler-architecture.png)


1. [Amazon EventBridge ルール](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)は、設定可能な間隔 (デフォルトは 5 分ごと) でオーケストレーション Lambda 関数をトリガーします。

1. EventBridge ルールは、DynamoDB 設定テーブルをクエリして[アクティブなスケジューリングターゲット](cost.md#calculating-scheduling-targets)を識別する [AWS Lambda](https://aws.amazon.com/lambda/) オーケストレーション関数を呼び出します。次に、オーケストレーターはアクティブなターゲットごとに並列スケジューリング Lambda 関数を呼び出します。

1. スケジュール定義と期間は [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 設定テーブルに保存されます。このテーブルでは、インスタンスの起動と停止のタイミングを制御するために、任意の数のスケジュールと期間を定義できます。

1. DynamoDB レジストリテーブルは、すべてのマネージドリソースを自動的に追跡します。リソースが[スケジューリング用にタグ付け](operator-guide.md#tag-instances-for-scheduling)されると、AWS タグ付けイベントに応じてこのテーブルに登録されます。

1. 各スケジューリング Lambda 関数は、タグ付けされたリソースを記述し、現在の時刻に対してスケジュールを評価し、適切な開始または停止アクションを実行します。

   1. EC2 インスタンスの場合、容量不足のために開始オペレーションが失敗した場合、ソリューションは、開始オペレーションを再試行する前にインスタンスを[代替インスタンスタイプ](specifying-alternate-instance-types-for-ec2.md)にサイズ変更するよう設定できます。

1. スケジュール管理は、[DynamoDB コンソール](schedule-reference.md)、[スケジューラ CLI ツール](scheduler-cli.md)、または [AWS CloudFormation Custom リソース](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html)から利用できます。このソリューションは、いくつかのサンプルスケジュールを事前設定してデプロイします。

1. クロスアカウントデプロイでは、スポークアカウントが自動的にハブアカウントに自己登録するハブスポークアーキテクチャを使用します。スポークスタックはハブスタックと同じリージョンにデプロイする必要があり、ハブスタックまたは同じ [AWS Organization](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) のメンバーによって事前に承認されている必要があります。

1. このソリューションは、ハブアカウント (グローバルイベント) とスポークアカウント (リージョンごとのローカルイベント) の EventBridge バスに、[スケジューリングイベントと登録イベント](monitor-the-solution.md#monitoring-eventbridge-events)を発行します。

**注記**  
AWS CloudFormation のリソースは、[(AWS CDK)](https://aws.amazon.com/cdk/) のコンストラクトで作成されています。

このソリューションで使用されるすべての Lambda 関数は、リソースの権限要件として AWS IAM を利用し、[Amazon Simple Notiﬁcation Service](https://aws.amazon.com/sns/) (Amazon SNS トピック) と DynamoDB テーブルの暗号化には AWS KMS を活用します。

ソリューションはスケジューリング間隔を実行するたびに、適切にタグ付けされた各インスタンスの現在の状態を、関連するスケジュールのターゲットの状態 (インスタンスタグのスケジュール内の 1 つ以上の[期間](schedule-reference.md#periods)によって定義される) を確認します。その後、スケジュール間隔によって、開始または停止のアクションが必要に応じて適切に適用されます。

例えば、Lambda 関数が金曜日の午前 9 時 (東部標準時) に呼び出され、停止している EC2 または RDS DB のインスタンスに Schedule=office-hours タグが付与されていることが確認されると、Amazon DynamoDB で office-hours スケジュールの設定詳細が確認されます。office-hours スケジュールに、月曜日から金曜日の午前 9 時 (東部標準時) から午後 5 時 (東部標準時) までインスタンスを実行することを示す期間が含まれている場合、Lambda 関数はそのインスタンスを起動します。

また、Lambda 関数はリソースに関する情報を記録し、オプションの [Amazon CloudWatch Custom ダッシュボード](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)に表示します。たとえば、スケジュールごとにタグ付けされたインスタンスの数、それらのインスタンスのサイズ、およびインスタンスが現在実行中かそれとも停止状態かなどの情報が表示されれます。このカスタムダッシュボードの詳細については、「[Operational insights ダッシュボード](monitor-the-solution.md#operational-insights-dashboard)」を参照してください。

**注記**  
 Amazon EC2 インスタンスを*停止*することは、Amazon EC2 インスタンスを*終了*することとは異なります。Amazon EC2 インスタンスは、デフォルトでシャットダウン時に終了するのではなく停止するように設定されていますが、この動作を変更することもできます。このソリューションを使用する前に、インスタンスが適切に停止または終了するように設定されていることを確認してください。