Shopify アプリに関する話題はこちら
@junichiokamura
【質問】
Amazon EventBridge で実行される Lambda 関数から Shopify Admin API を叩く方法はありますでしょうか?
【背景】
現在、Shopify アプリの作成を行っております。
アプリの機能で、Amazon EventBridge, Lambda を使用して商品情報を取得、更新する処理(定期実行)を行いたいと考えております。
アプリをインストールしているストアのアクセストークン等をどのようにして取得、保存するのか(保存する必要がある、ない等)をご教授いただけますと幸いです。
Shopify Expertとして、Shopify ストア構築・運用やアプリ開発に至るまで幅広く活動しています。
解決済! ベストソリューションを見る。
成功
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/
(私のアプリは機能自体がチュートリアルになっているので、よかったらビルド、インストールしてお試しください)
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();
成功
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/
(私のアプリは機能自体がチュートリアルになっているので、よかったらビルド、インストールしてお試しください)
2023年初頭、Shopifyペイメントアカウント、及びShopifyアカウント全体のセキュリティを強化する為の変更が適用されました。ユーザーのアカウントセキュリティを強化す...
By Mirai Sep 29, 2024概要: 年末/年明けは、消費者が最もショッピングを行う時期の一つです。特に、ブラックフライデー・サイバーマンデー(BFCM)は、世界中で注目される大規模なセールイベントであ...
By JapanGuru Sep 25, 2024APIに関するShopifyサポートShopifyのデフォルト機能では特定の目標を達成するために外部アプリケーションの使用を検討していますか? そんな時はプログラミングの専...
By JapanGuru Sep 22, 2024