AWSサービスのクロスリージョンレプリケーション(CRR)機能まとめ

## はじめに
最近、AWSのクロスリージョンレプリケーションに関連するアップデートについて多くあったため、一度自分用の備忘込みでイメージとポイントをまとめてみようと思います。

今回は下記サービスについてまとめます。
* S3
* EFS
* RDS(Aurora)
* DynamoDB
* ECR

--------------

## S3

#### イメージ

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619916/3224e649-6fb7-d65b-b1f3-0117d9864bfd.png "S3 クロスリージョンレプリケーション")|
|:--|

#### ポイント

* レプリケーション先でも更新がある場合は、レプリケーション先バケットからレプリケーション元バケットにクロスリージョンレプリケーション設定を有効化する
* レプリケーション先のKMSキーがカスタマー管理のCMKの場合はレプリケーション元バケットで利用するIAMロールへの許可が必要
* レプリケーション先バケットのオブジェクトは更新可能（ReadOnlyではない）
* 設定前にレプリケーション先バケットの作成が必要
* レプリケーション設定は複数のリージョン先を指定可能
  (レプリケーション設定を複数作成する)
* レプリケーション設定は既に存在するオブジェクトには反映されないため、S3 バッチレプリケーションでのレプリケーションが必要

--------------

## EFS

#### イメージ

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619916/6666a04d-6936-e347-e653-364bc1089bd7.png "EFS クロスリージョンレプリケーション")|
|:--|

#### ポイント

* バックアップとして利用する場合はAWS Backupによるクロスリージョンバックアップを採用し、レプリケーション先リージョンでも参照が必要な場合にクロスリージョンレプリケーションを採用する
* レプリケーション先のファイルは更新不可(ReadOnly)
* 設定時に既存のEFSはレプリケーション先として設定できない
* レプリケーション設定を削除することでレプリケーション先EFSのファイルが編集可能（フェイルオーバー）できる

--------------

## RDS

### RDS Cross-Region Read Replica

#### イメージ

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619916/31d36c56-c4e2-ee4e-3ece-fe172f8790ef.png "RDS クロスリージョンリードレプリカ")|
|:--|

#### ポイント

* 通常のリードレプリカと同じく、参照のみ可能
* 複数の AWS リージョンにクロスリージョンリードレプリカを作成できる
* レプリケーションできるDBエンジンのバージョンは限定的である
* リードレプリカインスタンスからクロスリージョンレプリケーションすることはできない
* MariaDB、MySQL、Oracle DB の各インスタンスの場合、クロスリージョンリードレプリカのソース DB インスタンスが削除されると、リードレプリカが昇格する
* VPC のアクセスコントロールリスト (ACL) のエントリ数に制限があるため、5 つを超えるクロスリージョンリードレプリカのインスタンスは保証されない


### Aurora グローバルデータベース

#### イメージ

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619916/5818a217-9c00-64a4-136d-51796d4753c9.png "Aurora グローバルデータベース")|
|:--|

#### ポイント

* Secondary DB Clusterで起動するインスタンスのDBでは参照のみ可能
* ストレージベースでのレプリケーションのため、迅速なレプリケーションが可能
* 1つのPrimary DB Clusterに対して最大5つのSecondary DB Clusterが設定可能であり、
  レプリケーションできるDBエンジンのバージョンは限定的
* Aurora Serverless v1ではサポートされていない
* マイナーバージョンの自動アップグレードは、Aurora Global Database の一部である Aurora MySQL クラスターや Aurora PostgreSQL クラスターには適用されない

--------------

## DynamoDB

#### イメージ

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619916/3e6028ac-48f7-5fb3-0ced-fe4bffa9da84.png "DynamoDB グローバルテーブル")|
|:--|

#### ポイント

* DynamoDB グローバルテーブルには、バージョン 2019.11.21 (現行) と バージョン 2017.11.29 の 2 つのバージョンがある
  (ここではバージョン 2019.11.21 (現行)について記載)
* グローバルテーブル バージョン 2017.11.29 のリージョンのサポートは、リージョンが限定される
* 既にデータが入力されたテーブルから新しいレプリカテーブルを動的に追加できる
* 有効期限 (TTL) 機能を使用している場合、DynamoDB ではすべてのレプリカテーブルに TTL の削除をレプリケートする
* トランザクションオペレーションは、書き込みが最初に行われたリージョン内でのみ、不可分性、一貫性、分離性、および耐久性 (ACID) を保証する
* レプリカの暗号化に使用されるカスタマーマネージドキーにアクセスできない場合、DynamoDB はこのレプリカをレプリケーショングループから削除する
* バージョン 2017.11.29 からバージョン 2019.11.21 (現行) への更新は元に戻せないため、注意が必要

--------------

## ECR

#### イメージ

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619916/57f22223-24be-26c5-285b-0916fa414b42.png "ECR クロスリージョンレプリケーション レジストリ")|
|:--|

#### ポイント

* レプリケーションは、ECR プライベートレジストリレベルで設定する
* レジストリ内のすべてのプライベート ECR リポジトリが、異なるアカウントやリージョンにある複数の他のリポジトリにイメージを自動的にコピーされる
* レジストリ内の特定のプライベートECRリポジトリのみレプリケートしたい場合はFilter設定で特定のリポジトリのみを指定する
* コンテナイメージはメタデータとともにレプリケーションされるが、脆弱性の検出結果はレプリケーションされない

--------------

## おわりに

かなり個人的な整理でしたが、どなたかの役に立てば幸いです。

## 参考

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/replication.html

https://aws.amazon.com/jp/blogs/news/new-replication-for-amazon-elastic-file-system-efs/

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ReadRepl.XRgn.html

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/GlobalTables.html

https://aws.amazon.com/jp/blogs/news/cross-region-replication-in-amazon-ecr-has-landed-jp/