Azure Functions (FaaS)で スクレイピングするため、Puppeteer / Praywrightを動かしたい の続きです。
修正点
- 前回は写経しただけなので、JST Clockの画面ショットを取得するコードをデプロイした
- 次は自分のコードをデプロイしたい
- 前回の手順を1から再実行する必要がある…と思ったが、よくよく考えればdockerのイメージはAzure上にあるので、関数だけ追加すればよい
- 自分のコードもPlaywright以外は利用しないシンプルなものなので
やったこと
1.ローカルのプロジェクトディレクトリに2つ目のHTTP Trigger 関数を作成
# 2つめのHTTP Trigger の関数を作成します。
func new --name httpTrigger2 --template "HTTP trigger" --authlevel "anonymous"
Azure Functions のプロジェクトディレクトリは前回の手順で作成済みなので、関数だけを作成。
※プロジェクトディレクトリを作成するコマンドは参考までに以下。
func init --worker-runtime node --language javascript --docker
1-2.ローカルで動作確認する場合
ローカルの Azure Functions ランタイム ホストを起動して関数の動作を確認する。
http://localhost:7071/api/httpTrigger2 にアクセスして、期待する動作が行われていることを確認します。
※ 写経元の Azure Functions on Azure Container Apps で Playwright をサーバーレスで実行する に書いてありました。
func start
2つの関数が正しく認識されれば、Functions:以下の2つの関数と対応するURLが表示される。
# 2つめのHTTP Trigger の関数を作成します。
func new --name httpTrigger2 --template "HTTP trigger" --authlevel "anonymous"
で --name httpTrigger2を指定したことで、生成されるhttpTrigger2.jsのコードがapp.http('httpTrigger2', { ~となる。
const { app } = require('@azure/functions');
app.http('httpTrigger2', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
handler: async (request, context) => {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
}
});
2.Playwrightのコードを作成
src/functions/httpTrigger2.js に適当なコードを作成
初回作業時、httpTrigger.jsのコードをコピペしたことによって
app.http('httpTrigger2', {
ではなく
app.http('httpTrigger', {
となってしまい、Functionsの構成的にエラーになってしまった。注意。
3.Azure Function をデプロイする
az functionapp create --name $APP_NAME --resource-group $RG --functions-version 4 --runtime node --environment $APP_CONTAINER_ENV_NAME --workload-profile-name "Consumption" --storage-account $STORAGE_NAME --registry-server $LOGIN_SERVER --registry-username $REGISTRY_NAME --registry-password $ADMIN_PASSWORD --image nodescraperregistryrg20240930.azurecr.io/nodewebscraperrg20240930:WebScraperAppRG20240930
4. 動作確認
以下のコマンドで帰ってきたURLにブラウザ経由でアクセス
az functionapp function show -g $RG -n $APP_NAME --function-name "httpTrigger2" --query "invokeUrlTemplate" --output tsv
正常に動作が確認できました。ちなみにこのコードはNHKのサイトにアクセスし、covid19の感染者数を取得するスクリプト。