AWS CLIを活用したEFSレプリケーションの設計と構築

## はじめに

AWS Elastic File System（EFS）のレプリケーション機能を活用し、異なるリージョン間および同一リージョン内でのデータ同期を実現しました。本記事では、AWS CLIを利用してEFSレプリケーションを設定する手順について紹介します。

## Amazon Elastic File System（EFS）とは

Amazon Elastic File System (Amazon EFS) は、AWS クラウド内でシンプルかつスケーラブルな共有ファイルストレージを提供する、高可用性と耐久性に優れたサービスです。
EFS は、ファイルの追加や削除に伴って自動的にストレージ容量が拡大・縮小され、アプリケーションには必要なときに必要なストレージが提供されます。
また、EFS は NFSv4 プロトコルをサポートし、Amazon EC2、Amazon ECS、Amazon EKS、AWS Lambda などの AWS サービスとシームレスに連携します。

詳細は [AWS公式ドキュメント](https://docs.aws.amazon.com/ja_jp/whitepapers/latest/efs-encrypted-file-systems/basic-concepts-and-terminology.html) をご参照ください。

## EFSレプリケーションとは

EFS のレプリケーション機能を使用すると、AWS リージョン内または別のリージョンにファイルシステムのレプリカを作成できます。
レプリケーションは、ソースとデスティネーションのファイルシステム間の同期を自動的に維持し、分単位の目標復旧時点 (RPO) と目標復旧時間 (RTO) を実現するように設計されています。
この機能により、コンプライアンスや事業継続性の目標を達成することが可能となります。

詳細は [AWS公式ドキュメント](https://docs.aws.amazon.com/ja_jp/efs/latest/ug/features.html) をご参照ください。

## 設計概要

EFSのレプリケーションは**1対1の関係**でのみ構成可能です。そのため、異なる用途でEFSのレプリケーションの向きを変更する際には、既存のレプリケーション設定を削除した後に新しいレプリケーションを作成する必要があります。

以下の環境（平日環境、休日環境、バックアップ環境）とメインサイト被災時、メインサイト被災からの切り戻しにおいてEFSのレプリケーションを構築しました。

1. **平日環境（東京→大阪）**
   - 平日用EFS（東京）→ 休日用EFS（大阪）
2. **休日環境（大阪→東京）**
   - 休日用EFS（大阪）→ 平日用EFS（東京）
3. **平日切り戻し（東京→大阪）**
   - 平日用EFS（東京）→ 休日用EFS（大阪）
4. **東京被災時（大阪→大阪）**
   - バックアップ環境用EFS（大阪）→ 休日用EFS（大阪）
5. **被災からの切り戻し（大阪→東京）**
   - バックアップ環境用EFS（大阪）→ 平日用EFS（東京）
   - 平日用EFS（東京）→ 休日用EFS（大阪）

---

## AWS CLIを用いたEFSレプリケーションの設定

### 新しいEFSのレプリケーションを有効化する

AWS CLIを使用してEFSのレプリケーションを作成します。

#### １．平日環境（東京→大阪）
① 平日用のEFS → 休日用のEFS にレプリケーション設定
```sh
aws efs replicate-file-system \
    --source-file-system-id fs-xxxxxxxx \
    --destination-region ap-northeast-3
```

#### ２．休日環境（大阪→東京）

① 平日用のEFSのレプリケーション設定を削除

```sh
aws efs delete-replication-configuration --source-file-system-id fs-xxxxxxxx
```

② 休日用のEFS → 平日用のEFS にレプリケーション設定

```sh
aws efs replicate-file-system \
    --source-file-system-id fs-yyyyyyyy \
    --destination-region ap-northeast-1
```

#### ３．平日切り戻し（東京→大阪）

① 休日用のEFSのレプリケーション設定を削除

```sh
aws efs delete-replication-configuration --source-file-system-id fs-yyyyyyyy
```

② 平日用のEFS → 休日用のEFS にレプリケーション設定

```sh
aws efs replicate-file-system \
    --source-file-system-id fs-xxxxxxxx \
    --destination-region ap-northeast-3
```

#### ４．東京被災時（大阪→大阪）

① 休日用EFSのレプリケーション設定を削除

```sh
aws efs delete-replication-configuration --source-file-system-id fs-yyyyyyyy
```

② 休日用EFS → バックアップ環境用のEFS にレプリケーション設定

```sh
aws efs replicate-file-system \
    --source-file-system-id fs-yyyyyyyy \
    --destination-region ap-northeast-3
```

③ バックアップ環境用のEFSのレプリケーション設定を削除

```sh
aws efs delete-replication-configuration --source-file-system-id fs-zzzzzzzz
```

④ バックアップ環境用のEFS → 休日用EFS にレプリケーション設定

```sh
aws efs replicate-file-system \
    --source-file-system-id fs-zzzzzzzz \
    --destination-region ap-northeast-3
```

#### ５．被災からの切り戻し（大阪→東京）

① バックアップ環境用のEFSのレプリケーション設定を削除

```sh
aws efs delete-replication-configuration --source-file-system-id fs-zzzzzzzz
```

② バックアップ環境用のEFSを東京リージョンにリストア

```sh
aws efs restore-filesystem --source-backup-id backup-xxxxxxxx \
    --region ap-northeast-1
```

③ バックアップ環境用のEFS → 平日用のEFS にレプリケーション設定

```sh
aws efs replicate-file-system \
    --source-file-system-id fs-zzzzzzzz \
    --destination-region ap-northeast-1
```

④ バックアップ環境用のEFSのレプリケーション設定を削除

```sh
aws efs delete-replication-configuration --source-file-system-id fs-zzzzzzzz
```

⑤ 平日用のEFS → 休日用のEFS にレプリケーション設定

```sh
aws efs replicate-file-system \
    --source-file-system-id fs-xxxxxxxx \
    --destination-region ap-northeast-3
```

---

## まとめ

EFSレプリケーションを活用することで、異なるリージョン間および災害時のデータ復旧が可能となります。本記事で紹介した手順を参考に、適切なレプリケーション設計を行いましょう。

### 参考

- [AWS公式ドキュメント - Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/efs-replication.html)
- [AWS CLI Reference - EFS](https://docs.aws.amazon.com/cli/latest/reference/efs/index.html)

---

以上、AWS CLIを活用したEFSレプリケーションの設計と構築についてでした！