全3件 (3件中 1-3件目)
1

めっちゃはまった話。amplify push しようとしたらこんなエラーが発生した。UPDATE_FAILED GraphQLAPIKey AWS::AppSync::ApiKey Fri Jun 26 2020 13:13:02 GMT+0900 (GMT+09:00) API key not found: api-key名 (Service: AWSAppSync; Status Code: 404; Error Code: NotFoundException; Request ID: request id)AppSyncのAPI Key はデフォルト設定だと7日で有効期限が切れるらしく、AppSync コンソールの「設定」からAPI Key を再生成した。再生成したAPI Key をプロジェクトに反映しようと思い、旧API Keyでgrep したら以下の4ファイルがヒット。./awsconfiguration.json./amplifyconfiguration.json./amplify/backend/amplify-meta.json./amplify/#current-cloud-backend/amplify-meta.json※./ はプロジェクトのルートディレクトリ一つ一つ更新し、再度 push。すると同じエラーが発生した。なんで?って思ったら下の2つが元に戻っている。いろいろコマンド発行してみたけど、結局治らず。しかたなく、pod のインストールからやり直すことに。今から思えば、せいぜい amplify init あたりからでよかったような。。。$ amplify initinit 直後の awsconfiguration.json特段有益な情報は付加されていない。amplify-meta.json のスクショ取り忘れる。$ amplify add apiadd api 直後の awsconfiguration.json。特に変化なし。同じく amplify-meta.jsonapi に関する情報はなし。また一週間後に同じことをやるのは面倒なので、有効期限を365日に設定。? After how many days from now the API key should expire (1-365): 365$ amplify pushpush 後の awsconfiguration.json。認証情報が付加された。同様に amplify-meta.json。モザイクだらけですが、API情報が付加されている。コマンドの終了直前に、コンソール上に API KEY が表示されるあたりからも、ここでAPI Key が割り振られている模様。結局、API Key の有効期限が切れたらどうすればいいのかわからず。いったん各ファイルからAPI Key に関わる情報を消してしまえばいいのか?有効期限を延長したので、ハマるのはまた来年。
2020.06.26
コメント(0)

引き続き、AWSとの格闘?の記録です。テーブルを作ったのでiOSアプリから接続できるようにしよう!ということで、チュートリアルを元に環境構築を開始しました。ここで結構ハマり、まず環境構築を開始するまでに2〜3日が経過しました。※そもそも、ドキュメントちゃんと読めよって話なんですがね。。。一応、経緯だけ書いておくと、DynamoDBのドキュメントには、Mobileアプリから呼び出す場合は「Mobile Hub」というページからプロジェクトを作ってね、と書いてあるのですが、現在は、実際そのリンクに飛ぶと「Amplify」という仕組みのページに飛んでいきます。結論から言うと、この AmplifyというCLIツールを使用して環境構築が全て行えるのですが、そこを理解するのに時間がかかり、何をすれば Mobile Hub のページにたどり着くんだ!?という無駄な時間をすごしました。おそらく、Mobile Hub は現行ユーザーは使用できるけど、新規の人は Amplify 使ってねっていう、Amazonさんの親切心だったんでしょう。が、ハマりました。というわけで、以下 Amplify のインストールから、XCodeのプロジェクトにリソースをインストールしていくところまでの流れです。まず、Amplify のトップページです。https://us-east-2.console.aws.amazon.com/amplify/home?region=us-east-2#/GET STARTED から進みます。なんか、日々、トップ画面とかチュートリアルが変わっているような気がするんですが、そこは気にせず。こんなページに進むので、迷わずiOSを選択します。チュートリアルに進みます。なんでいきなりチュートリアル?みたいな感じで、ここも嵌る原因の一つとなったのですが、結果的に Amplify のインストールはこの手順通りに進めていけば全てうまくいきます。要は、Amplify が 環境構築のためのツールだと理解できなかった故にはまっていたわけでした。チュートリアルの内容は、コマンドをベースに書き進めていきますが、大前提として以下のツールが必要があるため、ない場合はインストールします。CocoaPods と Amplify CLI ってやつが、ターミナルから環境構築をお手伝いしてくれるツールです。役割を理解すると便利です。Amplify CLI は以下のコマンでインストールできます。$ sudo npm install -g @aws-amplify/clisudo コマンドで発行しないと権限不足でエラーになる可能性があります。amplify CLI のインストールが終わったら、いざ環境構築。まず、XCodeでプロジェクトを起動している場合は終了しましょう。また、チュートリアルにはIAMユーザーの作成手順がありますが、割愛します。チュートリアル通りに行えば簡単に作成することができます。1.プロジェクトのディレクトリへ移動以降の手順は、XCodeのプロジェクトのディレクトリで実行していく必要がありますのでcdコマンドで移動します。$ cd プロジェクトディレクトリのパス2.CocoaPodsマネージャでプロジェクトを初期化$ pod initPodfile というファイルが作成されます。中身はこんな感じ。使用したいPod(ライブラリ)を追記します。3.Podfile に記述した pod(ライブラリー等々)のインストール以下のコマンドでPodのダウンロードが行われます。$ pod install --repo-updateプロジェクトフォルダ内にPodと、workspaceファイルが作成されます。以降は、xcodeprojファイルではなく、このxcworkspaceファイルを使ってプロジェクトを開きます。Podsフォルダの中はこんな感じ。以下のコマンドでワークスペースファイルが開きます。普通にダブルクリックでも開ますが、なんか手順にあるんで。$ xed .4.プロジェクトにAmpify Tools を追加します。ちょっとここの目的が理解できてないです。TARGETS に 「New Run Script Phase」を追加します。新しくできた「Run Script」を「[CP]Check Pods Manifest.lock」の下に移動します。以下のコマンドを追加します。"${PODS_ROOT}/AmplifyTools/amplify-tools.sh"名前を「Run Amplify Tools」に変更。プロジェクトをビルドしてこの手順は終了。5.Amplifyの初期化を行います。$ amplify initamplifyconfiguration.jsonとawsconfiguration.jsonをプロジェクトに追加します。※チュートリアルの手順を何度も実行しては最初からやり直してを繰り返していたので、定かではないのですが、4の手順実行しておくとこれ必要ないかもしれません。手動で追加する場合は、プロジェクト名と同一のフォルダの直下に配置します。6.AppSync API を作成します。(多分)$ amplify add api実行時、いくつか質問されますが、基本的にはデフォルト設定で問題ありません。AppSyncコンソールを開くと、APIが追加されています。7.schema.graphqlファイルの編集今までの手順(よく覚えてないけど、多分6)で、schema.graphqlというファイルが作成されます。このファイルは、DynamoDB(に限らないかもだけど)のテーブル定義を記述します。type テーブル名 @model { 項目名 : 型名}となります。@model は、テーブルを作成することを意味します。これをつけないと、テーブルは作成されず、オブジェクト型のデータとして認識させることができます。また、型名の後に ! をつけるとNULL不可になります。IDは、実質、String型らしいですが、ユニークキーとして認識しています。(間違えているかも)テーブルと、テーブル内で使用するオブジェクト型の定義下では、オブジェクト「TMGPSSector」のリスト(配列)を定義しています。7.AppSync にスキーマを登録する。以下のコマンドで、AppSync にスキーマを登録することができます。$ amplify pushここでもいくつか質問されますが、基本的にデフォルトでOKです。正常終了すと、AppSyncのデータソースにテーブルが追加されます。データソースからリソースのリンクをクリックしているとテーブルが作成されていることがわかります。結果、旅立ちへんで作成したテーブルはまったくもって不要となったわけでした。また、プロジェクトフォルダ内に「API.swift」というファイルが作成されますので、これをXCodeプロジェクトのプロジェクト名と同じ名前のフォルダに追加します。「API.swift」ファイルは、プログラム(GraphQL)からDynamoDBを操作するためのAPIが全て記述されています。データソースを作り替えても、「$amplify push」を実行することでこのファイルにも自動的に反映されます。詳細は、プログラム編で記載しようと思います。次回は、Swift からテーブルの読み書きをする方法を記載しようと思いますが、現在、プログラム中のため、いつ頃になるかわかりません。以下、データソースの登録中吐いたエラーと、気づいたことをだらだら書いておきます。テーブル名に_(アンダーバーが入っているとエラーになるっぽい)Template format error: Resource name TMGPS_BestLap is non alphanumeric.コメントに使ってた // はエラーになるSyntax Error: Cannot parse the unexpected character "/".※swiftのstruct定義をそのままコピーしたので。。。? もついてるとエラーになるSyntax Error: Cannot parse the unexpected character "?".Double型は存在せず、Floatにする必要があるThe input value type 'Double' is not present when resolving type 'TMGPSLapInput' [@621:1].Bool じゃなくて、BooleanUnknown type "Bool". Did you mean "Boolean"?※これもstruct型からコピペしたんでエラー吐きました。schemaに項目の追加、削除等を行って push すると自動的に API.swift は更新されるが、たまにゴミ項目ができる時があるので、そのときは造りなおしたほうが良い?id 、 登録日、変更日は、schema に定義しなくても、勝手に付加されているぽい。これ、ちょっとびっくりしました。最初、自分で定義していたんですが、不要みたいだったので登録日と変更日は削除しました。idはまだ理解できていないので、わかったら追記します。
2020.06.02
コメント(0)

随分と更新をサボりましたが何もやっていなかったわけではなく、むしろネタが結構あります。 ここ最近、突っ走りまくっていて振り返る時間を作っていなかったのですが、私のような頭も悪い記憶力もない人間は、一旦立ち止まって振り返ることが必要だな、と思い記録します。 4月上旬くらいから朝会チャレンジのバージョンアップを一旦中断し、過去に作っていたCoreLocationを使ったアプリの焼き回しをしていました。 で、データベースが欲しいなと思っていたのですが、自分でサーバー立てるのも主にセキュリティ関係で自信が持てなかったので無料のDBクラウドサービスないかなって探した結果、たどり着いた先が AWS の DynamoDBでした。 こいつも特定の条件下では無料だよ、ってレベルなのですがそこの範囲で収まるように使おうと考えたわけです。 結果、毎月30円弱ずつ請求されているわけですが、そこはまたおいおいと。 DynamoDB は、NoSQLという、非リレーショナルデータベースに該当します。 NoSQLの中でもDynamoDBは、JSONでデータの読み書きができるというのが特徴的で、プライマリキー(パーティションキーと、ソートキー※必須ではない)以外の項目はかなりの自由度の高さです。 まだ試していないですが、キー項目さえ存在すればレコードごとに全く異なるフォーマットのデータを登録できるのではないかと思います。 実際、テーブルを作成するときに、テーブル名とプライマリーキーを指定するだけで、その他の項目はレコード作成時に決めます。 下図がテーブル作成画面です。 テーブル作成に最低限必要な項目はテーブル名とパーティションキーの2つだけです。 (Auto Scaling の設定をする場合は別) これで、作成ボタンをクリックするとテーブルが完成します。 「項目」タブを選択して、「項目の作成」ボタンをクリックすると、下のような画面が表示されます。 ここで、レコードを登録します。 プライマリキーと、設定した場合はソートキーが必須のため初期表示されています。 +ボタンをクリックすることで項目の追加、削除が行えます。 使える変数は以下の通り。 スカラ型、オブジェクト型の2種類があります。 リレーショナルDBではないぶん、このオブジェクト型がめちゃくちゃ便利です。 Map型やList型はこんな感じで項目追加していくことができます。 下の例はMap型ですが、List型はキー値を持たない値の羅列となります。 Textを選択すると、JSON形式でデータを見ることができます。 これ、ここにJSON形式のテキストをコピペするとレコード登録できます。 すでにJSONファイルでデータがタンキングされている場合はデータベース化が容易に行えそうです。 簡単ですが、DynamoDBでのテーブル作成とレコード追加は以上となります。 結果的に、これら全てが必要なかったんですけどねorz 次回へ続く。 以下、ここまでの感想 リレーショナルではないため、正規化しようとすると使い勝手が非常に低下します。 そのため、極力一つのテーブルに全てを集約する非正規デザインになります。 ただ、JSONファイルのような感覚でデータベースを使用できるため、データベースと考えない方が違和感がなく使えるかもしれません。 ちなみに、地味にいらっとしたのがチュートリアル。 Musicっていうテーブルを作りましょう!って表示されるので素直にテーブル名に「Music」って入力すると「ミュージック」って入力しなさい、って怒られます。 そこはローカライズしなくていいじゃん!
2020.06.01
コメント(0)
全3件 (3件中 1-3件目)
1

![]()
