arXiv新着論文をWebhookへ自動通知するためのAWSの設定
Table of Contents
事前準備
環境の確認
まず、開発環境の確認を行う。Ubuntu 22.04.4 LTSのみサポートしている。
lsb_release -a
# Ubuntu 22.04.4 LTS
uname -m
# x86_64
AWS Lambda LayerのためにZipファイルを作成
筆者のgithubプロジェクトarxiv-botをクローン。
git clone git@github.com:kktsuji/arxiv-bot.git
cd arxiv-bot
Pythonのバージョンは3.12.3でなければならない。
python --version
# Python 3.12.3
新しいディレクトリを作成し、そこにpythonパッケージをインストールする。次にzipファイルを作成する。ここで、zipファイルの名前はpython.zipでなければならない点に注意。このファイルはAWSのラムダレイヤーで使用される。
mkdir python
pip install -U pip
pip install -r requirements.txt -t ./python
zip -r python.zip ./python
Webhookの設定
通知したいサービスのwebhook urlを取得する。
(任意)OpenAIの設定
ChatGPTによる論文のサマリを生成したい場合、OpenAI API Keyを取得する。
注意:OpenAI APIは有料。
AWS Lambdaの設定
Lambda Layer
AWS Lambda Consoleへアクセスし、“Create layer"を行う。
先ほど作成したpython.zipファイルをアップロードし、“compatible architectures"ではZipファイルを作成した開発環境のアーキテクチャを選択する。ランタイムはPython 3.12を選ぶ。
注意:Zipファイルの名前がpython.zip出ない場合、lambda関数実行時のサードパーティ製Pythonモジュールのインポートが失敗する。

Lambda Function
AWSラムダコンソールで"Create function"を行う。
“Author from scratch"を選択し、項目を正しく記載する。

関数作成後、“Add a layer"ページを開く。

“Custom layers"を選択し、先ほど作成したレイヤーとそのバージョンを指定する。

arxiv-botプロジェクトのmain.pyのコード全体をコピーし、“Code” > “Code source” > lambda_function.pyを上書きして貼り付ける。
そして、“Deploy"ボタンを押下する。

次に"Test"を押下し、“Configure test event"のフォームを記載する。
“Event JSON"の項目は、以下のフォーマットに従って記入する必要がある(これらのパラメータは関数のテストでのみ使用される)。
{
"webhook_url": "https://YOUR_WEBHOOK_URL",
"keywords": "keyword1,keyword2,keyword3",
"categories": "cs.AI,cs.CV,cs.LG,eess.IV",
"openai_api_key": "YOUR_API_KEY"
}
| Key | Description |
|---|---|
| webhook_url | Slack, Teams, その他のサービスのAPIのwebhook url。 |
| keywords | arXiv検索のクエリーで使用されるキーワード。 各キーワードはスペース無しの半角コンマで区切る。 キーワードはタイトルとアブストラクトの検索に使用され、それぞれ"or"で検索される。 例えば、“keyword1,key word2"と指定すると、keyword1を含む論文と’key word2’を含む論文が検索結果として表示される。(もしキーワード内にスペースを含む場合、シングルクォーテーションで囲んで検索に使用される) |
| categories | arXiv検索のクエリで使用されるカテゴリー。 これはキーワードと同じルールに従う(スペースなしの半角カンマ区切り、“or"で検索)。また、半角スペースは無視される。 詳細はarXiv Category Taxonomyを参照。 |
| OPENAI_API_KEY | (任意)OpenAI API Key. もし論文のサマリ作成機能を使用しない場合は、以下のように空白を指定する: "openai_api_key": "" |

設定を保存し、テストを実行する。
実行結果は"Code source"で確認できる。もしくは、Webhook URLで指定したサービスでも確認ができる。


動作確認の後、Lambda関数の"ARN"をメモする。

AWS IAMの設定
Lambda関数を実行するためのポリシーを作成する。
IAM Policy
AWS IAM > Policies > “Create policy"で以下のポリシーを作成。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:YOUR-LAMBDA-FUNCTION-ARN"
}
]
}
IAM Role
AWS IAM > Roles > “Create role"で以下のロールを作成。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "admitEventBridge",
"Effect": "Allow",
"Principal": {
"Service": "scheduler.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
作成後、ロールにポリシーをアタッチしておく。
AWS EventBridgeの設定
ラムダ関数を毎日決まった時間に実行するための設定。
EventBridge Schedule
AWS EventBridge Consoleへアクセスし、“Create schedule"を行う。

フォームを記入する。ラムダ関数を正しい時刻に実行するために、タイムゾーンの設定とcronの設定をよく確認する。



arXiv検索結果を得るためにJSONパラメータを正しく設定すること(これらのパラメータは毎日のクエリで使用される)。
{
"webhook_url": "https://YOUR_WEBHOOK_URL",
"keywords": "keyword1,keyword2,keyword3",
"categories": "cs.AI,cs.CV,cs.LG,eess.IV",
"openai_api_key": "YOUR_API_KEY"
}


残りのフォームも記入する。

作成したIAMポリシーを、Permission > Execution role > Use existing role > Role nameへ設定。

スケジュールを作成。
以上で設定は完了。