はかせのラボ

私の頭の中を書いていく雑記ブログです

AWS UnityでDynamoDBを操作する

あいさつ

どうも、はかせです。
今回は再びUnityAWSに帰り
DynamoDBを操作した話です。
(あっちこっち行ってすみません)

DynamoDBの操作

基本はDynamoDBのunitypackageを使ってやります。
サンプルがデフォルトだと動かなかったり
サンプル直しても私がAWSに疎かったりで
普通だと詰まらないようなとこで変な詰まり方をしました。

やり方はネット上に散々落ちてますし、
私が参考にしたサイトも載せておくので
サンプルの動かし方はそちらをご覧ください。

AWSSDKのバグフィックス

何も手を付けずAWSのサンプル動かすとこんなエラーが出てきます。

InvalidOperationException: Cannot override system-specified headers

簡単に言うと
WWWじゃなくてUnityWebRequest使えってことみたいです。

ただWWWを使っているのはSDKの中身なので
我々一般ピーポーが触れることはできません。

なのでSDKにUnityWebRequest使ってくれっていうのを
お願いします。

DynamoDBExample.csのStartメソッドの中身に一文追加します。

UnityInitializer.AttachToGameObject(this.gameObject);
//追加
AWSConfigs.HttpClient = AWSConfigs.HttpClientOption.UnityWebRequest;

この一文を追加することでエラーが消えます。

ロールが無効?IAMの信頼関係?

※私はいまだによくわかっておりません
さてバグフィックスが終わったところでサンプルに付属してたReadMeに従って
サンプルを動かしていきました。

そしたらこんなエラーが出てきました。

Invalid identity pool configuration. Check assigned IAM roles for this pool.

直訳すると
IDプールの構成間違ってるよ。
このプールにあてがわれてるIAMロール確認してよ。

って感じですかね。

ただ構成も何もただチュートリアル通り作っただけだしなぁ
とか思いながらググっていたらなにやら
信頼関係なるものが存在する模様。

そして信頼関係についてググる・・・・

・・・・

・・・・


結論:私の頭では理解できません

こいつがどういうものなのかもつかみきれないですし、
つかめてないから必要性もイマイチわかりません・・・

しかし、信頼関係をうまいことしないとできないらしい。
なのでAWSの開発者ガイドのコードをコピペしてきました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "信頼するIDプールのID"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "unauthenticated"
        }
      }
    }
  ]
}

本当はこういう「わからないけどこうすればいい」系は
好みじゃないのですが、背に腹は代えられません。
変にこだわってできませんでしたが一番ダメですからね。

そしてこいつを設定したら上記のエラーは解消され
無事DynamoDBを操作することができました。

あとがき

今回はUnityでDynamoDBを操作してみました。
(実際の操作は参考サイトと同じなので割愛しました)

それにしてもAWSって本当に難しいですねw
DirectXとかとはまた違った難しさです。
できないと本当にイライラしますが、
出来た時はやっぱうれしいですね。

それでは今回はこの辺でノシ