JavaScriptからPowerCMS XのAPIを容易に利用できる「PTRESTfulAPIClient」ですが、AWSのLambda関数でも動作しました。開発時の要件はWebページ等で読み込みAPIの利用を助けることだったのですが、TypeScriptで開発しユニバーサルモジュール(UMD)化してリリースしていました。
npm i alfasado/pt-restful-api-client#main
でインストール後、「AWS Lambdaでnode_modulesを使う時のメモ #Node.js - Qiita」で紹介されている通りAWS Lambdaのレイヤーに登録します。そのレイヤーをLambda関数に設定してやるとモジュールが利用できます。
const PTRESTfulAPIClient = require('/opt/node_modules/pt-restful-api-client');
exports.handler = async () => {
const client = new PTRESTfulAPIClient('https://powercmsx.example.jp/app/api/index.php', 1);
const params = {
sort_by: 'published_on',
sort_order: 'desc',
cols: 'id,title,basename,published_on',
limit: 3,
};
const response = await client.listObjects('entry', 1, params);
const jsonData = await response.text();
return {
statusCode: response.statusCode,
headers: {
'Access-Control-Allow-Origin': 'http://develop.localhost',
'Access-Control-Allow-Methods': 'OPTIONS,POST,GET',
},
body: jsonData,
isBase64Encoded: false,
};
};
このLambda関数をAWS API GatewayでLambda統合すると、例えばhttps://xxxxx.execute-api.ap-northeast-1.amazonaws.com/pcmsx/entriesのようなURLでPowerCMS XのAPIとやり取りすることが可能です。
CMSサーバーに直接アクセスすることなくAPIが利用できますし、オブジェクト登録時に必要な認証情報をフロントに出すことなく利用できそうです。