[AWS AppSync] LambdaからGraphQLのクエリを送ってみる

2020.01.13

1 はじめに

CX事業本部の平内(SIN)です。

AWS AppSync(以下、AppSync)は、AWS上のGraphQLのフルマネージドサービスです。

Webや、iSO,Androidから利用する場合、Amplifyで簡単に導入できますが、今回は、Lambda(TypeScript)からアクセスする要領を確かめてみました。

2 AppSync

AppSyncは、ここで、以下のような簡単なスキーマのAPIを例とします。

type Mutation {
    create(message: String!): MyData
}

type MyData {
    id: String!
    message: String
}

type Query {
    getMyAppSync(id: String!): MyData
}

クエリでデータの追加を確認してみます。

データソースは、DynamoDB(my_app_sync)になっています。

また、認証モードは、APIキーがデフォルトになっています。

3 Lambda

Lambdaで上記のAppSyncにmutationするコードは以下のとおりです。

クエリとパラメータは、AppSyncのコンソールで試したものをそのままコピーしています。

index.ts

import 'isomorphic-fetch';
import gql from 'graphql-tag';
import AWSAppSyncClient from 'aws-appsync';

// クエリ
const query = gql(`mutation Test($message: String!){
  create(message: $message){
    id
    message
  }
}`);

// パラメータ
const params =  {
  "message": "TEST"
}

exports.handler = async (_event: any) => {

  const url = 'https://xxxxxxxxxx.appsync-api.ap-northeast-1.amazonaws.com/graphql';
  const region = 'ap-northeast-1';
  const authType = 'API_KEY';
  const apiKey = 'xxxxxxxxxxxxxxxxxxxx';

  const appSyncClient = new AWSAppSyncClient({
    url: url,
    region: region,
    auth: {
      type: authType,
      apiKey: apiKey
    },
    disableOffline: true,
  });

  try {
    await appSyncClient.mutate({
      variables: params,
      mutation: query
    });
    console.log("success")
  } catch (err) {
    console.log(JSON.stringify(err));
  }
}

なお、コード上のAPI URLAPIキーは、コンソールの設定からコピーしました。

4 最後に

今回は、AppSyncをLambdaから操作する要領を確かめてみました。

Webや各種のデバイスの連携に加えて、Lambdaからのアクションも加えて色々な場面で利用してみたいと思います。

5 参考にさせて頂いたリンク


AWS Lambda から AppSync の API を ぶん殴る
awslabs/aws-mobile-appsync-sdk-js