AWS FIS がネットワーク接続中断をサポート

# 概要

AWS FIS がネットワーク接続中断をサポートしたとのことで、いくつか試してみました。

https://aws.amazon.com/jp/about-aws/whats-new/2022/10/aws-fault-injection-simulator-network-connectivity-disruption/

スコープは以下が対応しているようです。

- **all**– すべてのトラフィックを拒否します。
- **availability-zone**– 他のアベイラビリティーゾーンのサブネットとの間の VPC 内トラフィックを拒否します。
- **dynamodb**– DynamoDB との間のトラフィックを拒否します。
- **prefix-list**– 指定されたプレフィックス リストとの間のトラフィックを拒否します。
- **s3**– Amazon S3 との間のトラフィックを拒否します。
- **vpc**– VPC に出入りするトラフィックを拒否します。

サブネットに対してアクションを実行できるようです。

- **aws:ec2:subnet**

# ALL

## 前提

- パブリックサブネットに、マルチAZ で　ECS（Fargate） のタスクを 4 個起動。
- ALB はわざと利用していません。

## 設定
「Scope」で **all** を指定。
![all.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/ff16e82b-c4dc-3f3e-e4ef-173bc6dccab6.png)

ターゲットで特定の AZ-1c にあるサブネットを指定。
![all2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/95495eea-3def-d351-24a1-6789e5eb4243.png)

## 結果
次の通り、ターゲットで指定した AZ-1c のみ接続ができなくなりました。

```
curl http://<AZ-1aのパブリックIP>
<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>

curl http://<AZ-1aのパブリックIP>
<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>
```

```
curl http://<AZ-1cのパブリックIP>
curl: (28) Failed to connect to X.X.X.X port 80 after 75010 ms: Operation timed out

curl http://<AZ-1cのパブリックIP>
curl: (28) Failed to connect to X.X.X.X port 80 after 75010 ms: Operation timed out
```

# DynamoDB

## 前提

- DynamoDB を準備。
- プライベートサブネット、AZ-1a/AZ-1c に Lambda を配置し、VPCエンドポイントを経由して、DynamoDBにアクセス。

## 設定1

「Scope」で **dynamoDB** を指定。
![スクリーンショット 2022-11-26 19.26.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/88609446-1f54-f045-d2c4-ac794f2570a6.png)

ターゲットで特定の AZ-1a のみを指定。
![スクリーンショット 2022-11-26 19.30.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/02f05837-eade-9a9d-276a-ac69849131e7.png)

## 結果1

```json
Test Event Name
test

Response
{
  "name": "sato",
  "test_id": "001"
}
```

## 設定2

「Scope」で **dynamoDB** を指定。
![スクリーンショット 2022-11-26 19.26.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/88609446-1f54-f045-d2c4-ac794f2570a6.png)

ターゲットで特定の AZ-1a/AZ-1c を指定。
![スクリーンショット 2022-11-26 19.39.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/0000fc1b-e5e1-fb22-d82e-940a0ff4a273.png)

## 結果2

次の通りタイムアウトとなりました。

```
Test Event Name
test

Response
{
  "errorMessage": "2022-11-26T10:41:26.891Z c90afa5d-ca84-4d2a-90bb-8243df2b9b9e Task timed out after 3.02 seconds"
}

Function Logs
START RequestId: c90afa5d-ca84-4d2a-90bb-8243df2b9b9e Version: $LATEST
2022-11-26T10:41:26.891Z c90afa5d-ca84-4d2a-90bb-8243df2b9b9e Task timed out after 3.02 seconds

END RequestId: c90afa5d-ca84-4d2a-90bb-8243df2b9b9e
REPORT RequestId: c90afa5d-ca84-4d2a-90bb-8243df2b9b9e	Duration: 3015.78 ms	Billed Duration: 3000 ms	Memory Size: 128 MB	Max Memory Used: 66 MB

Request ID
c90afa5d-ca84-4d2a-90bb-8243df2b9b9e
```

# VPC

## 前提

- **VPC** を指定した場合、出入りするトラフィックを拒否するとのことなので、今回は単純にパブリックサブネットに、マルチAZ で ECS（Fargate） のタスクを 2 個起動。
- ALB はわざと利用していません。

## 設定
「Scope」で **vpc** を指定。
![スクリーンショット 2022-11-20 18.37.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/4cc9bf13-f0b0-0062-570e-980d102a6116.png)

ターゲットで特定の AZ-1c にあるサブネットを指定。
![スクリーンショット 2022-11-20 18.37.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/380d679d-d973-7563-52fc-0d59878ca196.png)

## 結果
次の通り、ターゲットで指定した AZ-1c のみ接続ができなくなりました。

```
curl http://<AZ-1aのパブリックIP>
<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>
```

```
curl http://<AZ-1cのパブリックIP>
curl: (28) Failed to connect to X.X.X.X port 80 after 75010 ms: Operation timed out
```