kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

aws amplifyのAPIをpythonで実行

f:id:kazu22002:20201022144303p:plain

amplifyを使っていますが、amplify initしたプロジェクト以外でも使えるのか気になっていましたが、pythonのプログラムでも使いたくなったため、調べてみました。

サンプルコード

iamを利用したauth付きのサンプル

import json
from requests_aws4auth import AWS4Auth
from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport

class ApiManager(object):
    def get_client(self):
        auth = AWS4Auth(
            <AWS_IAM_KEY>,
            <AWS_IAM_SECRET>,
            "ap-northeast-1",
            "appsync",
        )
        headers = {
            "Accept": "application/json",
            "Content-Type": "application/json",
        }

        transport = RequestsHTTPTransport(
            url=<AWS_APPSYNC_URL>,
            use_json=True,
            headers=headers,
            auth=auth
        )
        client = Client(transport=transport,
                        fetch_schema_from_transport=True)
        return client


    def query_get(self, id):
        client = self.get_client()

        query = """
  query GetUser($id: ID!) {
    getUser(id: $id) {
      id
      name
      createdAt
      updatedAt
    }
  }
        """

        params = {"id": id}
        resp = client.execute(gql(query),
                              variable_values=json.dumps(params))

        if len(resp["getUser"]) > 0:
            return resp["getUser"]

        return False

AWS_IAM_KEY, AWS_IAM_SECRET,AWS_APPSYNC_URLは自分の環境に合わせて変更します。

api自体はAppSyncを利用しているため、AppSyncをHTTPで実行している感じですね。

参考

dev.classmethod.jp

参考のソースをクラスにしただけです。これがないと作れなかったです。ありがたいです。