amplify mock api での DynamoDBへの接続（amplifyのワークショップ）

AWSが提供する、NoSQLWorkbench があり、それを使うとAWSの`クラウド側のDynamoDB`、自身の端末に入れた`DynamoDB Local`に接続ができる。そのため、workbenchを使って接続したが、テーブルが見られなかった。そのため代替手段を探してみた
調査不足であるが、Workbenchが読み込む何らかの設定でキー（region、accessKeyId、secretAccessKey）が指定できれば接続できるとは思う。

## 環境
Windows10でDocker WSL2と `amplify` を VSCodeのリモートコンテナを使っている

- Windows10
- Docker WSL2
- Amplify
- VSCodeのリモートコンテナを使っている
- ホスト：自身の端末PC
- リモートコンテナは https://github.com/toricls/aws-amplify-sns-workshop-in-vscode を使っている

## 状況
- コンテナの中で、amplify（とDynamoDB Local相当）は動いている
- amplify で、`$ amplify mock api ` を実行すると、Amplify GraphQL Explorer機能でGraphQLのスキーマクエリーを手軽に実行できるWEB UIがある
- mockapiの実行
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/ee1c9865-192f-5078-2629-54232f51e0b1.png)

- Web UIの URL： http://localhost:20002/
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/5bb1fc0c-53a1-2a34-6d48-16ca9ab6a84e.png" width=80%>

そのWeb UIでは 
（名称は仮）createPost, deletePost, getPost, listPosts が自動で作られ、データの投入、削除、取得ができる。DynamoDBへのPutItem、getItem、Query、Filter相当を指定できるUIとレスポンス結果のjsonを見られる機能がある。
で、その`amplify mock api`で使っているDynamoDBに接続してアイテムの変更や削除がしたいと思った。UI機能よりも手軽にデータ削除がしたかった。


- `amplify mock api`では、DynamoDBはポート62224で起動する、コンテナ内のプロセスを見ると、ポートは62224で起動している。

```
root ➜ / $ ps -aux|grep DynamoDB
root     18929  0.1  1.0 14210040 262472 pts/0 Sl+  May25   2:33 /usr/bin/java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -port 62224 -dbPath /workspaces/amplify-sns-workshop/boyaki/amplify/mock-data/dynamodb
```
- 自身のホスト端末からNoSQLWorkbenchで接続するための設定等
    - ローカルへの接続で62224を指定する
![03-workbench-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/3ab43dbc-e4bd-54c4-fd36-a13d02ff7566.png)
    - Access key ID と Secret access keyは変更不可（disabled）
![03-workbench-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/a2f39b36-1db1-bceb-928a-f43dcae91341.png)
    - 接続はできるが権限なのかテーブルが見つからない
![03-workbench-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/ea8aa530-92d6-20dd-1645-9e166697bdf9.png)

- DynamoDB Localでは、以下を指定する（デフォルトで決まるのかも）が、workbenchではそれらを指定できなかった

```
  region: 'us-fake-1';
  accessKeyId: 'fake';
  secretAccessKey: 'fake';
```

## 代替の対応
- 探してみると、https://www.gravitywell.co.uk/insights/how-to-use-your-mocked-dynamodb-with-appsync-and-lambda/ で、記載されていた [dynamodb-admin](https://github.com/aaronshaf/dynamodb-admin) というツールが公開されていて、それだとDynamoDB操作のUI機能がある
- そのツールGithubのreadme.mdに記載のあるような対応で見られた。なお、Windows環境なので、Mac等では setを変える必要がある。

- 自身の端末に`dynamodb-admin`を入れて環境変数をセットして、実行する。コンテナ側には入れていない。
- readmeでは以下

```
npm install -g dynamodb-admin

# For Windows:
set DYNAMO_ENDPOINT=http://localhost:8000
dynamodb-admin
```

上記を、コンテナ相当に置き換えると、npmでインストールした後は

```
set DYNAMO_ENDPOINT=http://localhost:62224
set AWS_REGION=us-fake-1
set AWS_ACCESS_KEY_ID=fake
set AWS_SECRET_ACCESS_KEY=fake
dynamodb-admin
```

- コマンド実行
![dynamodb-admin-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/2f25c840-6b1b-8897-8985-aba7ba7ad6db.png)

- 画面のUIを開く、http://localhost:8001/
    - ポートが8001なのはコンソールでそう表示されているため
![dynamodb-admin-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/e4cf4f20-bfac-813d-97cf-805241b5b151.png)

これで、少し楽にDelete（remove item）ができるようになった
情報は英語が多いな