【AWS CLI】実際に業務で使ったAWSのコマンドたち

# はじめに
実際に業務の時にとったAWSCLIのメモを整理して記事にしました。

# S3

### オブジェクト削除
```
aws s3 rm s3://{バケット名}/{削除するファイルパス} 
例： aws s3 rm s3://test-bucket/test1/test.txt
```

### ファイル一覧取得
```
aws ls s3://{バケット名}/{フォルダパス}
例： aws ls s3 s3://test-bucket/test1 --recursive
```

### ファイルをコピー
```
aws s3 cp {コピー元パス} {コピー先パス}
例： aws s3 cp s3://test-bucket/test1/test.txt ./local
```
オプションの--include --excludeは業務でよく使ってた。
指定する時にワイルドカードが使用できる。
ファイルの絞り込みの時に--excludeで一度全ファイル除外してから--include使わないと絞り込めないので注意。

```
aws s3 cp s3://test-bucket/test1/ ./local --recursive --exclude "*" --include　"test*"
```

### ファイル移動

```
aws s3 mv {コピー元パス} {コピー先パス}
aws s3 mv s3://test-bucket/test1/test.txt ./local
```


### オプション
|オプション       　　　　　　 |説明                 | 
|:-----------------|:------------------:|
| --dryrun             |実際にコマンドを実行した時の結果を確認できる| 
| --recursive           |指定フォルダ内のオブジェクトを全て指定| 
| --exclude             |指定したファイルのパターンを含むファイルを除外| 
| --include               |指定したファイルのパターンを含むファイルを許可| 
| --quiet| コマンドの実行ログを非表示にする|
|--human-readable|ファイルサイズを人が読める形式で表示|
|--summarize|最低限のデータのみ取得(ファイルサイズ, ファイル名)|


#### 使用できるオプション一覧
|       　　　　　　 |rm                 | ls|cp|mv|
|:-----------------|:------------------:|:------------------:|:------------------:|:------------------:|
| --dryrun             |○| ✖︎|○|○|
| --recursive           |○| ○|○|○|
| --exclude             |○| ✖︎|○|○|
| --include               |○|✖︎| ○|○|
| --quiet| ○|✖︎|○|○|
|--human-readable|✖︎|○|✖︎|✖︎|
|--summarize|✖︎|○|✖︎|✖︎|


# SQS

### キューの作成
```
aws sqs create-queue --queue-name {キューの名前}
例： aws sqs create-queue --queue-name test-queue
```

### キューの削除
```
aws sqs delete-queue --queue-url {キューのURL}
例： aws sqs delete-queue --queue-url https://...
```
### キューの情報確認
```
# キューのURL一覧
aws sqs list-queues

# 指定したキューのURL取得
aws sqs get-queue-url --queue-name {キューの名前}
例： aws sqs get-queue-url --queue-name test-queue

# キューの属性を取得
# Allじゃなくて属性名指定したら指定した属性のみ取得できる
aws sqs get-queue-attributes --queue-url {キューのURL} --attribute-names All
```

### キューにメッセージ送信
```
aws sqs send-message --queue-url {キューのURL} --message-body "{メッセージ}"
例： aws sqs send-message --queue-url https://... --message-body "Hello!"
```

### メッセージの取得
順番とか関係なしで1メッセージ取得される

```
aws sqs receive-message --queue-url {キューのURL}
例： aws sqs receive-message --queue-url https://...
```

### ReceiptHandleの取得
メッセージの取得で取得したデータをjq使って抽出するだけ

```
aws sqs receive-message --queue-url {キューのURL}
例： aws sqs receive-message --queue-url https://... | jq -r 'Messages[].ReceiptHandle'
```
jqを使用して取得
それ以外の方法しらない、ご存知の方教えて欲しい

### メッセージの削除
```
aws sqs delete-message --queue-url {キューのURL} --receipt-handle {ReceiptHandle}
```

### SQSにあるメッセージをCLIで全削除
全削除のコマンド見つからなかったからシェル作った

```
BIN_PROFILE=$1
SQS_URL=$2

while [ true ]
do
    RECEPT_HUNDLE=`aws --profile ${BIN_PROFILE} sqs receive-message --queue-url ${SQS_URL} | jq -r '.Messages[].ReceiptHandle'`

    if [ "$RECEPT_HUNDLE" = "" ]
    then
        echo "全てのキューを削除しました"
        break
    fi
    aws --profile ${BIN_PROFILE} sqs delete-message --queue-url ${SQS_URL} --receipt-handle "$RECEPT_HUNDLE"
done
```

# SNS
### メッセージ送信

```
aws sns publish --topic-arn {トピックのarn} --messeage "{メッセージ}"
例： aws sns publish --topic-arn arn:aws:sns... --messeage "helllllllllllllllo!!!!"
```


# Athena

### Athenaの実行状況を確認

```
aws athena get-query-execution --query-execution-id {execution-id}
```

# おわり
閲覧いただきありがとうございました。