LoginSignup
21
10

More than 3 years have passed since last update.

概要

AppSyncを使ってみたかったので、簡単なツイートシステムを作って見ました。
今回はAppSyncの仕組みやLambdaとの連携を理解したかったので一から構築しています。

構成

AppSync構成 (1).jpg
フロントにNuxtjsを置いてappsyncを経由し、LambdaでDynamoDBにデータを保存ようにしてみました。
AppSyncのウィザードを使うと全部自動で作ってくれます。

AppSyncの設定

  1. AWSのAppSyncのページで「APIを作成」をクリック
    スクリーンショット 2020-06-03 19.53.04.png

  2. 今回は一番下の「一から構築」を選択
    スクリーンショット 2020-06-03 19.53.36.png

  3. API名を適当に決めます
    スクリーンショット 2020-06-03 19.53.58.png

  4. スキーマの設定
    スクリーンショット 2020-06-03 21.24.24.png

schema.graphql
schema {
  query: Query
  mutation: Mutation
  subscription: Subscription
}

type Mutation {
  putPost(id: ID, tweet: String!): Post
}

type Post {
  id: ID
  tweet: String!
}

type Query {
  singlePost(id: ID!): Post
}

type Subscription {
  onPutPost: Post @aws_subscribe(mutations : ["putPost"])
}

方の説明の中に数値の型はintとfloatがありますが

Int スカラー型は、非小数の符号付き整数値を表します。Int は -(2^31) と 2^31 - 1 の間の値を表現できます。

intの2^31足りる??? int64も欲しいですよね!!!

5 . 作成が成功すると、メニューが出てくるので、設定の所のAPI Detailsをメモっておく
スクリーンショット 2020-06-05 19.17.41.png

Nuxtjs

  1. Nuxtjsのインストール
    ここはスキップします、ここを参考に 公式ドキュメント

  2. 5でメモった設定をここに記入する

appsync-exports.js
const awsmobile = {
  aws_project_region: 'ap-northeast-1',
  aws_appsync_graphqlEndpoint: 'https://xxxxxxxxxxxxxxxxxxx.ap-northeast-1.amazonaws.com/graphql',
  aws_appsync_region: 'ap-northeast-1',
  aws_appsync_authenticationType: 'API_KEY',
  aws_appsync_apiKey: 'da2-xxxxxxxxxxxxxxxxxxx'
}

export default awsmobile

3 . GraphQLのコードを書く、AppSyncで設定したスキーマとほとんど変わりません、関数名、変数の大文字小文字、$に注意。間違えると動きません

mutations.js
export const putPost = `
  mutation PutPost(
    $tweet: String!
  ) {
    putPost(
      tweet: $tweet
    ) {
      id
      tweet
    }
  }
`
subscriptions.js
export const onPutPost = `
  subscription OnPutPost {
    onPutPost {
      id
      tweet
    }
  }
`

Lambdaの設定

  1. ソースをgitに上げておいたので、それをアップロードします スクリーンショット 2020-06-05 19.57.28.png ポイントはcallbackに結果を指定してあげると、appsync側に返却されます

DynamoDBの設定

  1. Dynamoで1個テーブルを作ります スクリーンショット 2020-06-05 20.00.14.png テーブルはid、tweetの二つのカラムです スクリーンショット 2020-06-05 20.01.55.png

最後にもう一度AppSync側の設定

  1. データソースの設定を行います、先ほど作ったLambdaを設定します。他にもHTTPなども設定できるので接続先はなんでも対応出来ます。「データーソースを作成」をクリック
    スクリーンショット 2020-06-05 12.33.29.png

  2. 手順にしたがって登録します
    スクリーンショット 2020-06-05 21.25.40.png

  3. スキーマのところでMutationの関数に先ほど登録したデータソースをアタッチします
    スクリーンショット 2020-06-05 12.34.48.png
    スクリーンショット 2020-06-05 12.35.41.png

  4. 動作テスト、クエリのところで簡単にテストが出来ます。試しに下記のようなクエリを書きます。
    スクリーンショット 2020-06-05 12.36.08.png
    うまくいくと右側に結果が表示されます。(Lambdaで返却した値です)
    スクリーンショット 2020-06-05 18.07.00.png
    ちなみにDynamoDBの方はというと
    スクリーンショット 2020-06-05 18.07.23.png
    正常に登録されました。

FrontからPostしてみます。

  1. nuxtjsを立ち上げて、ページを開きます。フォームにテキストを入力しSubmitを押します スクリーンショット 2020-06-05 18.10.36.png 画面はこうなって スクリーンショット 2020-06-05 18.10.49.png DynamoDBにも登録されました。 スクリーンショット 2020-06-05 18.10.58.png

実はもう通知もされます。ブラウザを二つ立ち上げてポストしてみます。動作はこんな感じです。
IMAGE ALT TEXT HERE

感想

通知の仕組みを一から作ろうと思うと大変ですが、組み合わせでここまで簡単に実装できてしまうとエンジニアがいらなくなる日がそう遠くなさそうでちょっと怖いですね

ウィザードが以前と違ってすごいシンプルになっていて分かりやすくなっていたので、初期構築はこちらからやっても良かったかなと思いました。

ソースはご自由にどうぞ

ソース

nuxtjs
https://github.com/akihiro-moriwaki/nuxt-appsync

Lambda
https://github.com/akihiro-moriwaki/nuxt-appsync-lambda

21
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
10