質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

623閲覧

AWS App Runnerにうまくデプロイできない

t.t.t.

総合スコア7

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/05/31 06:08

編集2023/05/31 06:09

実現したいこと

flask(app.py)で作成したスクレイピングコードをAWS App Runnerで実行したいです。
何が原因なのかわからないので、少しでもおかしな点があればアドバイスしていただきたいです。

前提

ローカルでの実行は成功したのですが、AWS App Runnerにデプロイした場合、実行できませんでした。
また、AWSのログ情報を見ても、 could not determine the L2 cache size on this system, assuming 256k
などの情報のみで具体的なエラーは発見できませんでした。
app.pyとcodesフォルダは同ディレクトリ内にあります。

ちなみに、こちらのスクレイピングはサイトの管理者に許可を得て行っています。

発生している問題・エラーメッセージ

デフォルトドメインにアクセスした時、chromeに以下のような文章が表示されます。

5vynrmr2hp.ap-northeast-1.awsapprunner.com では現在このリクエストを処理できません。 HTTP ERROR 502

該当のソースコード

python

1#app.py 2from flask import Flask, request, Response, jsonify,render_template,abort 3from bs4 import BeautifulSoup 4import joblib 5import requests 6from tqdm import tqdm 7from codes.data import joblib_get_url 8from flask_cors import CORS 9import logging 10import traceback 11 12app = Flask(__name__) 13CORS(app) 14app.config['JSON_AS_ASCII'] = False 15 16logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') 17 18@app.route('/', methods=['GET','POST']) 19 20def get_data(): 21 22 logging.info('get_data() 関数が呼ばれました。') 23 24 25 url="https://---- 26 res=requests.get(url) 27 soup=BeautifulSoup(res.text,"html.parser") 28 29 selector="----" 30 total_num=soup.select_one(selector).get_text() 31 total_num=int(total_num.replace(",","")) 32 33 n=50 34 if total_num % n ==0: 35 total_page_num=total_num // n 36 else: 37 total_page_num=total_num // n +1 38 39 url_list_1=list() 40 url="----" 41 url_list_1.append(url) 42 43 for i in range(2,total_page_num): 44 url_key="https://------"+str(i) 45 url_list_1.append(url_key) 46 47 #return url_list_1-------(1) 48 49 url_list_002 = list() 50 51 a=1 52 joblib_num=10 53 54 for n in tqdm(range(0, joblib_num)): 55 try: 56 resultList = joblib.Parallel(n_jobs=12, verbose=3)( [joblib.delayed(joblib_get_url)(url_list_1[i]) for i in range(n*a,(n+1)*a) ]) 57 url_list_2.extend(resultList) 58 except Exception as e: 59 logging.error('エラーが発生しました: %s', str(e)) 60 logging.error(traceback.format_exc()) # スタックトレースをログに出力 61 return None 62 63 64 return url_list_2 65 66if __name__ == "__main__": 67 port = int(os.environ.get('PORT', 8080)) 68 app.run(host='0.0.0.0', port=port,timeout=60)

python

1#codes/data.py 2from bs4 import BeautifulSoup 3import requests 4import joblib 5from tqdm import tqdm 6import pandas as pd 7import re 8 9def joblib_get_url(url_1): 10 url_list_pre=list() 11 url=url_1 12 13 res=requests.get(url) 14 soup=BeautifulSoup(res.text,"html.parser") 15 16 for i in range(0,50): 17 try: 18 elem=soup.find_all("div",class_="layout layoutList02")[i].find----- 19 url_key=elem.attrs["href"] 20 url_list_pre.append(url_key) 21 except Exception as e: 22 print("Error:",e) 23 24 return url_list_pre

試したこと

前述したとおりローカルではapp.pyは正常に動きました。
またapp.pyの47行目(return url_list_1)までを記載し、デプロイを試したところ正常にurl_list_1のリストが表示されました。

補足情報(FW/ツールのバージョンなど)

runtime.txtには
python-3.9.6と記述しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

5日間回答がついていないようなので、回答になるか分かりませんが、とりあえず書きます。

could not determine the L2 cache size on this system, assuming 256k

上記で検索すると、AWS lambdaの記事がヒットします。

「AWS App Runner」を確認すると、難しいことをしなくても、AWSが良い感じにデプロイしてくれるようなサービス、という感じの説明が見つかるので、もしかしたらlambdaを使用していて問題が発生しているのかもしれません。

さらに検索すると、AWS Lambda and S3 - OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256kという記事が見つかり、

その解答に、この質問に似ているとあります。

こちらは、GCPの話のようですが、「Dash と Pandas は大量のメモリを消費するため、F2 インスタンスは Web アプリを適切に処理できず、RAM メモリ不足により失敗することがわかりました。 」という記述があり、この質問にも関係があるような印象を受けます。

そのため、とりあえずの対策としては以下が考えられます。

  1. デプロイして作成されるLamdaやEC2などのスペック(この場合はRAMかな?)を可能な限り上げて動作するか確認する。
  2. [1]は高いので、ローカルで実行してみて、メモリ使用量がどのくらいか把握し、それが動くだろうAWSのリソースを割り当ててみる。
  3. dashやpandasのようなメモリを大量に消費するものを使わないで実装し直す。

参考になったら良いのですが。

投稿2023/06/06 00:13

FiroProchainezo

総合スコア2401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問