Lambda から Shopify Admin API を叩く方法

Topic summary

質問内容:
Amazon EventBridge で実行される Lambda 関数から Shopify Admin API を呼び出す方法について質問が投稿されました。アプリインストール時に取得したアクセストークンの保存方法と、定期実行での商品情報取得・更新処理の実装方法が焦点です。

主な回答:

  • アクセストークンの保存: アプリインストール時にアクセストークンを含むセッション情報を DynamoDB などの DB に保存する必要があります。Node.js テンプレートを使用している場合、MySQL、PostgreSQL、DynamoDB 対応のモジュールが用意されています。

  • Lambda での実装方法: AWS Lambda + API Gateway の組み合わせで実現可能です。ただし、Shopify CLI が生成する Remix Template などは PaaS や EC2 向けで、Lambda ではそのまま使用できません。

  • スクラッチ開発の必要性: FaaS レイヤーでホスティングする場合、基本的にスクラッチでアプリを作成する必要があります。参考コード例として GitHub リポジトリが共有されました。

  • 技術的要件: Shopify の公式開発者サイトで使用されている技術や実装を詳細に把握することが重要です。UI は Polaris と App Bridge を利用し、S3 Bucket でホスト可能です。

Summarized with AI on November 12. AI used: claude-sonnet-4-5-20250929.

@junichiokamura
【質問】
Amazon EventBridge で実行される Lambda 関数から Shopify Admin API を叩く方法はありますでしょうか?

【背景】
現在、Shopify アプリの作成を行っております。
アプリの機能で、Amazon EventBridge, Lambda を使用して商品情報を取得、更新する処理(定期実行)を行いたいと考えております。

アプリをインストールしているストアのアクセストークン等をどのようにして取得、保存するのか(保存する必要がある、ない等)をご教授いただけますと幸いです。

Shopifyアプリ開発スクールのテックギークを運営している森本と言います。

まず、アプリインストール時にアクセストークンを含むセッショントークンをDynamoDBなど、ご自身で用意したDBに保存する必要があります。

Node.jsのShopifyアプリのテンプレートをお使いであれば、MySQL, PostgreSQL, DynamoDBなどのDBに保存できるモジュールが用意されています。

Node.jsのテンプレートを使っている場合、EventBridge経由でShopify Admin API を実行するには、ストアのドメインがわかればリクエスト可能になります。

例:

const { admin } = await shopify.unauthenticated.admin(ストアドメイン); 
const response = await admin.graphql( `
  #graphql query {
    shop {
      name
    }
  }
}`);
const responseJson = await response.json();
1 Like

AWS Lambda + API Gatewayを使えば可能です。

ただし、Shopify CLIが作成するRemix Templateやその他のTemplateは、フロントとバックエンドが一体でスタンドアロンで動くことを想定しており、Paas(Heroku、Vercel、Beanstalk、Render、Fly.io, etc.) やEC2向けなので、Lambdaではそのまま使えません。

AWS Lambdaなど、Faasのレイヤーでホスティングするには、基本的にご自身で一から(スクラッチで)アプリを作っていただくことになります。

参考までに私のスクラッチから作ったアプリのコードですが、ここのルートとコールバックの処理は、LambdaのNode.jsの雛形に移植可能かと思います。

https://github.com/benzookapi/shopify-barebone-app-sample/blob/main/app.js

アプリインストールのOAuthがpublicなURLを求めるので、Lambda単体では作れませんが、APIのURLをAPI Gatewayなどのフロントのものにすることで可能です。

取得したアクセストークンは、DynamoDBなどでストアごとに格納(自分のコードではRDBやMongoDBに格納していますが、同じようにできます)、アプリのUIはPolarisとApp Bridgeを単独で利用して(自分のコードではReact + viteを使っています)、それをS3 Bucketにホストして、同じくAPI Gatewayと通信してLambdaの処理を呼び出すこと可能です。

いずれにしても、CLIのtemplateのscaffoldの恩恵は失われるので、以下の公式サイトを見ながら、使われている技術や実装を細かく把握する必要があります。
https://shopify.dev/

(私のアプリは機能自体がチュートリアルになっているので、よかったらビルド、インストールしてお試しください)

1 Like