【Win10】AWS CLIでS3にファイルをアップロード & バックアップ用のバッチファイルを作成する

# 概要
本書ではWindows10にAWS CLIをインストールし、S3にローカルのファイルをアップロードします。またAWS CLIとS3を利用したバックアップ用のバッチファイルを作成します。

## 0. 前提条件
* AWS S3のバケットを作成していること。
* IAMユーザーを作成し、AWS S3のIAMロールを適用していること。
* 作成したIAMユーザーのアクセスキーID,シークレットアクセスキーを生成していること。
* <注意>AWSを不正に利用されないために、アクセスキーIDとシークレットアクセスキーの取り扱いに十分気を付けてください。
* 本書ではWindows10 Proを使用します。

## 1. AWS CLIのインストール

1. https://aws.amazon.com/jp/cli/ に移動し、Windows用のAWS CLIをダウンロードする。
![001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/88277c8e-2fcf-b06b-2ca9-b7d5b521f7a5.jpeg)

2. ダウンロードした「AWSCLI64PY3.msi」を起動する。
![008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/c88b3c5c-ab2c-522c-3145-c3413ec5d9f4.jpeg)

3. 「Next」をクリックする。
![002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/8c3bc117-c006-cc29-ddfe-ccff90a9f7f7.jpeg)

4. 「I accept terms in the License Agreement」にチェックを入れ、「Next」をクリックする。
![003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/a4a89c71-e23d-c74f-9baf-403551f4a604.jpeg)

5. インストール先を指定し、「Next」をクリックする。
![004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/6d11e15d-b458-516c-9fed-97e65cf48f1f.jpeg)

6. 「Install」をクリックする。
![005JPG.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/8d7336b0-717e-16d5-841c-937f64a1f240.jpeg)

7. インストールが完了するまで待機する。
![006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/c93b4f6a-535b-21e9-6cc2-31ba9e39cedb.jpeg)

8. 「Completed the AWS Command Line Interface Setup Wizard」と表示されることを確認し、「Finish」をクリックする。
![007.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/88db87af-b5af-6ba2-e20c-4d9d785efd9a.jpeg)

## 2. AWS CLIの初期設定

1. コマンドプロンプトを起動する。

2. AWS CLIのインストール確認のため、AWS CLIのバージョンを表示する。

    ```
    > aws --version
    aws-cli/1.16.292 Python/3.6.0 Windows/10 botocore/1.13.28
    ```

3. AWS CLIに作成したIAMユーザーを紐づける。

    ```
    > aws configure
    AWS Access Key ID [None]: アクセスキーID
    AWS Secret Access Key [None]: シークレットアクセスキー
    Default region name [None]: リージョン(東京の場合はap-northeast-1)
    Default output format [None]: json
    ```

4. AWS CLIにIAMユーザーが紐づいたことを確認する。

    ```
    > aws sts get-caller-identity
    {
        "UserId": "xxxxxxxxxxxxxxxxxxxxx",
        "Account": "xxxxxxxxxxxx",
        "Arn": "arn:aws:iam::xxxxxxxxxxxx:user/xxxxxxx"
    }
    ```

## 3. S3にローカルのファイルをアップロード

1. 作成したAWS S3のバケットを表示する。

    ```
    > aws s3 ls
    2019-12-01 19:44:02 バケット名
    ```

2. ローカルのファイルを作成したバケットにコピーする。

    ```
    > aws s3 cp "C:\tmp\test_windows10.txt" s3://バケット名
    ```
<br>※ファイルをバケットに移動する際は`aws s3 mv "ローカルのファイル" s3://バケット名`を実行する。

3. バケットにファイルがコピーされたことを確認する。

    ```
    > aws s3 ls s3://バケット名
    2019-12-01 20:27:23          8 test_windows10.txt
    ```

## 4. バックアップ用のバッチファイルを作成する

### 作成例

〇バッチファイル

```
@echo off
rem Declaring the folder to be backed up.
set backup_folder="C:\tmp\

rem Generate the backup date (YYMMDD format) when the batch file was executed.
set datefile=%date%
set datefile=%datefile:/=%

rem Harden the folder to be backed up into a zip file.
powershell Compress-Archive -Path %backup_folder% -DestinationPath D:\backup-%datefile%.zip

rem Upload backup target zip folder to AWS S3 bucket.
aws s3 mv "D:\backup-%datefile%.zip" s3://バケット名/

rem View files in an AWS S3 bucket.
aws s3 ls s3://バケット名

pause

exit 0
```

〇実行結果

```
move: D:\backup-20191201.zip to s3://バケット名/backup-20191201.zip
2019-12-01 21:19:35        349 backup-20191201.zip
続行するには何かキーを押してください . . .      
```
### 作成例の流れ

本書で作成しましたバックアップ用のバッチファイルの流れを下記に記載します。

1. 「backup_folder」変数にバックアップ対象のフォルダを指定する。

    ```
    set backup_folder="C:\tmp\
    ```

2. 「datefile」変数にバックアップ日(YYMMDD形式)を生成する。

    ```
    set datefile=%date%
    set datefile=%datefile:/=%
    ```

3. バックアップ対象のフォルダをzipファイルに固める。

    ```
    powershell Compress-Archive -Path %backup_folder% -DestinationPath D:\backup-%datefile%.zip
    ```

4. バックアップ対象のzipファイルをS3バケットに移動する。

    ```
    aws s3 mv "D:\backup-%datefile%.zip" s3://バケット名/
    ```

5. バケットに保存されているファイルを表示する。

    ```
    aws s3 ls s3://バケット名
    ```

6. バックアップ結果を確認するため、一時停止する。

    ```
    pause
    ```

## 最後に
AWS CLIを利用することでAWSマネジメントコンソールを開かずにS3にファイルをアップロードすることができます。またS3を利用したバックアップ用のバッチファイルを作成することで、AWSマネジメントコンソールを経由せずにバックアップ対象のファイルをS3にアップロードすることができます。