こんにちは、広野です。
以前、以下の記事で AWS AppSync に Mutation をかける AWS Lambda 関数コードを以下の記事内で紹介していたのですが、Node.js で書いたものでした。先日 Node.js 16 が EoL になったことを受けて、AWS Lambda 関数を Python 3.12 で書き換えたので書き残しておきます。
AWS Lambda 関数コード
前置きなしでいきなりコード紹介に入ります。
mutation で渡す値は架空のものです。
import boto3
import json
import requests
from requests_aws_sign import AWSV4Sign
session = boto3.session.Session()
credentials = session.get_credentials()
auth = AWSV4Sign(credentials, 'ap-northeast-1', 'appsync') #AppSyncがデプロイされているリージョンを指定
def lambda_handler(event, context):
  try:
    endpoint = 'AppSyncEndpointUrl' #AppSyncのURLを指定
    headers = {'Content-Type': 'application/json'}
    query = """
      mutation updateJobstatus(
        $serviceiduser: String!,
        $datetime: String!,
        $url1: String,
        $url2: String,
        $status: String
      ) {
        updateJobstatus(input: {
          serviceiduser: $serviceiduser,
          datetime: $datetime,
          url1: $url1,
          url2: $url2,
          status: $status
        }) {
          serviceiduser
        }
      }
    """
    variables = {
      'serviceiduser': 'xxxxxxxx',
      'datetime': 'xxxxxxxx',
      'url1': 'xxxxxxxx',
      'url2': 'xxxxxxxx',
      'status': 'xxxxxxxx'
    }
    payload = {'query': query, 'variables': variables}
    result = requests.post(endpoint, auth=auth, json=payload, headers=headers).json()
    if 'errors' in result:
      print(result['errors'])
  except Exception as error:
    print(error)
    result = {'errors': [{'message': str(error)}]}
AWS AppSync は受けた Mutation を実行してよいのかどうか、実行元 (AWS Lambda 関数) から送られてきた IAM 情報と照合します。そのため、送信時に Signature V4 という仕組みを使用して情報を署名化し、リクエストのヘッダーに入れる処理が必要になります。
以下、前提事項です。
- AWS Lambda 関数に、appsync:GraphQL を実行できる IAM ロールを関連付けていること。
- AWS AppSync のスキーマ設定で、該当する Mutation の設定に IAM でアクセス可能な記述をしていること。
- import している requests モジュールはどノーマルの AWS Lambda 関数では import できないので、requests の Lambda レイヤーを作成しておくこと。requests をインストールして、同時にインストールされたモジュールとセットで ZIP で固めます。
 Lambda レイヤーの作成方法は以下の記事を参考にしてください。
  AWS Lambda (Python 3.12) で使用可能な pandas の Lambda Layer を準備するデータ分析や加工でよく使われるライブラリに、pandas があると思います。本記事では、AWS Lambda (Python 3.12) で動作する pandas の Lambda Layer を準備する手順を紹介します。 AWS Lambda (Python 3.12) で使用可能な pandas の Lambda Layer を準備するデータ分析や加工でよく使われるライブラリに、pandas があると思います。本記事では、AWS Lambda (Python 3.12) で動作する pandas の Lambda Layer を準備する手順を紹介します。
詳細な AWS AppSync 関連設定情報は、繰り返しになりますが以下の参考記事をご覧下さい。
まとめ
いかがでしたでしょうか。
AWS AppSync を使用しているアプリでアプリ外から画面更新させたいときには AWS Lambda 関数からの Mutation が必要となるケースが多いと思います。
本記事が皆様のお役に立てれば幸いです。

 
  
  
  
  