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モジュールのインポートが失敗する。

img

Lambda Function

AWSラムダコンソールで"Create function"を行う。

“Author from scratch"を選択し、項目を正しく記載する。

img

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

img

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

img

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

そして、“Deploy"ボタンを押下する。

img

次に"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": ""

img

設定を保存し、テストを実行する。

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

img

img

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

img

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"を行う。

img

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

img

img

img

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"
}

img

img

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

img

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

img

スケジュールを作成。

以上で設定は完了。