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"
}
残りのフォームも記入する。
作成した AIM ポリシーを、Permission > Execution role > Use existing role > Role name へ設定。
スケジュールを作成。
以上で設定は完了。