AWS Lambda 関数から AWS AppSync に Mutation する [Python版]

こんにちは、広野です。

以前、以下の記事で 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 AppSync 関連設定情報は、繰り返しになりますが以下の参考記事をご覧下さい。

まとめ

いかがでしたでしょうか。

AWS AppSync を使用しているアプリでアプリ外から画面更新させたいときには AWS Lambda 関数からの Mutation が必要となるケースが多いと思います。

本記事が皆様のお役に立てれば幸いです。

著者について
広野 祐司

AWS サーバーレスアーキテクチャを駆使して社内クラウド人材育成アプリとコンテンツづくりに勤しんでいます。React で SPA を書き始めたら快適すぎて、他の言語には戻れなくなりました。サーバーレス & React 仲間を増やしたいです。AWSは好きですが、それよりもAWSすげー!って気持ちの方が強いです。
取得資格:AWS 認定は12資格、ITサービスマネージャ、ITIL v3 Expert 等
2020 - 2023 Japan AWS Top Engineer 受賞
2022 - 2023 Japan AWS Ambassador 受賞
2023 当社初代フルスタックエンジニア認定
好きなAWSサービス:AWS Amplify / AWS AppSync / Amazon Cognito / AWS Step Functions / AWS CloudFormation

広野 祐司をフォローする
クラウドに強いによるエンジニアブログです。
SCSKは専門性と豊富な実績を活かしたクラウドサービス USiZE(ユーサイズ)を提供しています。
USiZEサービスサイトでは、お客様のDX推進をワンストップで支援するサービスの詳細や導入事例を紹介しています。
AWSアプリケーション開発クラウドソリューションデータベース
シェアする
タイトルとURLをコピーしました