AWS SysOps Associate対策



#  はじめに


Sysopsの勉強をしていたのでメモを残しておきます。
ほぼ自分用みたいな感じですが、参考になればと思います。


## Lab対策


#### EC2

- キーペア作成
- EIP取得
- EC2作成
- EIPの「Action」から「関連付け」


#### ASG

- [1] 起動テンプレートの作成
    - AMIの選択
    - インスタンスタイプの選択
    - 起動テンプレートではsubnet１つしか設定できない→冗長化できない
    - SG
    - リソースタグ
    - NIC
- [2] ASGの作成
    - テンプレートからASG作成
    - ASG名前 : XXXX
    - 起動テンプレート : XXXX
    - インスタンスの購入オプション
    - ネットワーク (VPC, Subnet)
    - LBの選択→既存
    - 既存のLBターゲットグループ
    - ヘルスチェック (EC2, ELB) 
    - グループサイズ(希望する容量、最小キャパシティ、最大キャパシティ)
    - スケーリングポリシー : ターゲット追跡スケーリングポリシー
    - 通知を追加
    - その他 ☑️ CloudWatch内でグループメトリクスの収集を有効
  


#### VPC周り

- VPC作成
- Subnet作成
- インターネットGW作成&VPCにアタッチ [IGWのアクションからアタッチ]
- ルートテーブル→ルートの追加 [0.0.0.0/0 igw]
- ルートテーブルをサブネットに関連付け [送信先をigwとしてインターネットに繋ぐようにする]


#### NAT Gateway

- Nat GW作成 [VPCの画面で作成できる]
- Nat GW作成時に Elastic IPの割り当ても行える
- ルートテーブルの作成 [0.0.0.0/0 Nat-gw]
　　　　-　Private-subentからNATへのアクセスをルーティング
- NAT GW削除する時は「Elastic IP」は削除されないので消しに行く必要あり 


#### CloudWatch

- AgentをEC2にインストール
- IAMロール [`CloudWatchLogsFullAccess`]
- EC2の[アクション]→[セキュリティ]→[IAMロールを変更]でIAMロールを割り当て可能
- 取得したいログファイルを /etc/awslogs/awslogs.conf に記述
- ロググループ
- ログストリーム
- アラーム
    - メトリクスを選択
    - 通知設定、Auto Scalingアクション、EC2アクション
- CloudWatch Logs
    - サブスクリプションフィルタ、メトリクスフィルタ、S3へのログの転送
    - メトリクスフィルタ
        - フィルターパターン
        - メトリクス名
        - メトリクス名前空間
        - メトリクス値
        - デフォルト値
    - 作成方法
        - ロググループ→メトリクスフィルター作成    
- ロググループ
    -  ログストリーム
    -  メトリクスフィルター
    -  サブスクリプションフィルター



#### RDS作成

- SGの作成
- Subnet Groupの作成( DB Subnet Group)
- パラメータグループの作成
- RDS DBインスタンス作成

#### ELB → CloudWatch → SNS → User

- SNS作成
　　　　-　Topic作成
　　　　-　名前 : XXXX
　　　　-　サブスクリプション作成
　　　　　　　　-　トピックARN
　　　　　　　　-　プロトコル→Eメール : エンドポイント XXX@gmail.com


- CloudWatch -> アラーム作成
- メトリクスの選択
- アクション設定 (1.通知、2.ASアクション、3.EC2アクション)
- SNS→既存→アラーム名　 


#### AMI

- 別リージョンにコピー [アクション]→ [AMIをコピー]
- KMSで暗号化する時
    - 暗号化で「ターゲットEBSスナップショットの暗号化」を選択し、CMKを選択 
- 削除する時は、[アクション]→ [AMIを登録解除する]

#### KMS

- KSMを選択
- カスタマー管理型のキー


#### SCP/OU

- 「Organizations」の「ルート」を選択した上で組織単位の「新規作成」
- 「ポリシー」→「サービスコントルールポリシー」
- まず有効化する
- Denyしたいサービスを選択して、「アークションを追加する」でAll actionsを選択
- 「リソースを追加する」を追加して、「All Resources」を選択して「リソースを追加」
- ポリシーを作成して、OUにポリシーをアタッチする




#### CloudFormation

- VPC, Subnet, IGW, NATGW, EC2 ,, など諸々作成できるようにする





## 用語

#### 特定IP / 不正なリクエスト

- IPアドレスの拒否 : `WAF or NACL`
- DNS Firewall : VPC に関連付ける`ルールグループにドメイン名のフィルタリングルールを定義 (WAFだとできない!)`

#### CloudTrail


- CloudTrailログを内部のAWSユーザーでなく`第三者に確認させるためには、IAMロール(一時的な付与)で権限付与`
- 1つのCloudTrailを全てのリージョンに適用して、CloudWatch上でモニタリングする設定を行うことで、CloudTrailによる全リージョンのログファイルを、１つのリージョンのAmazon S3バケットとCloudWatchロググループに配信して蓄積することが可能
- こいつは「`履歴フィルター`」「`操作ログ`」
- KMSと統合されておりKMSで発生するイベントの追跡に役立つ
    - `管理イベント` 
        -  管理イベントには「読み取り専用イベント」「書き込み専用イベント(リソースを変更するAPI操作)」
    - `データイベント`
- 90日間以上のデータはS3
- CloudTrailのログファイルは、デフォでSSEを使用して暗号化


#### KMSキー問題

- 存在してない
- 有効化されていない

#### モニタリングすべきメトリクス

- CPUUtilization
- SwapUsage
- Evictions
- CurrConnections



#### SES

- CloudWatchアラーム通知と統合されていない

#### スワップメモリの原因付きとめ

- FreeablememoryとSwapUsageの両方のcloudwatchメトリクスを調べて、DBインスタンスの全体的なメモリ使用パターンを把握
- `Performance Insights`を有効にしてSQLを識別し、DBインスタンスで過度のスワップやメモリを消費しているイベントを待つ


#### RDS Oracle

- RDS Pracleでは、RDSのリードレプリカ機能ではなく、Oracle Data Guardを使用して、ソースDBインスタンスからリードレプリカに対してデータ変更内容をレプリケートすることができる
- つまり、別リージョンにリードレプリカ立ち上げること可能

#### CloudWatch

- 複数のリソースにわたってAWSリソースのメトリクスを集計することができますが、そのデータはリージョンごとに集計
- リージョン間のデータを集計して、統合したうえで表示することはできません
- クロスアカウントクロスリージョンダッシュボードクロスアカウントクロスリージョンダッシュボード




#### CloudWatch Logs Insights

- CloudWatch Logs のログデータを`インタラクティブに検索して分析`
- S3に送ってAthenaで検索するような設計にしていなくても、`CloudWatch Logsにログだけ出していれば調査が可能`
- CloudWatch Logs Insights は、EventBridge (CloudWatch Events) イベントを生成しません。





#### Cloudwatch Alarm

- 単一のメトリクス監視ならこれでOK,無理にEventBridgeを利用しなくてOK
- EC2インスタンスを自動的に停止、終了、再起動
- 再起動によってインスタンスへの障害検知
- EC2の停止 : テスト用のインスタンスの削除忘れに使える
- `Cloudwatch agentだとできない`
- 復旧アクション
- Auto Recovery
- システムステータス失敗 : 復旧
- インスタンスステータス失敗 : 再起動
- `StatusCheckFailed_Systemメトリクス`を使用して障害のあるEC2インスタンスを回復するために使う


#### Cloudwatch Agent

- アプリケーションのトラブルケーションには利用されない


#### CloudFront

- レスポンスキャッシュのみ
- regionでなくグローバルのサービス
- ネットワークとかIOPS改善 (CPUではない)


#### AWS Service Health Dashboard

- パブリックイベント


#### AWS Personal Health Dashboard

- パブリックイベント
- アカウント固有


#### S3オブジェクトロック

- ガバナンスモード
- コンプライアンスモード
　　　　-　rootユーザー含め、ユーザーが保護されたオブジェクトのバージョンを上書きor削除できない 

---

#### System Manager

- Run Command, Inventory, Path Managerなどのいくつかの機能が含まれる
- 基本的にサーバー管理
- EC2とオンプレサーバー同時に管理
- SSMとも呼ぶ
- CFnテンプレートのパラメータセクションを構成して、最新のAMIID指定

##### ◆メンテナンスウィンドウ(System Manager : Maintenance Window)

- System Managerの一機能
- OSのパッチ適用、ドライバーの更新、ソフトウェアやパッチのインストール、
- RDS DBインスタンス
- Elastic Cacheクラスター

##### ◆Inventory

- サーバーにインストールされているソフトウェアを一覧で表示できる機能

##### ◆Patch Manager

- サーバーにインストールされているOSやソフトウェアをチェックして自動的にパッチをインストールできる機能
- インスタンスを変更することなく、既存のシステムにinplace updateでパッチを適用


---


#### GuardDuty

- 機械学習を利用した不正検知
- VPCフルーログを解析できる
- IPアドレスやドメインリストを解析できる

#### Artifact


- 監査レポートと個別契約を確認するサービス
- 様々な基準の監査レポートが提供
- 「AWS Artifact Reports」というAWSのコンプライアンスドキュメントをダウンロードするためのサービス
- SOC, PCI
- BAA, NDAを管理することができる


#### Trusted Advisor

- 既知のベストプラクティスと比較して節約やシステムパフォーマンス、セキュリティの観点からチェックをしてくれるプログラムです。

#### Config

- AWSのリソースやEC2,オンプレサーバーの設定の変更管理、変更履歴のモニタリング
- configルールと呼ばれる事前に定義した「あるべき設定」との乖離を評価
- 変更発生時にCloudwatch Eventsをトリガーしたり、SNSを用いてユーザーに通知を送ることが可能


#### WAF


- webアプリケーションのリクエストをチェックして攻撃パターンが含まれていればブロック
- CloudFront・ALB・API GWの保護に対応
- SQL インジェクション / クロスサイトスクリプティング
- [1]マネージドルール
    - セキュリティベンダーが各々の知見をもとに作成した複数のルールをまとめたやつ
    - Market Place / ベンダーが更新
- [1]ユーザー定義ルール
    - IP制限
    - レートベース
    - 特定の脆弱性に関するルール
    - 悪意のあるhttpリクエストを判別するルール
      


#### Inspector

- セキュリティ評価のためのサービス
- `パッチあてはできない！！`
- EC2のネットワークアクセスおよび、そのインスタンスで実行しているアプリケーションのセキュリティ状態を評価
- 「ルールパッケージ」と呼ばれるセキュリティチェックコレクションを選択し、「評価テンプレート」と呼ばれる評価の実行設定を作成しておく

Inspector評価テンプレート
- 対象となるEC2インスタンスに`Agentをインストール`
- 対象となるインスタンスにタグをつける
- 評価タ-ゲットの定義

#### AWS Health API

- `Personal Health Dashboard API`
- AWSの障害情報確認 + CloudWatch Event
- AWS Healthに EventBridgeを連携してEC２の状況を監視、通知をLambdaに送りEC2を停止するようにできる

#### インスタンスがすぐ終了

- EBSボリューム制限
- EBS Snapshotが破損
- ルートEBSボリュームは暗号化されていて、複号用のKMSキーにアクセスする権限ない

#### S3

- 冗長化のために、オブジェクトは同一のS3リージョン内の複数施設に分散
- 作成後にダウンタイムなしで暗号化を有効
- 既存のオブジェクトは暗号化されない

#### S3　イベントリ

- バケットに保存されているすべてのオブジェクトの複製および暗号化のステータスに関するレポートを生成することが可能
- ビジネス、コンプライアンス、および規制のニーズに合わせてオブジェクトのレプリケーションおよび暗号化ステータスを監査およびレポートすることができる


#### GetRequests S3メトリクス

- アクセスアクティビティを示します


#### 4xxErrorRate CloudFront メトリクス

- 4xx エラーには、存在しないオブジェクトのエラーが含まれます。これらのエラーには、ユーザーが閲覧を許可されていないオブジェクトについての 404 エラーおよび 403 エラーが含まれます。4xx エラーは、オブジェクトへのアクセスに関連するフロントエンドエラー

- 5xx エラーはサーバー側のエラーであり、アクセスエラーや承認エラーではありません


#### 5xx error解決・回避

- リクエストするアプリケーションの再試行メカニズムを有効にする
- リクエスト率を徐々に増やすようにアプリケーションを設定
- 複数のプレフィックスにオブジェクトを分散

#### ALBのアクセスログ

- クライアントのIPアドレス
- レイテンシー
- リクエストのパス
- サーバーレスポンス

#### X-Forwarded-For

- HTTP(s)ロードバランサーを使用する際に、クライアントのIPアドレスを識別するのに役立つ
- ELBは、クライアントのIPアドレスをX-Forwarded-Forリクエストヘッダーに格納し、ヘッダーをサーバに渡す

#### Elastic Volumes

- インスタンスを停止しなくてもEBSの容量変更できる


#### LambdaでRDSプロキシ使用

- RDSへの接続を効果的に管理することで解決

#### EC2 Image Builder

- AMIのupdateを自動的に自動化できるサービス

#### スナップショットライフサイクル監視

- 「Lambda」「EventBridge」を使用するとプログラムによるイベント通知を処理し、古いスナップショットを削除することができる


#### Firewall Manager

- Organizationと統合されていて、複数アカウントに跨って操作を一元化できる
- 管理できるサービス : `WAF / Shield Advanced / VPC Security Group`
- ルールの適用状況のチェック、設定内容の監査はConfigルールを用いて行われる
- 設定に応じてAWS Firewall Managerにて、configルールが自動作成され存在するリソースが組織のセキュリティルールに従っているか継続的に監視
- 組織内の 1 つのアカウントのみを Firewall Manager 管理者アカウントとして指定できます。新しい Firewall Manager 管理者アカウントを作成するには、最初に元の管理者アカウントを取り消す必要があります。


#### Network Firewall

- VPCに出入りするトラフィックに対してDPI(伝送するデータ本体の中身を検査)を実行
- `VPCレベルで機能`し、サブネットなどの下位リソースでは機能しない
- 監視対象のリソースが存在しない専用のサブネット内に設定して、全てのトラフィックをルーティングできる
- DPI

#### balckhole

- Routetargetがない
- NATインスタンスがないとか

#### HTTP Code_Backend_5XX

- LB or 登録されたインスタンスの不具合

#### Route53 ヘルスチェック

- 2xx or 3xxのHTTPステータスコード
- (1) エンドポイントをモニタリングするヘルスチェック
- (2) 他のヘルスチェックを監視するヘルスチェック
- (3) cloudwatchアラームをモニタリングするヘルスチェック


#### S3バケット削除制限

- バケットのバージョニングが有効化 -> `CLIで削除できない`
- バージョニングが有効化されていない時においても`オブジェクトが空でないと削除できない`
- [--force] パラメータでオブジェクトが空でないとバケット消せる

#### AWS Nitro Enclaves

- オリジンがELBでないときACMの証明書使える



#### EBS

- `encrypted-volumes` : アタッチ済みのEBSボリュームが暗号化されているかどうか
- EBSのボリュームのサイズを増やしたらファイルシステム`固有のコマンドを使用して、ファイルシステムを大きなサイズに拡張`
- ボリュームの状態が`optimizingになった時点でファイルシステムのサイズを変更できる
- EBSスナップショットは、EC2インスタンスを`停止せずにリアルタイムで作成できる`
- EBSの自動バックアップ : DLM


#### EBS スナップショット

- EBS スナップショットは Amazon S3 に保存されます。ただし、EBS スナップショットには標準の S3 API からはアクセスできません
- ポイントインタイムスナップショット
- 増分バックアップ
- EC2インスタンスを停止せずにリアルタイムで作成できる




#### インスタンスストアのBU

- EBSと異なりスナップショット取得できない
- インスタンスバックアップを取得するには新しいEBSボリュームを作成して、インスタンス 


#### ModifyCacheCluster

- `既存のクラスターを変更できる`
- `CacheNodeType`を指定してより多くのメモリを備えたより大きなインスタンスタイプに変更

#### Fleet Manager

- AWS またはオンプレミスで実行されるサーバーフリートをリモートで管理するのに役立ちます。Fleet Manager を使用すると、個々のインスタンスからデータを収集し、単一のコンソールから一般的なトラブルシューティングおよび管理タスクを実行できます。ただし、Fleet Manager を使用してインスタンスを開始または停止するスクリプトをアップロードすることはできません。




#### トラフィックミラーリング

- `パケットフローのコピーを作成して、パケットの内容を調べることができます。`
- この機能は、脅威のモニタリング、コンテンツ検査、トラブルシューティングに役立ちます。
- Nitro インスタンスだけでなく、現行世代の EC2 インスタンスでも使用できます。ソースインスタンスは、ミラーリングされたトラフィックをログに従って送信しています。したがって、送信元インスタンスはトラフィックミラーリングと互換性があります。


#### EC2 Rescue

- GUIベースのトラブルシューティング

#### インスタンスストアボリューム

- コンソール画面X
- 「`ec2-bundle-vol`」「`ec2-upload-bundle`」

#### CloudTrailログの暗号化

- デフォでSSEを使用して暗号化
- CMKを利用して暗号化できる

#### VPCデュアルスタックモード

- `IPv4 & IPv6`

#### アクセス許可セット

- 管理者定義のポリシーの集合であり、AWSアカウントに対するユーザーのアクセス許可が有効かどうかを判断するためにSSOで使われる


#### put-object-acl

- アクセス権付与できる

#### CLBのヘルスチェック

- ELBは、ヘルスチェックを継続して実行し、異常があるインスタンスへのトラフィックのルーティングを停止する
- インスタンスのdeleteはしない！やるのはAuto Scaling側！

#### NLBのアクセスログ有効化

- バケットはLBと同じリージョン
- バケットにアクセスしたログを書き込み許可を付与するバケットポリシーを設定


#### 統合CloudWatch agent(2017/12~)

- 新しいagent(旧 : CloudWatch Logs agent)
- ログだけではなくカスタムメトリクスをCloudWatch Logsに送信できる
- パラメータストアで管理可能
- アプリケーションのトラブルシューティングには利用されない

#### CloudWatch Event -> EventBridge

- AWS以外のSaaSのイベントも取り込める
- リージョン間のイベントをサポート
- cloudwatch EventsのAPIを使用


#### set-alarm-set

- 意図的にアラーム状態にする
- aws cloudwatch set-alarm-set XXX


#### EFS 

- マウントターゲット : AZに1つでいいの？
- 暗号化 : 新しいファイルシステムを作成する時

### EBS

- スナップショットはEC2を停止せずにリアルタイムで作成できる


#### タグ

- 特定のEC2を選択して、自動化プロセスを定義した運用スクリプトを設定することができる
- 自動化設定に使える


#### コスト配分タグ(Cost Allocation Tags)

- `AWSの利用明細で、タグ別に利用料金を出力したい場合`
- 各AWSアカウントで個別に管理されるのではなく、`管理アカウントレベルで管理`される
- コスト配分タグ別経費を表示する前に、`Billing and Cost Management コンソールでタグをアクティブ化`する必要があります。リソースが正しくタグ付けされるように、タグの使用を義務付ける必要があります。
- `また一覧に表示されているタグからアクティブにしたいタグKEYを選択する`
- タグは２種類ある
    - AWS生成コスト配分タグ
    - ユーザー定義のコスト配分タグ
        - ユーザーが付けられるタグ 

#### タグエディタ

- タグベースでのリソース検索ができ、さらに検索したリソースに対してタグを付与することできる

 

#### AWS Organizations 一括請求

- マスターアカウント毎に1つの請求を利用
- 支払いアカウントは独立していて、他のアカウントからの支払い情報にアクセスできない


#### Cost Explorer

- リソースの使用状況と、コストを可視化して分析できるサービス



#### コストと使用状況レポート

- 過去のコスト状況を検証
- `使用状況のデータを日単位 or 時間単位で集計可能`
- クロスアカウントリージョンダッシュボード
- ルートアカウントと IAM ユーザーが使用した各サービスの利用状況が、時間単位または日単位の明細項目レベルで確認することが可能なレポート
- CSV 形式のデータをユーザーが指定したS3 バケットに保存することができます

#### Billing and Cost Management コンソール

- 利用料金の概要
- 今月の初めから今日までのサービス別利用料
- 今月の初めから今日までで最も利用料の多いサービス 



#### 請求アラート設定

- ルートユーザーのAWSコンソール移動
- `AWS Billing and Cost Management `画面において請求アラートを有効化
- 一度有効にすると無効にできない
- Cloudwatchにおいて請求額をモニタリングし、請求メトリクスデータを使用してアラームを作成


#### 請求アラーム

- CloudWatchから作成
- 予想請求額のアラーム

#### IAMコンソール画面のダッシュボード

- IAM ユーザーのサインインリンクのURL
- ユーザー
- ロール
- グループ
- ID プロバイダ
- カスタマー管理ポリシー


#### EC2サービス制限アラート設定

- Trusted Advisor
- Cloudwatch Events

#### バージョニングが有効なバケットで削除されたs3オブジェクトを取得

- AWSマネージドコンソールで対象のオブジェクトの`削除マーカ-`を削除
- CLIを使用して削除マーカーのバージョンIDを指定し、オブジェクトの削除マーカーを削除することでオブジェクト復元


#### EC2

- T2, def: standard
- T3, T3a, def: `unlimited (一時的なバースト)`


#### AuroraReplicaLagMaximum

- レプリカ間のラグ

#### メトリクス

- `UnHealthyHostCount` : LBに登録された異常なインスタンス数を取得
- `SurgeQueueLength` : 正常なインスタンスへのルーティングを保留中のリクエスト
- `SpilloverCount` : ELBのキューがいっぱいのため拒否されたリクエストの合計数のカウント (0が良い)

#### その他

- 通知機能 : cloudwatch alarm
- イベント実施系 : LambdaとかにEventBridge

#### 別アカウントとVPC Peering

- `AWSアカウント番号`と`VPC ID`(必須)
- リクエストを作成した後で、アクセプタVPCの所有者はVPC Peering接続を`承認してアクティブ化`する (必須)

#### Connection Draning

- 300s(default), `3600s(MAX)`

#### 拡張ネットワーキング

- 有効化するだけでインスタンスのネットワークパフォーマンスが向上する機能


#### 不正アクセスに以下は使えない

- Inspector : アプリケーション自体の不正利用を検知
- VPC flowlog

#### Service Catalog

- 組織としてガバナンスが適用された製品を、AWS利用者であるユーザー部門がいち早く簡単に立ち上げること可
- `TagOptions`を使用して、起動中のリソースにタグをつけることができる
　　　　-　 整合性のある分類
　　　　-　 AWS Service Catalogリソースの適切なタグ付け
　　　　-　 許可されたタグのためのユーザーが選択可能な定義済みのオプション 


#### AMI

- AWS アカウントIDさえわかれば、AMIを公開せずにAMIを共有できる
- AMIを暗号化されたボリュームとして共有するにはCMKも必要
- AMIを別リージョンで使用する場合は、コピーすることが必要
- 基本的には新しいリージョンでは新規キーペアを作成することになります。しかしながら、現在のリージョンで利用しているPEMキーを共有したいという場合は、PEMキーを別リージョンにインポートすることができます

#### キーポリシー

- KMSでカスタマーマスターキー (CMK) へのアクセスを制御するための主要な方法

#### Application Auto Scaling

- EC2以外の個々のAWSのサービスのスケーラブルリソースを自動的にスケールするソリューションを必要とするdeveloperとシステム管理者のためのwebサービス


#### AutoScaling

- ELBと統合されている
- AddToLoadBalancer
    - 一時中断中に起動したインスタンス
    - インスタンスはELBに登録されず、プロセスの再開時にユーザーが手動で登録する必要あり 

#### IDフェデレーション

- 外部で管理されたIDを使って認証
- SAML2.0の使用
- カスタムIDブローカーアプリケーション

#### ステータスチェック

- StatusCheckFailed_System
- StatusCheckFailed_Instance

#### ALB

- `RequestCountPerTarget` : ターゲットグループ内の各ターゲットによって受信されたリクエストの平均数
- HTTP 503,504: ELBのキャパシティに関する問題。インスタンスをスケーリングで解決
- 正常なインスタンスない時アラート : AWS/ApplicationELB HealthyHostCount <= 0

#### Cloud Formation


- cfn-signal
    - CreationPolicy または WaitCondition でシグナルを送信するために使用し、前提となるリソースやアプリケーションの準備ができたときに、スタックの他のリソースを同期できるようにします。 


- `DeletionPolicy`
    - CFnのスタックを削除した際にそのスタックで生成したリソースがどのような動きをするか
    - Delete
    - Retain
    - Snapshot

```yaml 
Resources:
  SecurityGroup01:
    Type: AWS::EC2::SecurityGroup
    DeletionPolicy: Retain
    Properties:
```

- `CreationPolicy `
    - アプリケーションがインストールされ設定された後にインスタンスに成功シグナルを送信
    - リソースに関連付けることでCFnが指定された数の成功シグナルを受信するか、タイムアウト期間を超えるまでステータスが作成完了にはならないようにリソース作成を抑制
    - 信号を送る
        - `cfn-signal`, `SignalResoure API`

```yaml 
Resources:
  Instance:
    Type: AWS::EC2::Instance
    CreationPolicy:
      ResourceSignal:
        Count: 1
        Timeout: PT10S
```
  
- 使い道 : AutoScalingグループ内のEC2インスタンスの更新時などに 新インスタンスのデプロイに失敗した(=成功シグナルを時間内に受信できなかった）場合はインスタンスを更新せずにロールバックするetc

- `DependsOn`
    - 特定のリソースが続けて作成されるように指定
    - DependsOn属性で指定したリソースの作成後に行われる

 
- `Metadata`

    - 構造化データを関連付け
    

- `UpdatePolicy`
    - AWS::AutoScaling::AutoScalingGroup、AWS::ElastiCache::ReplicationGroup、AWS::Elasticsearch::Domain、または AWS::Lambda::Alias のリソースに対する更新を処理する方法を指定


    - `AWS::AutoScaling::AutoScalingGroup`の時どのようにインスタンスを入れ替えるか`UpdatePolicy`に記載
        - AutoScalingRollingUpdate  : 数台ずつ入れ替えていく
        - AutoScalingReplacingUpdate : 新しいASGを作成して新旧のグループを入れ替える
        - どちらか指定しないとインスタンスの入れ替えが発生せず変更が反映されないので注意


```yaml  
Resources:
  ASG:
    Type: "AWS::AutoScaling::AutoScalingGroup"
    UpdatePolicy:
      AutoScalingRollingUpdate:
        MaxBatchSize: 1
        MinInstancesInService: 1
        PauseTime: PT10M
        WaitOnResourceSignals: true
          :
    Properties:
      
```


- `UpdateReplacePolicy`
    - スタック更新オペレーションでリソースを置き換えるときに、リソースの既存の物理インスタンスを保持したり、必要に応じてバックアップしたりする 
   


- `OnFailure`
    - stackのcreationがfailしたら何のactionをするか
    - DO_NOTING, ROLLBACK, DELETE

- `変更セット (Change Sets)`
    - stackの更新前にリソースの更新や削除を把握できる
    - アップデートにおける簡単なdry-runのような機能
    - スタック実行前に変更されるリソースやパラメータを確認できるので、スタック実行することによって意図せずリソースが削除されたりする事故が防げる
    - ローリング更新の機能はない
　   


- `ドリフト検出`
    - スタック実行後に手動操作などで変更されたリソースを確認できる機能
    - 例えば障害対応などで手動で変更した設定を、後日ドリフト検出で確認してCloudFormationテンプレートに落とし込む場合に便利
    - スタックの更新や削除前にドリフト検出を行い、テンプレートとの差分をなくす
    - 一時的に変更したとこを戻すのに便利


- `スタックステータスコード`

    - CREATE_COMPLETE
    - ROLLBACK_COMPLETE
    - UPDATE_ROLLBACK_FAIED


- `cfn-init`
    - CFnのメタデータ取得&解析
    - パッケージのインストール
    - ディスクのファイルへ書き込み
    - サービスの有効化 / 無効化と開始/停止


- `StackSet`
    - 複数のアカウント/リージョンにまたがっていても一回の実行でOK

# 参考文献

- https://qiita.com/ryo0301/items/f0c2d155874b14427dc6
- [DeveloperIO produced by Classmethod](https://dev.classmethod.jp/tags/aws/)
- [AWSのコスト配分タグを正しく理解する](https://blog.serverworks.co.jp/tech/2019/07/29/cost-alloc-tags-basic/)