Exam Readiness DOP : 分野 2: 設定管理とIaC

# はじめに
AWS DOPの試験対策で[Exam Readiness: AWS Certified DevOps Engineer – Professional (Japanese)](https://explore.skillbuilder.aws/learn/course/117/play/503/exam-readiness-aws-certified-devops-engineer-professional-japanese)を視聴したので、内容をまとめます。

# アジェンダ
| 分野 | 内容 |
|------|---------|
|    1  |   [ SDLC の自動化](https://qiita.com/tetsuya_tech/items/3da9ac5042f40d1577ba)|
|    2  |   設定管理とIaC|
|    3  |  [モニタリングとロギング](https://qiita.com/tetsuya_tech/items/338385fe2cdf2265a543)|
|    4  |  [ポリシーと標準の自動化](https://qiita.com/tetsuya_tech/items/baa999857d805fae3842)|
|    5  |   [インシデントとイベントレスポンス](https://qiita.com/tetsuya_tech/items/24315754f4af20743423)|
|    6  | [高可用性、対障害性、災害復旧](https://qiita.com/tetsuya_tech/items/317bb98700b7b59026c7)|


# AWS CloudFormation

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951272/c5e8b46f-3f3b-6809-80d3-a04bdedbee47.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951272/ffb8db99-9c58-6ab8-7374-74cab1577a03.png)
- 中断を伴わない更新：オペレーションの変更や物理名の変更を伴わずに実行
- 一時的な中断を伴う更新：物理名は変更されない。EC2のサイズ変更など。
- 置き換え：リソースが再作成され、新しい物理IDが振られる。RDSをMySQLからPostgreSQLに変える等。

## UpdatePolicy
- MaxBatchSize:更新されるインスタンスの最大数
- MinInstancesInService:更新中のインスタンスの最小数
- PauseTime:アプリケーション開始までの時間
- WaitOnResourceSignal:AutoScalingグループが必要数の有効シグナルを受け取るまでの待機時間
- SuspendProcesses:AutoScalingのスタック更新への干渉を防ぐ。
- MinSuccessfulInstancesPercent:成功をシグナルに更新する必要があるローリング更新のAutoScalingのインスタンスの割合

## 依存関係の解決
- DependsOn:単純な依存関係を記述
- WaitCondition：先に進む前にWaitConditionHandleが通知されるのを待つ
- CreationPolicy:リソースの作成完了を定義する

## スタックポリシー
- 全てのリソースへの更新をデフォルト拒否する

## サポートされていないサービスとのワークフロー（Lambdaの例）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951272/3129f203-6934-fed4-939f-a31efe0a37ec.png)

## スタックセット
- 異なるアカウント、リージョン間で同じ感環境を生成
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951272/b778061f-cbc2-d55a-e7a9-ad21e3ff1403.png)

## ヘルパースクリプト
起動時のインスタンスの設定をコントロール
- cfn-init:CloudFormationメタデータを一回実行する。
- cfn-hup:CloudFormationメタデータをモニタリングし変更のたびに適用する。

## デプロイオプション
様々なサービスと連携可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951272/d3fc07e2-3a77-60a1-f54b-358274ba8f46.png)

# AWS Elastic Beanstalk
- 負荷分散
- ヘルスチェック
- Auto Scaling
- アプリケーションプラットフォーム管理
- コードデプロイ

## 構成要素
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951272/fbc6ef77-21a2-a332-9f72-f7e65d9ac2db.png)


## 更新方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951272/58bde315-8a8e-65d1-d684-25144cab4698.png)

## カスタマイズ
- .ebextentions/config.ymlで行われる
- ECSと連携してマルチコンテナへのデプロイが可能

# AWS OpsWorks
- 動的な拡張がされる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951272/5d989c73-732e-7a2a-e3f4-ea81ee06e0a7.png)

## AWS OpsWorksスタック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951272/3b85d4a7-7667-3aaf-c905-8e20a074e7d1.png)

## シェフレシピ
レシピとメタデータからコマンドが生成される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951272/ab99cd00-36a8-37ba-f4c3-2c43c7ac1f2c.png)

# Container
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951272/01656e94-8a10-218c-5635-03d7f72e37aa.png)

## CI/CDツールとの連携
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951272/0438113f-89ec-5e68-bca6-6e4b6e01d745.png)

# サーバレス
LambdaやApiGatewayがよく利用される

# 問題例
- CloudFormationで更新が失敗しロールバックするとスタックがUPDATE_ROLLBACK_FAILEDになる
-> スタックのリソースがCloudFormation以外で作成されている
- ブルーグリーンデプロイメントで、バグ出現時にロールバックしたい。ブルーはロードバランサの後ろにAuto Scalingグループで構成
-> グリーンに新しいロードバランサとAuto Scalingグループをアタッチ。加重Route53パブリックレコードセットでトラフィックを徐々に移行
- CloudFormatinonスタックが削除できない。
->　外部で作成されたEC2インスタンスがある。CloudFormationで終了保護が有効になっている。
- オンプレミスからAWS Elastic Beanstalkでデプロイ。Amazon SQSを使用したい
-> Dockerコンテナを使用しAWS Elastic Beanstalkワーカー環境にコンテナをデプロイ
- ロードバランサーを含むアプリケーションで、A/Bデプロイで一部のユーザを24時間移行してから残りを移行
-> Amazon Route53加重ラウンドロビンを使用してロードバランサー感で必要な比率を作成する
- AWS CLoudFormationを使用して変更をプッシュしたが、後続のコードのデプロイに最大15分かかった
-> cfn-hip.confを正しく設定する