AWS CLIを使ってJetson NanoとS3のデータ同期を試してみる

# 概要
AWS CLIを使ってJetson NanoとS3のデータ同期をテストした時のログを残しておきます。
テストの結果、JetsonとS3間でも``aws s3 sync``を使うと、差分のみのデータ同期、削除は同期しないといったデータ同期が可能であることが確認できました。
プログラムを作らなくても手軽にデータ同期の仕組みを作れそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/734fbb08-4e04-4b74-ce07-fc4d162f0b59.png)


AWS CLIは、Linux ARMもサポートしており、Jetsonでも動作するようです。

AWS CLI v2 now available for Linux ARM
https://aws.amazon.com/jp/blogs/developer/aws-cli-v2-now-available-for-linux-arm/

# 環境
Jetson Nano
Jetpack 4.4.1

AWS CLIのバージョンは以下

```
$ aws --version
aws-cli/2.1.21 Python/3.7.3 Linux/4.9.140-tegra exe/aarch64.ubuntu.18 prompt/off
```


# AWS CLIのインストール
以下の手順に従ってインストールします。
https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html#ARM

curlがなかったので入れておきます。

```
sudo apt install curl -y
```

手順にある以下のコマンドでインストールします。

```
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
```

導入されたことを確認します。

```bash:
$ /usr/local/bin/aws --version
aws-cli/2.1.21 Python/3.7.3 Linux/4.9.140-tegra exe/aarch64.ubuntu.18 prompt/off
```

Access Key、Secret Access等の接続の設定を行います。

```
$ aws configure
AWS Access Key ID [None]: xxxxxxx
AWS Secret Access Key [None]: xxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json
```

# JetsonとS3のデータ同期をテスト
ディレクトリを作成して、ファイルを５つ作成します。
``aws s3 sync``でデータ同期を行い、ファイルが5つアップロードされることを確認します。

```
nvidia@nvidia-desktop:~/work$ aws s3 ls tsota-jetson --recursive  
nvidia@nvidia-desktop:~/work$ mkdir test
nvidia@nvidia-desktop:~/work$ for i in `seq 1 5`; do touch test/${i}.txt; done
nvidia@nvidia-desktop:~/work$ ls -l test
total 0
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 1.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 2.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 3.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 4.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 5.txt
nvidia@nvidia-desktop:~/work$ aws s3 sync test s3://tsota-jetson/test/ 
upload: test/2.txt to s3://tsota-jetson/test/2.txt
upload: test/5.txt to s3://tsota-jetson/test/5.txt
upload: test/3.txt to s3://tsota-jetson/test/3.txt
upload: test/4.txt to s3://tsota-jetson/test/4.txt
upload: test/1.txt to s3://tsota-jetson/test/1.txt
nvidia@nvidia-desktop:~/work$ aws s3 ls tsota-jetson --recursive
2021-01-24 11:16:19          0 test/1.txt
2021-01-24 11:16:19          0 test/2.txt
2021-01-24 11:16:19          0 test/3.txt
2021-01-24 11:16:19          0 test/4.txt
2021-01-24 11:16:19          0 test/5.txt
```

追加データで5つのデータを作成します。
``aws s3 sync``でデータ同期を実施して、差分の5ファイルがアップロードされることを確認します。

```
nvidia@nvidia-desktop:~/work$ for i in `seq 6 10`; do touch test/${i}.txt; done
nvidia@nvidia-desktop:~/work$ ls -l test
total 0
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:16 10.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 1.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 2.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 3.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 4.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 5.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:16 6.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:16 7.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:16 8.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:16 9.txt
nvidia@nvidia-desktop:~/work$ aws s3 sync test s3://tsota-jetson/test/ 
upload: test/7.txt to s3://tsota-jetson/test/7.txt
upload: test/10.txt to s3://tsota-jetson/test/10.txt
upload: test/9.txt to s3://tsota-jetson/test/9.txt
upload: test/6.txt to s3://tsota-jetson/test/6.txt
upload: test/8.txt to s3://tsota-jetson/test/8.txt
```
既存ファイルを更新して同期されることを確認します。
1.txtの内容を更新して、``aws s3 sync``でS3のバケットが更新されることを確認します。

```
nvidia@nvidia-desktop:~/work$ echo "abcdef" > test/1.txt 
nvidia@nvidia-desktop:~/work$ ls -l test
total 4
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:16 10.txt
-rw-rw-r-- 1 nvidia nvidia 7  1月 24 11:17 1.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 2.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 3.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 4.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:15 5.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:16 6.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:16 7.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:16 8.txt
-rw-rw-r-- 1 nvidia nvidia 0  1月 24 11:16 9.txt
nvidia@nvidia-desktop:~/work$ aws s3 sync test s3://tsota-jetson/test/ 
upload: test/1.txt to s3://tsota-jetson/test/1.txt              
nvidia@nvidia-desktop:~/work$ aws s3 ls tsota-jetson --recursive
2021-01-24 11:17:48          7 test/1.txt
2021-01-24 11:16:54          0 test/10.txt
2021-01-24 11:16:19          0 test/2.txt
2021-01-24 11:16:19          0 test/3.txt
2021-01-24 11:16:19          0 test/4.txt
2021-01-24 11:16:19          0 test/5.txt
2021-01-24 11:16:54          0 test/6.txt
2021-01-24 11:16:54          0 test/7.txt
2021-01-24 11:16:54          0 test/8.txt
2021-01-24 11:16:54          0 test/9.txt
```
削除をテストしてみます。
S3への削除の同期は、--deleteオプションを指定する必要があります。
最初は--deleteオプションなしで実行して、削除が同期されないことを確認します。
次に--deleteオプションをつけて、削除が同期されることを確認します。

```
nvidia@nvidia-desktop:~/work$ rm test/*.txt
nvidia@nvidia-desktop:~/work$ ls -l test
total 0
nvidia@nvidia-desktop:~/work$ aws s3 sync test s3://tsota-jetson/test/ 
nvidia@nvidia-desktop:~/work$ aws s3 ls tsota-jetson --recursive
2021-01-24 11:17:48          7 test/1.txt
2021-01-24 11:16:54          0 test/10.txt
2021-01-24 11:16:19          0 test/2.txt
2021-01-24 11:16:19          0 test/3.txt
2021-01-24 11:16:19          0 test/4.txt
2021-01-24 11:16:19          0 test/5.txt
2021-01-24 11:16:54          0 test/6.txt
2021-01-24 11:16:54          0 test/7.txt
2021-01-24 11:16:54          0 test/8.txt
2021-01-24 11:16:54          0 test/9.txt
nvidia@nvidia-desktop:~/work$ aws s3 sync test s3://tsota-jetson/test/ --delete
delete: s3://tsota-jetson/test/1.txt
delete: s3://tsota-jetson/test/5.txt        
delete: s3://tsota-jetson/test/10.txt       
delete: s3://tsota-jetson/test/4.txt        
delete: s3://tsota-jetson/test/6.txt        
delete: s3://tsota-jetson/test/7.txt        
delete: s3://tsota-jetson/test/8.txt        
delete: s3://tsota-jetson/test/9.txt        
delete: s3://tsota-jetson/test/2.txt        
delete: s3://tsota-jetson/test/3.txt        
nvidia@nvidia-desktop:~/work$ aws s3 ls tsota-jetson --recursive
nvidia@nvidia-desktop:~/work$ 
```

以上。