1. honmaaax

    No comment

    honmaaax
Changes in body
Source | HTML | Preview
@@ -1,56 +1,57 @@
## 先に結論
-DynamoDB LocalとCognitoを併用する場合は、必ず**別々のendpoint**を定義する
+DynamoDB LocalとCognitoを併用する場合は、必ず**別々のendpoint**を定義する
+特にCognito側のendpointを書く事例はほとんど見かけないので忘れがち。
```utils/auth.js
import AWS from 'aws-sdk'
const cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider({
apiVersion: '2016-04-18',
region: 'ap-northeast-1',
endpoint: `https://cognito-idp.ap-northeast-1.amazonaws.com/`,
})
export default function auth(AccessToken) {
return new Promise((resolve, reject)=>{
cognitoIdentityServiceProvider.getUser({AccessToken}, (err, data)=>{
if (err) return reject(err)
return resolve(data)
})
})
}
```
```utils/dynamoose.js
import dynamoose from 'dynamoose'
dynamoose.AWS.config.update({region:'ap-northeast-1'})
if ( process.env.NODE_ENV === 'dev' ) {
dynamoose.AWS.config.endpoint = new dynamoose.AWS.Endpoint('http://localhost:8000')
}
export default dynamoose
```
## 前提
* 今回のケースではNode.jsのdynamooseというORMを使っているが、その他のケースでも発生する可能性があるので念のためメモ。
* ServerlessFrameworkを使用しているが、それは今回の件とは関係ないはず?
## 経緯
* ServerlessFrameworkのプラグイン `serverless-dynamodb-local` を使って、DynamoDB Localを起動し、Cognitoでユーザー管理をしようとした
* アプリケーションを実行すると、1度目は成功するが2度目で必ず下記エラーが出ることに気づいた
```
MissingAuthenticationToken: Request must contain either a valid (registered) AWS access key ID or X.509 certificate.
```
* AccessTokenが間違えてるのかなと思ったが合ってた
* リージョン指定が間違えてるのかなと思ったが合ってた
* DynamoDBの向き先をローカルではなく本番に向けたらエラーが出なかった
* 向き先をローカルに戻して、CognitoのSDK側にendpointを指定したらエラーが出なかった
## 推察
* 恐らくCognito User Poolは内部でDynamoDBを使っていて、DynamoDBのendpointを変えるとCognitoのSDK側にも影響を及ぼしてしまうのではないか?
* このあたり詳しい人、もしくは中の人、今回の件について何かあれば教えてもらえたら嬉しいです