【AWS】ぼくのかんがえたさいきょうの運用・監視構成

# はじめに

:::note
本構成の続編「[**ぼくのかんがえたさいきょうの DevOps 実現構成**](https://zenn.dev/istone/articles/297833b006dfd6)」を公開しました！
:::

AWSのインフラを運用・監視する上で使いやすいと思ったサービスを組み合わせて構成図を作成しました。それぞれのサービスの簡単な説明と類似サービスの紹介、また構成の詳細について説明していきます。
(開発で使用するようなサービスも紹介しますが、あくまでも運用・監視だけの構成です。)

各個人・企業によって環境は違うと思いますし、使いやすいと思うサービスは人それぞれだと思うので、これが正解という訳ではありませんが、参考にしてただければ幸いです。

参考になった教材を紹介した記事も作成しました。是非読んでみてください！

- [【AWS】さいきょうの運用・監視構成を作成するのに参考になった書籍](https://qiita.com/iStone/items/0fd385f07083a691ea05)
- [インフラエンジニア1年生がプログラミングを勉強するのに使った教材](https://qiita.com/iStone/items/64c1ffe00e94a024af49)

# 全体図
こちらがAWSにおける"ぼくのかんがえたさいきょうの"運用・監視構成です。複雑で分かりづらいかと思うので、詳細に説明していきます。最後まで読めばこの図もすべて理解できるはずです。。

![監視運用.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/7d28fb0a-431d-5e0e-b63e-b4fe85aaa2f3.png)

ちなみに四角で囲まれているのはOSS(オープンソースソフトウェア)です。OSSをいくつか使用することで、AWSによるベンダーロックインをなるべく最小限にし、CloudWatchやDatadog、New Relic等のSaaSを使用した監視よりも料金が抑えられ、より柔軟な監視が行えます。(その分学習コストはかかってしまいますが...。)
<br>
こちらは先ほどの構成図を簡略化しました。
![簡易構成.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/b9cdb592-602a-6d1e-f575-640a81bfc32e.png)

この図で伝えたいのは以下の通りです。

- [監視はすべて**Grafana**に一元化](#grafanaで監視の一元化)
  - [メトリクス監視](#メトリクス監視)
  - [ログ監視](#ログ監視)
  - [トレース監視](#トレース監視)
  - [セキュリティ監視](#セキュリティ監視)
  - [コスト監視](#コスト監視)
  - [その他監視](#その他監視)
  - [アラートの管理](#アラートの管理)
- [**AWS Lambda**等を使った運用の自動化](#運用の自動化)
- [**AWS Amplify**を使った独自ツールの開発](#aws-amplifyを使って独自ツールの開発)
- [**AWS CodePipeline**を活用して**Terraform**や**Ansible**での構築](#aws-codepipelineを活用したterraformとansibleでの構築)
  - [Terraform](#terraformとは)
  - [Packer](#packerとは)
  - [Ansible](#ansibleとは)
  - [Serverless Framework](#serverless-frameworkとは)
- [**AWS IAM Identity Center**(旧AWS SSO)を使ってすべてのアカウント管理](#aws-iam-identiry-centerでアカウント管理)

これらをそれぞれ詳細に説明していきたいと思います。

# Grafanaで監視の一元化
GrafanaというOSSを利用して、メトリクス、ログ、トレース、セキュリティ、コストの監視を行います。
## Grafanaとは
### Grafana
https://grafana.com/

**Grafana**とはGrafana Labsが公開しているデータ可視化のオープンソースソフトウェアです。
Grafanaは様々なデータソースを可視化できるので、このGrafanaを使用してすべての監視項目を集約して可視化します。それぞれのサービスについては後ほど説明します。
<img width="600" alt="Grafana.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/b9c50888-b229-d704-1592-5f616693988c.png">

### Grafana Cloud
先ほどの図の上４つのサービス(Grafana、Prometheus、Loki、Tempo)をGrafana Labsがマネージドサービスとして提供しているのが**Grafana Cloud**です。
内部的にはAWS、Azure、GCPのいずれかを使用して動かしており、登録の際に選択できます。(AWSはAdvancedプランでのみ選択可能。)

https://grafana.com/products/cloud/

### AWSのGrafanaとPrometheus

https://aws.amazon.com/jp/grafana/

https://aws.amazon.com/jp/prometheus/

GrafanaとPrometheusはAWSでもマネージドサービスとして提供されているのでこちらもおすすめです。Grafanaに関しては、最新バージョンが使用できる、プラグインが利用できるという点から個人的にはGrafana Cloudの方が使いやすいです。
AWSマネージドのGrafanaはGrafana Labsとの共同開発なので、今後Grafana Cloudのように最新バージョンが利用出来たり、プラグインが利用出来たりするかもしれません。

## メトリクス監視
メトリクス監視では以下のサービスを使用します。
### Prometheus

https://prometheus.io/

**Prometheus**はメトリクスを収集するOSSでCloud Native Computing Foundation(CNCF)のプロジェクトです。LinuxやApache、MySQL等のメトリクスを取得する様々なExporterが用意されているので、目的に合ったメトリクスを収集することが出来ます。(Exporterは自分で作る事もできます。)
Prometheusの可視化には通常、Grafanaが利用されます。


ちなみにCNCFとはLinux Foundationのプロジェクトの1つで、クラウドネイティブなコンピューティングシステムを推進するための非営利団体の事です。

### OpenTelemetry

https://opentelemetry.io/

**OpenTelemetry**はメトリクス、ログ、トレースの収集と転送を行うOSSで、こちらもCNCFのプロジェクトです。Prometheus Exporter単体だとGrafana CloudのPrometheusに送信できないので、こちらを利用して送信します。また、メトリクスのフィルタリングができるので、Grafana Cloudの利用料金も抑えられます。
<br><br>

### メトリクス監視の構成
メトリクス監視の構成はこのようになりました。

<img width="700" alt="メトリクス構成.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/827adb4d-4e2c-da1e-1cb9-5f88343e342b.png">

PrometheusのExporterを利用してメトリクスを取得し、OpenTelemetry で Prometheusに送信。Grafanaで可視化します。

<img width="700" alt="メトリクス構成(ECS).drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/42ec562a-17d2-1425-09b4-889de1b352ae.png">

ECSではPrometheus Exporterを用意しなくてもOpenTelemetryをアプリケーションコンテナのサイドカーとして動かす事でアプリケーションコンテナのメトリクスを収集することが出来ます。

<img width="600" alt="メトリクス構成(CW).drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/59a909bb-ac56-71b1-a58e-953cfeca1042.png">

Amazon RDSやAWS Lambda等のマネージドサービスはAmazon CloudWatchでしかメトリクスを取得できません。
ただGrafanaだとAmazon CloudWatchのデータも可視化する事ができます。
またGrafana CloudにはAmazon CloudWatchのメトリクスをPrometheusの形式に変換して保存する方法もあります。(CloudWatch Exporterを使用すれば、Grafana CloudじゃなくてもPrometheusの形式に変換することが出来ます。)

## ログ監視
ログ監視では以下のサービスを使用します。
### Fluent Bit

https://fluentbit.io/

**Fluent Bit**はCNCFのプロジェクトであるFluentdの軽量版です。Fluentdはログの収集と分析、転送を行うOSSで、ユーザーが用意した様々なプラグインを使って機能を拡張できます。特別なプラグインを利用しない場合や大規模なシステムじゃない場合はFluent Bitの利用で問題ないかと思います。

### Grafana Loki

https://grafana.com/oss/loki/

**Grafana Loki**はGrafana LabsがPrometheusを参考にして開発した、ログ収集を行うOSSです。

### Grafana Lokiの類似サービス
ログの収集、分析を行うツールとして有名なものには他にもElasticsearchというサービスがありますが、Grafanaとの相性がいいためGrafana Lokiを選択しました。

Fluent Bitの送信先を変更するだけで、すぐにElasticsearchでの監視に切り替えることも出来ます。

### ログ監視の構成
ログ監視の構成はこのようになりました。
<img width="700" alt="ログ構成.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/3f2c2a42-78dd-5673-7f87-3087ecb24302.png">

Fluent Bitでログを取得して、Grafana Lokiに送信。Grafanaで可視化します。

<img width="700" alt="ログ構成(ECS).drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/d4b213c8-de5e-ad85-4b75-8f8a1cd091ba.png">

ECSではFireLensというログドライバが用意されおり、こちらを利用することで簡単にFluent Bitを利用できます。メトリクス監視の時のOpenTelemetryと同様Fluent Bitもアプリケーションコンテナのサイドカーとして動かします。

<img width="600" alt="ログ構成(CW).drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/f8c844bc-a4da-615d-0fde-1d311cb6d5c8.png">

メトリクスの時と同様、Amazon RDSやAWS Lambda等のマネージドサービスはAmazon CloudWatchにログが保存されますが、Grafanaで可視化できます。
またGrafana CloudだとAmazon CloudWatchのログをGrafana Lokiの形式にして保存する事も出来ます。

## トレース監視
### トレースとは
オブザーバビリティの３本柱の一つで、メトリクスが「何が起きているか」、ログが「なぜ問題が起きたか」を判別できるのに対し、トレースはアプリケーションが処理するリクエストに関するデータを収集することで、「どこで問題が発生したか」を判別できます。

トレース監視では以下のサービスを使用します。
### Grafana Tempo

https://grafana.com/oss/tempo/

**Grafana Tempo**はGrafana Labsが開発したトレース監視のOSSです。

### Grafana Tempoの類似サービス
AWSにもAWS X-Rayというトレース監視サービスがあり、Grafanaにて参照することもできますが、Grafanaとの相性がいいためGrafana Tempoを選択しました。
また、CNCFのプロジェクトにトレース監視のOSSであるJaegerがあり、こちらもGrafanaにて参照できますが、サーバーを用意する必要があるため、Grafana Cloudにてマネージドで利用できるTempoを選択しました。

OpenTelemetryの送信先を変更するだけで、すぐにAWS X-RayやJaegerでの監視に切り替えることも出来ます。

### トレース監視の構成
トレース監視の構成はこのようになりました。
<img width="700" alt="トレース監視.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/3fd9bbc8-827d-632d-23c3-211da69ab413.png">

AWS OpenTelemetry SDKを導入しているアプリケーションからOpenTelemetryでトレースデータを取得し、Grafana Tempoに送信。Grafanaで可視化します。

<img width="700" alt="トレース監視(ECS).drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/b6c59503-f57d-9db8-4ffd-7a0d878cc4e7.png">

ECSでも同様です。OpenTelemetryをアプリケーションコンテナのサイドカーとして動かすことでOpenTelemetry SDKを導入しているアプリケーションからトレースデータを取得します。


## セキュリティ監視
セキュリティ監視では以下のサービスを使用します。
### AWS Security Lake

https://aws.amazon.com/jp/security-lake/

**AWS Security Lake**はAWS Security HubやAWS CloudTrail等の様々なセキュリティログをOpen Cyber​​security Schema Framework (OCSF)というオープンソーススキーマの形式で保存し、集約・管理できるサービスで、AWS以外のサービスにも対応しています。

### AWS Trusted Advisor

https://aws.amazon.com/jp/premiumsupport/technology/trusted-advisor/

**AWS Trusted Advisor**はセキュリティだけでなく、コスト最適化、耐障害性、パフォーマンス、サービスの制限といったAWSのベストプラクティスに基づく5つのカテゴリにわたるチェックと推奨事項を提供するサービス。
セキュリティに関してはAWS Security Hubの結果を、コスト最適化に関してはAWS Compute Optimizerというサービスの結果を集約する事が出来ます。

### OpenSearch
https://opensearch.org/

**OpenSearch**はリアルタイムのアプリケーションモニタリング、ログ分析、ウェブサイト検索などの幅広いユースケースに利用できるオープンソースの全文検索エンジン。ElasticsearchをもとにAWSが開発しました。
AWSのマネージドサービスとしてAmazon OpenSearch Serviceというサービスが用意されており、こちらにてOpenSearch Dashboardという可視化ツールも利用できるため、Grafanaを使用しなくても監視できますが、監視は全部Grafanaに統一させたいということで、今回はGrafanaにて可視化を行います。


### SIEM on OpenSearch Service

https://github.com/aws-samples/siem-on-amazon-opensearch-service/blob/main/README_ja.md

**SIEM on OpenSearch Service**は先ほど紹介したAmazon OpenSearch Serviceを使用してAWSでのセキュリティインシデントを調査するためのソリューションで、Amazon S3やAWS Lambda、Amazon OpenSearch Service等のリソースがAWS CloudFormationで自動的に構築されます。
AWS Security LakeやTrusted Advisor等のログを取り込み可視化出来ます。

### Falco
https://falco.org/ja/

**Falco**はサーバーに導入することで、予期しない動作、侵入、データの盗難をリアルタイムで検知するCNCFのプロジェクト。
Falcosidekickというツールを使用することで、検知したデータをAWS Security Lakeに送信できます。

https://github.com/falcosecurity/falcosidekick

Falcosidekickの送信先にはAWS Security Lakeだけでなく、Amazon S3やAWS SNS、Prometheus、Slack等も利用できます。

### セキュリティ監視の構成
セキュリティ監視の構成はこのようになりました。
<img width="700" alt="セキュリティ監視.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/ff883f32-b535-aaea-8f03-2f1295730e50.png">

すべてSIEM on OpenSearch Serviceに取り込まれ、Grafanaで可視化しています。

## コスト監視
コスト監視では以下のサービスを使用します。
### AWS Cost and Usage Report

https://aws.amazon.com/jp/aws-cost-management/aws-cost-and-usage-reporting/

**AWS Cost and Usage Report**はその名の通り、AWSのコストと使用状況のレポートです。Amazon S3に保存されます。

### Amazon Athena

https://aws.amazon.com/jp/athena/

**Amazon Athena**はSQLを使用してAmazon S3内のデータを直接分析できるAWSのサービス。
こちらを利用して、AWS Cost and Usage Reportのデータをクエリします。 

### AWS Glue

https://aws.amazon.com/jp/glue/

**AWS Glue**はデータの抽出、変換、ロードを行うAWSのサービス。Amazon AthenaでAmazon S3のクエリを行う際は、AWS GlueのCrawlerによってData Catalogが作成され、Amazon AthenaはそのData Catalogに対してクエリを行っています。

### コスト監視の構成
コスト監視の構成はこのようになりました。
<img width="700" alt="コスト監視.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/9bb082a0-a896-759f-60a1-d403fe70b28b.png">

AWS Cost and Usage Reportの結果をAmazon S3に保存。そのデータをAWS GlueとAmazon Athenaを使ってクエリし、Grafanaで可視化します。

## その他監視
### Synthetic monitoring
Grafana Cloudの一部として提供される合成監視のプラグイン。内部的にはPrometheusのエクスポーターであるBlackbox Exporterを利用しており、対象サーバーの死活状態に関するメトリクスとログを生成します。
保存先にはGrafana CloudのPrometheusとLokiが使用されます。

https://grafana.com/grafana/plugins/grafana-synthetic-monitoring-app/

### Grafana Faro

https://grafana.com/oss/faro/

Grafana Labsが開発中のリアルユーザーモニタリングを行うOSS。リアルユーザーモニタリングとはユーザーが表示しているWebサイトやアプリケーションのパフォーマンスを監視することで、今まではバックエンドの監視でしたが、こちらはフロントエンドの監視が行えます。
ログとトレースが生成され、保存先にはGrafana CloudのLokiとTempoが使用されます。
※現在はプライベートベータ版です。

## アラートの管理
AWSのアラートとGrafanaのアラートは**Grafana OnCall**というOSSを使って管理します。Grafana Cloudにて無料で利用できます。
### Grafana OnCall

https://grafana.com/products/oncall/

様々な監視ツールからのアラートを統合的に管理できるOSS。Grafanaのアラートだけでなく、AWSやZabbix等のアラートにも対応しており、アラートの通知先にはメールだけでなくSlackやTeams等のチャットツールや電話でのオンコールが利用できます。

<img width="450" alt="OnCall.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/6f44a511-8413-54f4-dfbd-7d93685bed48.png">

### Grafana OnCallの類似サービス
その他類似サービスにPagerDutyやOpsgenieというサービスがありますが、こちらは別途料金がかかるSaaSです。
Grafana OnCallは無料で利用でき、またアラートがGrafana内で完結するのでこちらを選択しました。

# 運用の自動化
## 運用自動化ができるAWSのサービス
AWSにおける運用を自動化できるサービスを紹介します。特にAWS LambdaとAWS Systems Managerは奥が深く、様々な使い方が出来ます。
### AWS Lambda

https://aws.amazon.com/jp/lambda/

**AWS Lambda**はサーバレスでコードが実行できるAWSのサービス。AWS SDKを使用することで、AWSのサービスをプログラムから操作することが出来るようになります。

例えば、下の図のような流れでAWS Systems ManagerのRunCommandを呼び出し、Amazon EC2内でコマンドを実行することも出来るので、GrafanaのアラートをもとにEC2インスタンスにコマンド実行なんてことも出来ます。

<img width="500" alt="RunCommand.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/b6fbed0c-c0da-03f4-8b14-7ee8d2fc91cb.png">

### AWS Systems Manager

https://aws.amazon.com/jp/systems-manager/

**AWS Systems Manager**はAWSのインフラ管理に役立つ機能がたくさんあるAWSのサービス。サーバー内にエージェントを導入することで、サーバーも管理できます。Amazon EC2だけでなくオンプレのサーバーでも使えます。

機能の詳細に関しては下記記事が分かりやすいです。

https://dev.classmethod.jp/articles/all-ssm-capabilities-2021/


### Amazon EventBridge

https://aws.amazon.com/jp/eventbridge/

**Amazon EventBridge**はAWSでの様々なイベントをトリガーにして、AWS LambdaやAWS Systems Manager、Amazon SNS等を呼び出す事が出来るAWSのサービス。
イベントだけでなくスケジュールをトリガーにして呼び出すことも出来ます。


### Amazon EC2 Auto Scaling

https://aws.amazon.com/jp/ec2/autoscaling/

**Amazon EC2 Auto Scaling**はAmazon EC2を自動でスケーリングする事が出来るAWSのサービス。スケールした際の通知はAmazon SNSに送信することが出来ます。

名前が似ていてややこしいですが、複数サービスにまたがる複数のリソースのスケーリングを管理する際はAWS Auto Scalingを利用してくださいとの事。

https://aws.amazon.com/jp/autoscaling/


### AWS Backup

https://aws.amazon.com/jp/backup/

**AWS Backup**はAmazon EC2やAmazon S3、Amazon RDS等のデータバックアップを一元化および自動化するAWSのサービス。バックアップの結果はAmazon SNSに送信することが出来ます。

### Amazon DevOps Guru

https://aws.amazon.com/jp/devops-guru/

**Amazon DevOps Guru**は機械学習を使用してAWSにおける異常な動作パターンを検出するAWSのサービス。検出結果はAmazon SNSに送信することが出来ます。

# AWS Amplifyを使って独自ツールの開発
用意されているサービスだけですべての運用はカバーできず、社内向けの独自ツールを作成することもあるかと思います。
ツールの開発方法には様々な方法があるかと思いますが、AWS Amplify使ってサーバレスアプリケーションを開発するのがおすすめです。
## AWS Amplifyとは
### AWS Amplify

https://aws.amazon.com/jp/amplify/?nc=sn&loc=1

**AWS Amplify**はモバイルアプリやWebアプリの開発を迅速かつ簡単に行うためのプラットフォームで、アプリ開発に必要なフロントエンドとバックエンドの機能を提供し、簡単に統合することができます。
内部ではAmazon S3やAmazon DynamoDB、AWS AppSync、Amazon Cognito等のサービスが使用されます。

<img width="600" alt="Tool(New).drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/0444c7bb-07b6-f0a9-b4b6-69dc3cb53160.png">

### Amazon DynamoDB

https://aws.amazon.com/jp/dynamodb/

**Amazon DynamoDB**はAWSによるNoSQLのフルマネージドサービスです。

### AWS AppSync

https://aws.amazon.com/jp/appsync/

**AWS AppSync**は、GraphQLというREST APIの課題を解決する為Facebookによって開発されたAPI向けのクエリ言語を利用できるAWSのサービスです。
AWS AmplifyのAPIはREST APIかGraphQLが選択でき、REST APIではAmazon API Gateway、GraphQLではこのAWS AppSyncを使用します。

## Amazon Cognitoを使ってログイン
AWS Amplifyのログイン認証にAmazon Cognitoを使用することで、後述するAWS IAM Identety Centerのユーザーでのログインが行えるようになります。
### Amazon Cognito

https://aws.amazon.com/jp/cognito/

**Amazon Cognito**はウェブおよびモバイルアプリの認証、承認、およびユーザー管理機能を提供するAWSのサービス。

# AWS CodePipelineを活用したTerraformとAnsibleでの構築
リソースの構築に関してはTerraformやAnsible、PackerやServerless Frameworkを使用し、AWS CodePipelineを活用してCI/CDします。
## AWS CodePipelineでCI/CD運用
TerraformやAnsibleでの構築でCI/CDをするために、以下の三つのAWSサービスを使用します。
### AWS CodeComit

https://aws.amazon.com/jp/codecommit/

**AWS CodeComit**はGitでバージョン管理が行える、AWSによるフルマネージドサービス。
AWS CodePipelineではAWS CodeCommitだけでなくGitHubとBitbucketの利用も可能です。

### AWS CodeBuild

https://aws.amazon.com/jp/codebuild/

**AWS CodeBuild**はAWSによるフルマネージドな継続的インテグレーションサービス

### AWS CodePipeline

https://aws.amazon.com/jp/codepipeline/

**AWS CodePipeline**はAWSによるCI/CDのフルマネージドサービス。

AWS CodePipelineを使ってAWS CodeComitからAWS CodeBuildの流れを自動化することで、TerraformやAnsibleのCI/CDを行います。
## Terraformとは
インフラの構築にはTerraformを使用します。
### Terraform
https://www.terraform.io/

**Terraform**はHashiCorpが提供する、インフラの構成をコードとして管理できるOSSで様々なサービスに利用可能です。
AWSだけでなく、Grafanaにも対応しています。

### Terraformの類似サービス
AWSのIaCサービスといえばAWS CloudFormationがありますが、AWS以外のリソースも構築したいので、今回はTerraformを選択しました。

### TerraformのCI/CD構成
Terraformの構成は以下の様になります。
<img width="700" alt="Terraform.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/4c419ac0-da92-07ee-4bc8-058341e08eca.png">

### Trivy

https://trivy.dev/

**Trivy**はコンテナイメージの脆弱性を診断するAqua Securityのツール。tfsecというTerraformのセキュリティスキャンのツールが統合されたことにより、TrivyでTerraformのセキュリティスキャンが出来ます。
Terraformを動かすAWS CodeBuildにてこちらを使用します。

## Packerとは
EC2のAMIの作成にはPackerを使用します。
### Packer

https://www.packer.io/

**Packer**はTerraformと同じくHashiCorpが提供する、異なる仮想化/クラウドプラットフォーム上で動作するマシンイメージを自動化して作成するためのOSSです。
AWSだけでなくAzureやGCPに対応しており、Dockerイメージのビルドにも対応しています。

### PackerのCI/CD構成
Packerの構成は以下の様になります。

AWS CodePipelineでPackerを実行するファイルをAmazon S3にデプロイし、そのファイルを使用してAWS Systems ManagerのAutomationでPackerを実行して、一時的なEC2インスタンスを作成。そしてそのインスタンスを基にAMIを作成ます。

<img width="600" alt="Packer-SSM.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/58510ca2-5b16-5df2-5457-621f7880f369.png">

## Ansibleとは
サーバーの構成管理にはAnsibleを使用します。
### Ansible
https://www.ansible.com/

**Ansible**はRed Hatが提供する、サーバーをコードで管理できるOSSの構成管理ツールです。
Amazon EC2のインスタンス内でのインストールや設定ファイルの管理に使用します。

### Ansibleの類似サービス
Ansibleのような構成管理ツールは他にもChefやPuppetというサービスがあり、どちらもAWS OpsWorksというAWSのマネージドサービスが用意されています。
ただ、ChefやPuppetはAnsibleに比べて学習コストが高く、エージェントをサーバーに導入する必要があるので、今回は気軽に利用できるAnsibleを選択しました。

### AnsibleのCI/CD構成
Ansibleの構成は以下の様になります。

AWS CodePipelineでAnsibleを実行するファイル(Playbook)をAmazon S3にデプロイし、そのPlaybookを使用してAWS Systems ManagerのRun CommandでAnsibleを実行します。

<img width="600" alt="Ansible-SSM.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/94424f81-4a15-c03a-724f-cc9e25681896.png">

※Ansibleは本来、AnsibleをインストールしてPlaybookを実行するサーバーであるコントロールノードと管理対象のサーバーであるターゲットノード(Ansbileのインストールの必要はない)に分かれており、SSHを利用して接続するのでSSHのポートを解放する必要があります。
AWS Systems Managerを使用する場合はターゲットノードにAnsibleをインストールしてローカルで実行するため、コントロールノードの必要がなく、またAWS Systems Managerで実行するのでSSHのポートを解放する必要もありません。

## Serverless Frameworkとは
AWS Lambdaの構築・デプロイに関してはServerless Frameworkを使用します。
### Serverless Framework

https://www.serverless.com/

**Serverless Framework**サーバーレスなアプリケーションを簡単に開発、デプロイするためのフレームワーク。AzureやGCP等AWS以外でも使用できます。

### Serverless FrameworkのCI/CD構成
Serverless Frameworkの構成は以下の様になります。
<img width="700" alt="ServerlessFramework.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/5b719e58-db7c-05d9-24f8-70d409e390ad.png">


# AWS IAM Identity Centerでアカウント管理
ここまで様々なサービスが登場しましたが、すべてAWS IAM Identity Centerでアカウント管理を行います。
## AWS IAM Identity Centerとは
### AWS IAM Identity Center

https://aws.amazon.com/jp/iam/identity-center/

**AWS IAM Identity Center**は一つのアカウントで複数のAWSアカウントやAWS以外のサービスにログインできるSSO(シングルサインオン)を実現するAWSのサービス。無料で使用できます。

<img width="600" alt="アカウント管理.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/f0a0e82f-c981-a94d-4371-4cf7713959ac.png">

複数のAWSアカウントにログインできるだけでなく、Grafanaにログインしたり、Amazon Cognitoを利用してAWS Amplifyで作成したツールにもログイン出来ます。

### AWS IAM Identity Centerの類似サービス
AWS IAM Identity CenterのようなSSOを実現するサービスは多く存在しますが、AWS IAM Identity CenterはAWSのログイン認証として使いやすく、料金も無料ということで今回はこちらを選択しました。

# 最後に
最後にもう一度全体図を載せておきます。
![監視運用.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/7d28fb0a-431d-5e0e-b63e-b4fe85aaa2f3.png)

今回紹介した構成でAWS Well architectedフレームワークの５本の柱である運用上の優秀性、セキュリティ、信頼性、パフォーマンス効率、コスト最適化に沿った構成が実現できているのではないかと思っています。(6つ目の持続可能性については省いてます。)

こちらは今後もどんどん改良を重ねていく予定です。また、今後は個々のサービスを掘り下げた記事も書いていこうと思ってます。