EC2(Windows)でEFSデータを取得するためのデザインパターン徹底解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/b18f0918-19e6-48ef-ab43-c0a71e1d1f36.png)

WindowsのEC2でEFSがマウント出来たらなあと思うことってたまにあると思います。
例えば、既存アプリをFargateで運用しており、データをEFSに保存しているケースです。

FargateとEFSは相性がよく、快適に運用をしていると、新規アプリがWindowsであり、EFSのデータを活用したいという場合です。それ以外にも、顧客端末をWorkspacesで運用しており、EFSのデータが見たいというケースもあるかもしれません。

以下に、EC2(Windows)でEFSのデータを取得する方法をまとめてみました。

1. [VPC、EFSを作成](#1-vpcefsを作成)
2. [Windows NFS Clientでマウント (未サポート)](#2-windows-nfs-clientでマウント-未サポート)
3. [ベアメタルEC2のWindowsにWSL2をインストールしてマウント (サポート？)](#3-ベアメタルec2のwindowsにwsl2をインストールしてefsをマウント-サポート)
4. [Samba(Fargate)経由でマウント (非推奨)](#4-sambafargate経由でマウント-非推奨)
5. [AWS Transfer Familyを使ってEFSのデータにアクセス (サポート)](#5-aws-transfer-familyを使ってefsのデータにアクセス-サポート)
6. [DataSyncを使ってEFSからFSx for Windows File Serverへコピー (サポート)](#6-datasyncを使ってefsからfsx-for-windows-file-serverへコピー-サポート)
7. [まとめ](#7-まとめ)

#### ※ WindowsでEFSをマウントすることは未サポート

**Windowsのみ**の環境であれば、ECS on EC2(Windows)で**FSx for Windows File Server**を使うことや

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/tutorial-wfsx-volumes.html

**Windows/Linux混在環境**の場合は、**FSx for NetApp ONTAP**をECS on EC2で使うことも考えられます。

https://docs.aws.amazon.com/ja_jp/fsx/latest/ONTAPGuide/mount-ontap-ecs-containers.html

ですが、FSx for Windows File Serverの場合はActive Directoryの構築が必要となりますし、Fargate + EFSで楽に運用したいということも多いと思います。そこで、EC2(Windows)でEFSをマウントすることができないか検討しましたが、以下の通り、公式な情報はありません。

:::note warn
Amazon EFS を Windows EC2 インスタンスで使用しないでください。これはサポートされていません。

https://docs.aws.amazon.com/ja_jp/efs/latest/ug/troubleshooting-efs-mounting.html

:::

新規で環境を作る場合は、**FSx for Windows File Server**や**FSx for NetApp ONTAP**を検討してください。

:::note info
**FargateがFSx for NetApp ONTAPに対応することを強く望みます！！**
:::

# 1. VPC、EFSを作成

今回の検証を行うために、以下のVPCとEFSを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/1cb4c923-757d-4a09-9c05-11bd7f00115a.png)

### VPCを作成
VPCは以下の通り、ウィザードでサクッと作りました。
※ enableDnsHostnames および enableDnsSupport は有効にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/b2ded17a-c19e-43c3-a30e-0c20111c37cb.png)

### セキュリティグループを作成

EFS用のセキュリティグループを作成します。インバウンドにNFS(TCP/2049)を許可します。インバウンド/アウトバウンドともに、VPC内に制限しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/85c9642f-e8ca-4a91-8b87-234685037701.png)

### EFSを作成

推奨設定で作成します。
※本番環境で利用する場合は、カスタマイズで詳細設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/445d11a6-1a5f-482a-8504-496ebd9d44fc.png)

作成したtest-EFSを選択し、ネットワークタブから管理をクリックします。
※利用可能となっていない場合は、利用可能になるまで待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/e14617e6-ee26-4521-bcf3-573eab4406b8.png)

サブネットIDがプライベートであることを確認します。セキュリティグループには、先ほど作成したEFS用のセキュリティグループを割り当てます。
※プライベートではない場合、カスタマイズで再作成してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/9b63b3b3-e05d-4f5f-bf51-ba103d5e5f44.png)

### IAMポリシーを作成（EFSマウント用）

IAMサービスから、アクセス管理-ポリシー→ポリシーの作成から、以下のポリシーを作成します。
JSON形式で直接入力しました。
※以下の説明でアクセスポイントやマウントを使うため、以下の4つの権限を付与しています。

```json:EFSMountPolicy
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
			    "elasticfilesystem:DescribeAccessPoints",
                "elasticfilesystem:DescribeMountTargets",
				"elasticfilesystem:ClientMount",
				"elasticfilesystem:ClientWrite"
			],
			"Resource": "*"
		}
	]
}
```


# 2. Windows NFS Clientでマウント (未サポート)

試しに、Windows Server 2025のEC2にNFSクライアントをインストールし、
```powershell
Install-WindowsFeature NFS-Client
```

マウントしてみたところ、以下のエラーになりました。
Web検索をしたところ、マウントできそうな記述もありましたが、具体的な手順はわかりませんでした。
```powershell
PS C:\Users\Administrator> mount.exe -o anon \\<EFSのエンドポイント>:\ X:
Network Error - 53

Type 'NET HELPMSG 53' for more information.
```

:::note warn
Windows Server 2025になっても、NFS Clientは、NFS v2, v3しかサポートされないようです。
:::

https://learn.microsoft.com/ja-jp/windows-server/storage/nfs/nfs-overview

# 3. ベアメタルEC2のWindowsにWSL2をインストールしてEFSをマウント (サポート？)

WindowsでNFSマウントする手段として、Windows Subsystem for Linux (WSL)を使う方法があります。WSL1とWSL2があり、WSL2はベアメタルインスタンスでのみ利用可能です。詳細は以下に記載があります。
※通常のEC2インスタンスでも、WSL2のインストールを試すことはできますが、通常のEC2では、Nested Virtualizationがサポートされておらず、断念した記憶があります。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-wsl-on-ec2-windows-instance.html

WSL1のインストールは以下の通りです。詳細はドキュメントを参照してください。
Windows Server 2022のEC2(t3.medium)で実行しました。

```powershell
wsl --install --enable-wsl1 --no-launch
shutdown -r -t 20
wsl --set-default-version 1
wsl --install
```

:::note warn
Windows Server 2025環境で、WSL1を有効化すると、再起動後にシステムの起動が失敗する可能性がありますと記載されていますが、試しにやってみたところ、EC2が起動しなくなりました。
現時点、ベアメタルインスタンスで、Windows Server 2025はサポートされていないようなので、WSLを試す場合は、いずれにしても、Windows Server 2019 or 2022となりそうです。
:::

スタートメニューから、Ubuntuの初期設定をした後、以下のコマンドでefs-utilsをインストールします。

```shell
$ sudo apt-get update
$ sudo apt-get -y install git binutils rustc cargo pkg-config libssl-dev gettext
$ git clone https://github.com/aws/efs-utils
$ cd efs-utils
$ ./build-deb.sh
$ sudo apt-get -y install ./build/amazon-efs-utils*deb
```

https://github.com/aws/efs-utils?tab=readme-ov-file#on-other-linux-distributions

amazon-efs-utilsのインストールのところで、以下のようなエラーがでて失敗しました。

```shell
Errors were encountered while processing:
 stunnel4
 amazon-efs-utils
N: Download is performed unsandboxed as root as file '/home/dministrator/efs-utils/build/amazon-efs-utils-2.2.0-1_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
E: Sub-process /usr/bin/dpkg returned an error code (1)
```

通常のnfs-commonをインストールしてみましたが、同様のエラー？で失敗します。

```shell
~/efs-utils$ sudo apt install nfs-common
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
nfs-common is already the newest version (1:2.6.4-3ubuntu5.1).
nfs-common set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.
2 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up stunnel4 (3:5.72-1build2) ...
Failed to take /etc/passwd lock: Invalid argument
dpkg: error processing package stunnel4 (--configure):
 installed stunnel4 package post-installation script subprocess returned error exit status 1
dpkg: dependency problems prevent configuration of amazon-efs-utils:
 amazon-efs-utils depends on stunnel4 (>= 4.56); however:
  Package stunnel4 is not configured yet.

dpkg: error processing package amazon-efs-utils (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
                                                                                                          Errors were encountered while processing:
 stunnel4
 amazon-efs-utils
E: Sub-process /usr/bin/dpkg returned an error code (1)
```

公式情報は見つかりませんでしたが、おそらく、WSL1でEFSのマウントはできないような気がします。

### ベアメタルインスタンス+WSL2であれば可能

インスタンスタイプは、z1d.metalを選択しました。
AMIは、Windows Server 2022(base)を利用します。
※Windows Server 2025は、現時点では、ベアメタルインスタンスに対応していませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/4d611c50-f0e7-41ef-bace-245568d80fbb.png)

EFSとは関係ないですが、インスタンスストアボリュームがついていました。
揮発領域ですが、性能がよく、追加料金が不要な領域です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/4c82bfeb-fed1-4abc-979d-145406349846.png)

WSL2をインストールします。

```powershell
wsl --install
```

WSL(Ubuntu)の初期セットアップをします。
efs-utilsをインストールしてみましたが、以下のエラーが出たため、いったん諦めます。
性能が良いため、重たい処理ですがすぐに終わりました。

```
 N: Download is performed unsandboxed as root as file '/home/dministrator/efs-utils/build/amazon-efs-utils-2.2.0-1_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
 ```

nfsクライアントをインストールします。

```
$ sudo apt install nfs-common
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
nfs-common is already the newest version (1:2.6.4-3ubuntu5.1).
nfs-common set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.
```

EFSをnfs4としてマウントします。

```
$ mkdir efs
$ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-07d21a23ea629c3f7.efs.ap-northeast-1.amazonaws.com:/ efs
```

正常にマウントできました。

```
$ df -h

fs-07d21a23ea629c3f7.efs.ap-northeast-1.amazonaws.com:/  8.0E  3.3G  8.0E   1% /home/dministrator/efs
```

適当にEFSに格納していたファイルも見えています。

```bash
$ tree -L 2 efs
efs
└── shared
    ├── New Text Document.txt
    ├── New folder
    ├── New folder.zip
    └── Program Files (x86)

4 directories, 2 files
```

書き込み性能です。

```
$ sudo dd if=/dev/zero of=efs/test.img bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.07046 s, 350 MB/s
```

読み込み性能です。キャッシュのせいか、かなり高速になっていますが、
コピーなどの操作を試したところ、相当快適に使えそうでした。

```
$ sudo dd if=efs/test.img of=test-local.img bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.831043 s, 1.3 GB/s
```

:::note
ベアメタルのEC2インスタンスであれば、WSL2を利用することができ、かなり安定したパフォーマンスに見えます。ですが、Windowsから直接見られない点と、ベアメタルインスタンスがかなり高額なため、現実的ではないように思います。
あと、WSL2経由のEFSマウントについて、サポートされるかどうかの言及はありません。
:::

### おまけ

以下の通り、インスタンスストアがついていました。せっかくなので検証してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/3a03e841-96f0-400a-9e82-346a61c94212.png)

フォーマットをして、Dドライブに割り当てました。
以下のコマンドでWSLからも利用可能になります。

```bash
$ sudo mkdir /mnt/d
$ sudo mount -t drvfs D: /mnt/d
```

書き込み性能です。

```bash
$ dd if=/dev/zero of=/mnt/d/test-d.img bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.34816 s, 321 MB/s
```

読み込み性能です。

```bash
$ dd if=/mnt/d/test-d.img of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.61906 s, 410 MB/s
```

インスタンスによって性能が異なると思いますので、カタログスペックの確認や性能評価をしてから使う必要があります。

# 4. Samba(Fargate)経由でマウント (非推奨)

現行アプリであるFargate(app)でEFSを使っています。
EC2(Windows)を使ってEFSがマウントできるかどうかという検証です。
直接は難しそうなため、Sambaを使いました。ただし、初期パラメータでマウントしたところ、エラーが頻発して使い物にならなかったため、チューニングをしたところ、安定したパフォーマンスが出るようになりました。

EC2(Windows)をPublic subnetに配置しているのは、RDPで接続しているためです。最初は、Private SubnetでFleet Managerを使っていましたが、すぐに固まるので、RDPに切り替えました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/410ff3cb-66d0-483e-b240-5f814796aa85.png)

:::note warn
Sambaで再共有がサポートされるかどうかも怪しいため、顧客がWorkspacesで参照する、夜間バッチなど、リトライ可能な処理で利用するなど、ミッションクリティカルな個所への導入は避けた方がよいと思います。
EFSサポートチームからすると、Samba経由でのWindowsマウントであればサポートされますかと質問されると、されますとは答えづらいと思います。
:::

## システム概要

### EFSのアクセスポイント設定

- **ルートディレクトリ:** `/shared`
- **POSIXユーザー設定:**  
  - ユーザーID: `1002`  
  - グループID: `1001`
- **ディレクトリのアクセス許可:**  
  - 所有者ユーザー: `1002`
  - 所有者グループ: `1001`
  - アクセス許可: `0775`

### AWS Fargate

- **NFS接続:**  
  - FargateからEFSへは、NFS（TCP/2049）を使用して接続。  
- **マウントポイント:**  
  - EFSアクセスポイントの `/shared` を Fargate側で `/mnt/efs/shared` にマウントする

### EC2 (Windows) と Samba

- **Sambaサーバ設定:**  
  - Fargate内の `/mnt/efs/shared` を、Sambaで共有フォルダ `/shared` として公開する。  
- **SMB接続:**  
  - EC2 (Windows) からは、SMB（TCP/445）を利用して `/shared` にアクセスする

:::note
ややこしいですが、EFSのアクセスポイントの/sharedとFargateのマウントディレクトリの/mnt/efs/sharedとSambaの共有名sharedはそれぞれ別物です。
:::



### Sambaコンテナの作成
CloudShellでの操作を想定しています。
ecs-sambaのようなディレクトリを作り、そこに移動して作業をします。

Sambaのconfファイルを作成します。
※nanoエディターの場合は、そのまま貼り付けられますが、viの場合は、:set pasteを使うときれいに貼り付けられます。

```ini:smb.conf
##############################################
# Samba Server 設定ファイル (smb.conf)
# この設定は、Fargate上で動作するSambaサーバとして、
# /mnt/efs/shared を group1 に所属するユーザ向けに共有します。
##############################################

[global]
   # ワークグループ名（Windowsネットワーク内でのグループ分け）
   workgroup = WORKGROUP

   # サーバの説明（ネットワークブラウザに表示される名称）
   server string = Samba Server on Fargate

   # ユーザ認証方式をユーザベースに設定
   security = user

   # 認証に失敗した場合、ゲストとして扱うか否かの設定（ここではゲストを使用しない）
   map to guest = Bad User

   # プリンタ機能を無効化（本サーバはファイル共有専用）
   load printers = no
   disable spoolss = yes

   # ログを標準出力へ出力する設定
   log file = /proc/self/fd/1
   max log size = 0
   log level = 2

##############################################
# 共有設定：group1 に所属するユーザに対して /mnt/efs/shared を公開
##############################################
[shared]
   # 共有の説明
   comment = Shared EFS Directory

   # 共有するディレクトリのパス（EFS上のマウント済みディレクトリ）
   path = /mnt/efs

   # 書き込み可能に設定
   writable = yes

   # ゲストアクセスは不可（必ず認証が必要）
   guest ok = no

   # 書き込み可能なユーザ（group1 に所属するユーザのみ）
   write list = @group1

   # アクセス可能なユーザの制限（group1 に所属するユーザのみ）
   valid users = @group1

   # 作成されたファイル・ディレクトリに対して group1 を強制する
   force group = group1

   # 新規作成ファイルのパーミッション設定（書き込み時にマスクとして適用）
   force create mode = 664

   # 新規作成ディレクトリのパーミッション設定
   force directory mode = 775

```

次に、Dockerfileを作成します。
グループおよびユーザは、今回はローカルとするため、Dockerfile内で作成しています。

```dockerfile:Dockerfile
FROM amazonlinux:2023

# OS のアップデートと必要パッケージのインストール
RUN dnf update -y && \
    dnf install -y samba samba-client && \
    dnf clean all

# group1 の作成（GID 1001）
RUN groupadd -g 1001 group1

# user1 と user2 の作成（UID 1002, 1003; プライマリグループとして group1 を指定）
RUN useradd -m -u 1002 -g group1 user1 && \
    useradd -m -u 1003 -g group1 user2

# Samba ユーザパスワードの設定（例として両ユーザとも "password" を設定）
# ※実運用時はセキュリティ上の理由から強固なパスワードを設定してください。
RUN (echo "password"; echo "password") | smbpasswd -a -s user1 && \
    (echo "password"; echo "password") | smbpasswd -a -s user2

# ※ 共有ディレクトリの作成とパーミッションの設定は、EFSアクセスポイントにより自動管理されるため省略

# smb.conf をコンテナ内の標準パスへコピー
COPY smb.conf /etc/samba/smb.conf

# ポート445のみを公開
EXPOSE 445

# Samba サービス (smbd) をフォアグラウンドで起動
CMD ["/usr/sbin/smbd", "--foreground", "--no-process-group", "-s", "/etc/samba/smb.conf"]

```

コンテナをビルドします。

```shell
docker build -t ecs-samba:latest .
```

### ECRにPush

サービスで「Elastic Container Registry」を検索し、Private registry→Repositoriesからレポジトリの作成をクリックします。

ECRのプライベートレポジトリを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/89027a13-953f-43f3-9fcc-73781655c0b0.png)

CloudShellに戻り、ECRにログインします。

```shell
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin <your-account-id>.dkr.ecr.<your-region>.amazonaws.com
```

DockerイメージにECRリポジトリのURIをタグ付けします。

```shell
docker tag ecs-samba:latest <your-account-id>.dkr.ecr.<your-region>.amazonaws.com/ecs-samba:latest
```

ECRにPushします。

```shell
docker push <your-account-id>.dkr.ecr.<your-region>.amazonaws.com/ecs-samba:latest
```

### EFSのアクセスポイントを作成

EFSのアクセスポイントを作成します。
EFSマウント後に、OSコマンドでディレクトリの作成やパーミッションを設定することもできますが、トラブルのもとになりやすいため、今回はEFS側でディレクトリの作成およびパーミッションを設定します。

対象のEFSファイルシステムを選択し、アクセスポイント→アクセスポイントの作成をクリックします。

名前とルートディレクトリは以下のようにしました。
※/sharedをEFSのルートディレクトリとして、Fargateの/mnt/efs/sharedにマウントします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/366c3f97-b2e4-496b-aa33-b988b9418395.png)

ユーザIDとグループIDを指定します。今回は、user1のUID、group1のGIDを指定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/8af61021-b295-4faa-9ed8-ce17ede95e91.png)

ルートディレクトリ作成のアクセス許可にも、上記と同様にuser1のUID、group1のGIDを指定します。
group1に対して許可を与えるため、パーミッションは0775としています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/26f48e61-d252-4c82-824f-e7b60f4110a4.png)

### IAMポリシーを作成（ECS Exec用）

IAMサービスから、アクセス管理-ポリシー→ポリシーの作成から、以下のポリシーを作成します。
JSON形式で直接入力しました。

```json:EFSMountPolicy
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
			    "elasticfilesystem:DescribeAccessPoints",
                "elasticfilesystem:DescribeMountTargets",
				"elasticfilesystem:ClientMount",
				"elasticfilesystem:ClientWrite"
			],
			"Resource": "*"
		}
	]
}
```

```json:ECSExecPolicy
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"ssmmessages:CreateControlChannel",
				"ssmmessages:CreateDataChannel",
				"ssmmessages:OpenControlChannel",
				"ssmmessages:OpenDataChannel"
			],
			"Resource": "*"
		}
	]
}
```

### タスク実行ロールを作成

ECSで使用するタスク実行ロールを作成します。
IAMサービスから、アクセス管理-ロール→ロールを作成をクリックします。

信頼されたエンティティタイプにAWSのサービスを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/7c447c8e-0e6a-4762-8f31-669edf12f5bd.png)

ユースケースには、Elastic Container Service Taskを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/ac7da071-4551-4a1e-9792-b30fccd48e06.png)

許可ポリシーに、AmazonECSTaskExectionRolePolicyと先ほど作成したEFSMountPolicyを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/ac420040-a157-4656-bcd5-efa2328d8247.png)

ロール名に、ecsSambaTaskExectionRoleと入力しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/c5af2d85-c8ff-49ae-8789-354e3c8092ba.png)

### タスクロールを作成

タスク実行ロールと同様の内容で、EFSMountPolicyとECSExecPolicyを割り当てます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/3409c4ad-168c-4f42-9159-1ebace71099d.png)

### ECSのタスク定義を作成

Amazon Elastic Container Serviceを選択し、タスク定義→新しいタスクの作成をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/b8adbf83-ac01-4580-8645-13b509395b7b.png)

Fargateを選択し、先ほど作成したタスクロールおよびタスク実行ロールを割り当てます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/5f0beebe-b53a-42ea-bec0-c2b13c6d2735.png)

ECRにプッシュしたイメージURIを指定します。
コンテナポートは、445/TCPを公開します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/53a285bf-2f20-4ff4-99e1-a1f96afadf79.png)

ログ収集の設定をします。CloudWatch logsに出力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/a53428e5-88fb-4021-b4c7-07297b35dd9e.png)

先ほど作成したEFSのファイルシステムIDとアクセスポイントIDを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/3ac96df0-2bf4-4895-9c1c-a281bcbabfe1.png)

転送暗号化およびIAM認証を有効にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/24c152b6-7537-4a3e-9f61-f084f9d011d9.png)


マウントポイントは、/mnt/efs/sharedにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/2c92f6ce-5077-442a-90cb-0e9a449517f4.png)

### ECSクラスターを作成

Amazon Elastic Container Serviceのクラスター→クラスターを作成をクリックします。

クラスター名を入力し、AWS Fargateを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/d1e5a63b-6648-4a87-a35d-80cb2cb961a1.png)

### ターゲットグループを作成

EC2サービスを選択し、ロードバランシング-ターゲットグループ→ターゲットグループを作成をクリックします。

インスタンスタイプはIPアドレスを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/b44e9b5f-2331-4938-a4fa-27eff219aac5.png)

ターゲットグループ名、プロトコル、VPCを設定して次へをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/8df0983d-d233-49b9-be14-229b634967d9.png)

ターゲットは削除し、ターゲットグループを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/28659578-b7c4-4909-a2bd-6b17b5b21fe6.png)

### セキュリティグループを作成（NLB用）

SMB(445)のインバウンドを許可するセキュリティグループを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/41023200-e175-4e4e-8d50-e59dfc0b34fb.png)

### NLBを作成

EC2サービスを選択し、ロードバランシング-ロードバランサー→ロードバランサーの作成をクリックします。
ロードバランサータイプは、Network Load Balancerを選択します。

内部向けとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/7eb68422-c5d7-4bb7-bf28-4523768f2e75.png)

VPCを割り当て、プライベートサブネットを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/e46e1d80-30f4-452a-ab4c-e72dfb5bef35.png)

先ほど作成したセキュリティグループを割り当てます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/9cf45e63-e745-4c31-971b-830963e11881.png)

リスナーにTCP/445を指定し、先ほど作成したターゲットグループを割り当てます。ロードバランサーを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/88b0a257-5a33-41ac-9a9b-2cd2ef35a38e.png)

### ECSサービスを作成

先ほど作成したタスク定義を選択し、デプロイ→サービスの作成をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/568cce09-3222-4085-a65d-083947905ae4.png)

クラスタ名を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/08449280-c0f3-4b2b-96bf-d30b9f19d0a1.png)

サービス名を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/77db762a-92ff-4721-b51e-cf037d382c02.png)

VPCおよびプライベートサブネットを割り当てます。セキュリティグループは先ほどNLBに割り当てたものを使用します。
**パブリックIPは忘れずにオフにしてください。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/253648d1-18f9-4d30-be01-abd9cab147d4.png)

先ほど作成したロードバランサーを割り当てます。サービスを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/32219df4-1d1f-49e2-b16f-6fbb49129f76.png)


### ECS Execで動作確認

先ほど作成したサービスのECS Execを有効にします。

```shell
aws ecs update-service \
  --cluster ecs-samba-cluster \
  --service ecs-samba-service \
  --enable-execute-command
```

サービスを再起動します。

```shell
aws ecs update-service \
  --cluster ecs-samba-cluster \
  --service ecs-samba-service \
  --force-new-deployment
```

古いタスクが残ったままの場合は、以下のように停止します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/84251eeb-957a-499c-866c-06d2a40278c9.png)

タスクIDを上記コンソールか、以下のコマンドで確認します。

```shell
aws ecs list-tasks \
  --cluster ecs-samba-cluster \
  --service-name ecs-samba-service
```

ECS Execで接続します。

```shell
aws ecs execute-command \
  --cluster ecs-samba-cluster \
  --task <your-task-id> \
  --container ecs-samba \
  --command "/bin/sh" \
  --interactive
```

sharedが正常に共有されていることを確認します。

```shell
sh-5.2# smbclient -L //localhost -U user1
Password for [WORKGROUP\user1]:

        Sharename       Type      Comment
        ---------       ----      -------
        shared          Disk      Shared EFS Directory
        IPC$            IPC       IPC Service (Samba Server on Fargate)
SMB1 disabled -- no workgroup available
```

:::note

ECS Execの設定に不備があり、以下のエラーが出ました。

```shell
~ $ aws ecs execute-command \
  --cluster ecs-samba-cluster \
  --task <your-task-id> \
  --container ecs-samba \
  --command "/bin/sh" \
  --interactive

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.

An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: The execute command failed due to an internal error. Try again later.
```

ECS Execの設定は、以下のツールによりチェックできるようです。

amazon-ecs-exec-checker
https://github.com/aws-containers/amazon-ecs-exec-checker

```shell
~ $ bash <( curl -Ls https://raw.githubusercontent.com/aws-containers/amazon-ecs-exec-checker/main/check-ecs-exec.sh ) <YOUR_ECS_CLUSTER_NAME> <YOUR_ECS_TASK_ID>

-------------------------------------------------------------
Prerequisites for check-ecs-exec.sh v0.7
-------------------------------------------------------------
  jq      | OK (/usr/bin/jq)
  AWS CLI | OK (/usr/local/bin/aws)

-------------------------------------------------------------
Prerequisites for the AWS CLI to use ECS Exec
-------------------------------------------------------------
  AWS CLI Version        | OK (aws-cli/2.23.13 Python/3.12.6 Linux/6.1.127-135.201.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023)
  Session Manager Plugin | OK (1.2.694.0)

-------------------------------------------------------------
Checks on ECS task and other resources
-------------------------------------------------------------
Region : ap-northeast-1
Cluster: ecs-samba-cluster
Task   : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-------------------------------------------------------------
  Cluster Configuration  | Audit Logging Not Configured
  Can I ExecuteCommand?  | arn:aws:iam::************:role/aws-reserved/sso.amazonaws.com/ap-northeast-1/AWSReservedSSO_AdministratorAccess_xxxxxxxxxxxx
     ecs:ExecuteCommand: allowed
     ssm:StartSession denied?: allowed
  Task Status            | RUNNING
  Launch Type            | Fargate
  Platform Version       | 1.4.0
  Exec Enabled for Task  | OK
  Container-Level Checks | 
    ----------
      Managed Agent Status
    ----------
         1. RUNNING for "ecs-samba"
    ----------
      Init Process Enabled (ecs-samba-task:8)
    ----------
         1. Disabled - "ecs-samba"
    ----------
      Read-Only Root Filesystem (ecs-samba-task:8)
    ----------
         1. Disabled - "ecs-samba"
  Task Role Permissions  | arn:aws:iam::************:role/ecsSambaTaskRole
     ssmmessages:CreateControlChannel: allowed
     ssmmessages:CreateDataChannel: allowed
     ssmmessages:OpenControlChannel: allowed
     ssmmessages:OpenDataChannel: allowed
  VPC Endpoints          | 
    Found existing endpoints for vpc-074e657c1a34d98d1:
      - com.amazonaws.ap-northeast-1.s3
    SSM PrivateLink "com.amazonaws.ap-northeast-1.ssmmessages" not found. You must ensure your task has proper outbound internet connectivity.
  Environment Variables  | (ecs-samba-task:8)
       1. container "ecs-samba"
       - AWS_ACCESS_KEY: not defined
       - AWS_ACCESS_KEY_ID: not defined
       - AWS_SECRET_ACCESS_KEY: not defined

```

チェックしましたが、不備はなく、IAMロール変更後にタスクの再起動が必要というオチでした。

:::

### 動作確認 (Windows)

EC2(Windows)を作成し、エクスプローラから、\\<NLBのエンドポイント>\sharedにアクセスします。ユーザ名とパスワードが聞かれるので、Dockerfile内で作成した、user1/passwordを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/ca67d58a-cbc9-41e6-af65-65bffd913693.png)

まずは、大量ファイル(1261ファイル)のアップロードです。それなりに安定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/09def3a9-fff0-44ac-b5fc-17af5736eb4d.png)

次に、1GB以上のファイルのダウンロードです。こちらもそれなりに安定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/bed5b548-ea89-4bd4-9dd2-266020f2caa2.png)

サポートされない心配はありますが、それなりに使えそうな感じです。

# 5. AWS Transfer Familyを使ってEFSのデータにアクセス (サポート)

AWS Transfer FamilyのTransfer for SFTPを使ってEFSにアクセスする検証を行いました。
SFTPを使うことができれば、WinSCPなどを使って、Windowsからでもアクセスすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/61accd74-9b7b-44e4-b10f-75e531fcd2fd.png)

### SFTPユーザ用IAMロールを作成

IAMロールを新規作成します。ユースケースはTransferを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/b86888e1-3101-4d8e-a654-e5b06a71bdf7.png)

最初に作成したEFSMountPolicyを追加します。
※アクセスポイントやマウントをしないため、少し過剰な権限です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/d36af020-1412-4529-a5b1-c50ffc89424e.png)

名前を付けて作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/e4cbff6a-c74c-4625-b0fc-c3fee01f9388.png)

### セキュリティグループを作成

インバウンドの22番を許可するセキュリティグループを作成します。
ソースはVPCのCIDRにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/5ed6ed1f-9fc3-4c60-9a10-25077ddd48e9.png)

### Transfer Familyのサーバを作成 (SFTP)

SFTPを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/65551fe6-7730-4f01-a7b8-14ba0224e92a.png)

IDプロバイダーはサービスマネージドを選択しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/ca58660c-9628-4f08-9b68-354cb2301fdd.png)

VPC内で利用するため、VPCでホストを選択しました。VPCの情報及びプライベートサブネットを登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/3d6bcbb3-c495-44f5-ab00-f5d7a3752f19.png)

先ほど作成したセキュリティグループを割り当てます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/4c31c9b3-c3d1-45fd-8b23-ea62c8f195c3.png)

今回の検証目的であるEFSを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/fc585d42-dfc8-458b-9b77-45e0f295ed0c.png)

以下はデフォルトとしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/ce5902ed-43fe-4b18-9943-c82a40f38ae3.png)

その他はデフォルトで次へをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/8c3f580e-e8c5-4252-8303-f813258c3cfd.png)

:::note info
暗号化アルゴリズムのオプションでセキュリティポリシーが表示されないことがありましたが、何度か作り直せば表示されました。
:::

サーバーを作成をクリックします。

### ユーザのSSHキーを作成

以下のドキュメントを参考に作成します。

https://docs.aws.amazon.com/ja_jp/transfer/latest/userguide/key-management.html#sshkeygen

WindowsなのでPuTTYを使いました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/f2512ad1-3db6-4c2a-b4bd-76dc4e652e14.png)

PEM形式に変換する必要があったため、CloudShellで以下のように変換しました。

```
ssh-keygen -i -f sftp-key.putty.pub > sftp-key.pub
```

### ユーザーを作成

ユーザーを追加をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/c273efe9-edbb-4230-8522-6a6fb200722c.png)

ユーザ情報を入力します。
※Sambaで作成したアクセスポイントの情報を入力しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/afcd00b2-b614-4418-8d8c-0a831bd9d8c4.png)

先ほど変換した公開鍵を登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/a1172ec5-d157-4fa1-94c3-33160628dfb0.png)

### Route53 プライベートホストゾーンに登録

エンドポイントが作成されなかったため、プライベートホストゾーンに登録しました。
※事前にVPCに関連付けたプライベートホストゾーンを作成していました。SFTPはIPアドレス直でも利用可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/e1aa6750-37af-48e4-b757-5c25fb638a51.png)

### 動作確認

WinSCPを使って接続しました。

Route53に登録したレコードまたはIPアドレスを入力し、先ほど作成したユーザ名を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/7505a866-78b3-4a96-88f4-84663e7e246f.png)

AdvancedからSSH-Authenticationで、秘密鍵を登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/97c5d32c-fd75-4a7d-a997-008fda1c0f72.png)

無事、接続できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/91794f06-edc9-4dee-bcd6-cd46818dde1d.png)


# 6. DataSyncを使ってEFSからFSx for Windows File Serverへコピー (サポート)

FSx for Windows File Serverを作成します。FSx for Windows File Serverを使うためには、Active Directoryが必要なため、AWS Managed Microsoft ADを使いました。EFSのデータをDataSyncを使ってコピーしています。リアルタイム性はありませんが、大量データを参照したいケースに適しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/d4e33563-a503-43c8-8d1b-042f643cb87f.png)

### AWS Managed Microsoft Active Directoryを作成

Directory Serviceから、ディレクトリのセットアップをクリックします。

ディレクトリタイプにAWS Managed Microsoft ADを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/c7a54673-7d30-450f-bb83-de6d997616db.png)

Standard Editionを選択しました。
ディレクトリ名とadminのパスワードを入力して次へをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/0a60a046-618a-4fec-a26f-0dcf65c90233.png)

:::note warn

Transfer for SFTPで作成したプライベートホストゾーンと同じドメイン名にしていました。同じドメインはダメということで、プライベートホストゾーンは削除しました。

>DNS に Amazon Route 53 を使用する予定の場合、AWS Managed Microsoft AD のドメイン名は Route 53 のドメイン名と異なる必要があります。Route 53 と AWS Managed Microsoft AD が同じドメイン名を共有している場合、DNS 解決の問題が発生する可能性があります。

https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started.html
:::

VPCとサブネットの情報を入力して次へをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/b440edf5-27fb-4b97-8041-0c8cfa256608.png)

問題がなければ、ディレクトリの作成をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/3e429a32-3d5b-40e3-bb9f-edece6d88e3b.png)

:::note
AWS Managed Microsoft Active Directoryの作成は時間がかかります。ステータスがアクティブになるまで待ちます。
:::

### Windows ServerをAWS Managed Microsoft ADに統合

作成したManaged ADのDNSアドレスを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/84315d4c-5d3a-41b2-95c2-baf8742f7698.png)

ネットワークのプロパティを開き、DNSを登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/658f36d3-6935-4d6e-a1a6-91e07462cb03.png)

次にシステムプロパティから、ドメインに参加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/8ca3d07d-c669-4de0-8459-42cc03feb01f.png)

ドメイン名を入力します。管理者のユーザ名とパスワードが聞かれるので、Managed AD作成時に指定したadminとパスワードを入力します。再起動がもとめられるので再起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/3708bf04-5ee3-4e86-88de-8586524f6fc6.png)

:::note
必要に応じてAD管理ツールをインストールします。

https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/ms_ad_install_ad_tools.html
:::

### Amazon FSx for Windows File Serverを作成

FSxからファイルシステムを作成をクリックします。

Amazon FSx for Windows File Serverを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/176773b5-bb99-4928-b0e8-f27b52b80685.png)

必要な情報を入力します。Windows認証には先ほど作成したAWS Managed Microsoft Active Directoryを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/015e6273-541e-4637-92ca-65517fcd10a0.png)

内容を確認して問題がなければ、ファイルシステムを作成をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/fd86b8e8-6e1d-41a2-ade1-b47155902762.png)

:::note
FSx for Windows File Serverの作成にもそれなりに時間がかかります。
:::

### セキュリティグループの作成（FSx for Windows File Server用）

FSxは、インバウンド通信にTCP/445,5985が必要のようです。アウトバウンドはいろいろとありますが、VPC内ですべての通信を許可しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/a1b9a6ff-a739-4121-9339-13d84e422a69.png)

https://docs.aws.amazon.com/fsx/latest/WindowsGuide/limit-access-security-groups.html

以下のセキュリティグループを作成しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/dbec24ab-29ed-4765-912c-d61a21d87058.png)

FSx for Windows File Serverは、セキュリティグループの変更メニューがありません。以下のネットワークインタフェースからたどって、ENIごとにセキュリティグループを変更するようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/c86a528d-1c3e-47bb-9127-5d76f14aa2d9.png)

以下のように変更できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/2e712010-462d-41bd-8317-7e6f15dc4b1c.png)

セキュリティグループを変更後、\\<FSxのDNS名>\shareにアクセスできます。
ユーザとパスワードが求められるので、とりあえずは、ドメイン管理者(admin)を入力しました。
※実際に運用する場合は、ADのユーザを作成してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/3d9178e7-dacd-46b7-9b1a-6a70cc84041e.png)

:::note
EC2(Windows)からFSx for Windows File Serverをマウントしようとしたところ、アクセスできなかったので、Reachability Analyzerを使って確認しました。FSxのeniのセキュリティグループに原因があるとわかりました。クイック作成をすると、defaultセキュリティグループが割り当てられるようです。スタンダード作成の方が細かく設定できるのでよいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/b46a0670-6aea-401c-ad76-899b4a0a8bdf.png)
:::

### AWS DataSyncのタスクを作成

DataSyncサービスのData transfer-タスク→タスクを作成するをクリックします。

送信元のロケーションを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/3f8b8ae4-fd64-4d68-89d6-bcf7b3223832.png)

送信先のロケーションを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/e7c7a9c5-454b-492d-b143-2985ec8cf366.png)

タスク情報を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/74b983dd-0ec0-4452-90a7-8649fce49725.png)

続きを入力します。今回はスケジュール実行をせず、手動実行とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/f61b3975-d19d-4151-bbd1-90bac84d90fe.png)

### タスクを実行

タスクを手動で実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/f36a0d20-d43e-404f-a22d-7a52357957c1.png)

正常に実行されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/7838d467-2fb9-4076-bc10-54b3de8cb6dc.png)

### 動作確認

同期したファイルがFSx for Windows File Serverで表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117889/3380acc5-f6ea-4334-9e7b-7637d7acdbd2.png)

その後、EFSに追加したファイルも、タスクを再実行することで移行されました。

# 7. まとめ

- **Samba(Fargate)経由でマウント (非推奨)**
  Sambaの再共有を使っているため、本番環境ではサポートされない可能があります。ですが、最も使いやすい構成のため、開発者がファイルを確認したり、顧客参照用など、ミッションクリティカルではない場合は選択肢の一つになるかもしれません。
- **AWS Transfer Familyを使ってEFSのデータにアクセス (サポート)**
  読み書きができ、サポートされる構成のため、最も無難な構成と考えます。オンプレのユーザからVPN経由でアクセスしたり、応用範囲も広い構成です。アプリケーションに組み込む場合は、SFTPなど、Transfer Familyで利用可能なプロトコルに合わせた実装が必要となります。
- **DataSyncを使ってEFSからFSx for Windows File Serverへコピー (サポート)**
  リアルタイムな同期ができず、移行元であるEFSに書き込みができないため、用途としては限定的です。参照のみのバッチ処理などでは適した構成です。