Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ChatGPT と AWS Chalice で始めるサーバレス API 開発

tenda_kurumada
July 03, 2024
49

ChatGPT と AWS Chalice で始めるサーバレス API 開発

tenda_kurumada

July 03, 2024
Tweet

Transcript

  1. confidential TENDA CO., LTD. 1. スピーカー紹介とイントロダクション 2. Chalice とは? 3.

    Chaliceの導⼊ 4. ChatGPTに⼿伝ってもらいAPIの実装 5. デモの動作結果確認 6. まとめ ⽬次
  2. confidential TENDA CO., LTD. ⾞⽥ 尚平(くるまだ しょうへい) ・東京郊外で⽣まれ育ち、⼤学で情報系に触れる ・新卒で⼊社したSI会社の1年⽬に仙台へ転勤 ・⼤規模な業務システムのアプリ開発(管理作業含む)をメインに従事

    ・割とレガシーなシステムが多く、AWSを使った開発もそこまで多くなかった ・AWSなどクラウド技術をキャッチアップするためSAAを取得 ・2024年4⽉にテンダ⼊社 ・現在はバックエンドエンジニアをメインにいろいろ経験中 ・⽣成AIは流れが早すぎて若⼲挫折中。AWSが⽣成AI資格を作るので、受けようか悩み中 3 スピーカー紹介とイントロダクション
  3. confidential TENDA CO., LTD. 前職で初めてAWSに触れる それまではオンプレミスでJavaやVBを使ったシステムを担当 AWSの存在はもちろん知っていたが、仕事で使うことはなさそうだったので、 そこまで深く勉強できていなかった。 そんなときに突然の異動辞令が。 「来⽉からAWS案件を東京メンバと合同でやるから、チームリーダとしてよろしく」

    「よくわかんないけど、新規顧客でサーバレスシステムをスクラム開発するらしいよ。」 その⽇から必死に勉強して、AWS?サーバレス?スクラム?を勉強。 結局その案件はプチ炎上したが、エンジニアとして⾮常によい経験ができた。 4 スピーカー紹介とイントロダクション
  4. confidential TENDA CO., LTD. ChaliceはAWS が提供しているAWS LambdaとAPI Gatewayを簡単に利⽤するためのPythonベースのマイクロフレームワーク AWS Lambdaはサーバレスアーキテクチャの象徴のようなサービスでAPI

    Gatewayと連携することで スケーラブルなAPIをAWS上に構築することができる 6 Chaliceとは? AWS Lambda クライアント API Gateway DBなどの各種サービス との連携が可能
  5. confidential TENDA CO., LTD. ⾼速なプロトタイピング: • 少ないコード量でサーバレスAPIを構築可能 • 開発からデプロイまでのサイクルが短い ⾃動デプロイ:

    • デプロイコマンド⼀つで、Lambda関数とAPI Gatewayがセットアップされる • ローカル・devなど環境を定義することが可能 • 簡単なコマンド例: chalice deploy AWSとの統合: • IAMロールの⾃動設定ができるため、セキュリティや認証などの実装が楽 • AWSのPython SDKであるBoto3とシームレスに統合されているため、様々なサービスとの連携が可能 7 Chaliceとは?
  6. confidential TENDA CO., LTD. サーバ管理不要: • インフラの管理が不要で、コードに集中できる • AWS管理コンソールでの操作は不要で、コードだけでリソース管理が可能(IaCの実現) ⾃動スケーリング:

    • AWS Lambdaによる⾃動スケーリングで、⾼い可⽤性とパフォーマンスを実現 コスト効率: • 使⽤した分だけの従量課⾦制 • 初期投資が少なく、スタートアップや⼩規模プロジェクトにも最適 「便利そう」「試してみたい」と少しでも思ってもらえたでしょうか? 8 Chaliceとは?
  7. confidential TENDA CO., LTD. プロジェクトディレクトリの構成 ・app.py Chaliceアプリケーションのエントリーポイント PythonのWebフレームワークのFlaskに近い記法 10 Chaliceの導⼊

    デフォルトはエンドポイントのルート(‘/’)にアクセスしたら レスポンスボディとして{‘hello’: ‘world’}を返すようなコードになっています。
  8. confidential TENDA CO., LTD. デプロイするには ・AWS認証情報を登録 aws configure --profile chalice

    AWS Access Key ID [None]: xxxxxxxxxxxxxxxxxxxx AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Default region name [None]: ap-northeast-1 Default output format [None]: json (詳細は割愛) ・デプロイコマンド実⾏ chalice deploy 1コマンドだけでAWS環境へのデプロイが完了 初回デプロイのときはIAMロール、API Gateway、AWS Lambda のリソースも作成される 13 Chaliceの導⼊
  9. confidential TENDA CO., LTD. 実際に動くのか?? ⇨さすがに⼀発では無理だった ・古いバージョンの書き⽅をして怒られたり ・オブジェクトの展開⽅法を間違えたり ・{“summary”:“¥u3053¥u306e¥u30b5¥u30a4¥u30c8¥ ・・・みたいにUnicodeエスケープシーケンスがでていたり

    ・参照するべき変数をミスっていたり 今回のパターンだと4箇所を後から修正 ただどれもエラー内容を⾒ればわかりやすいものしかなかったため、時間かからず修正できた。1時間かからず。 ⼿で直して動かしてみる 本イベントについてのテンダのプレスリリースを要約してみた結果が以下 17 デモの動作結果確認
  10. confidential TENDA CO., LTD. 18 ChatGPTに⼿伝ってもらいAPIの実装 app = Chalice(app_name='news-summary-bot') app.debug

    = True OPENAI_API_KEY = os.environ.get('OPENAI_API_KEY') openai.api_key = OPENAI_API_KEY @app.route('/') def index(): return {'hello': 'world'} @app.route('/summarize', methods=['POST'], content_types=['application/json']) def summarize(): request = app.current_request url = request.json_body.get('url') if not url: return Response(body={'error': 'URL is required'}, status_code=400) try: page_content = fetch_page_content(url) summary = summarize_content(page_content) return Response(body=json.dumps({'summary': summary}, ensure_ascii=False), status_code=200, headers={'Content-Type': 'application/json'}) except Exception as e: return Response(body=json.dumps({'error': str(e)}, ensure_ascii=False), status_code=500, headers={'Content-Type': 'application/json'}) def fetch_page_content(url): response = requests.get(url) if response.status_code != 200: raise ValueError('Failed to fetch the page content') soup = BeautifulSoup(response.text, 'html.parser') paragraphs = soup.find_all('p') page_text = ' '.join([p.get_text() for p in paragraphs]) return page_text def summarize_content(content): response = openai.chat.completions.create( model='gpt-3.5-turbo', messages=[ {"role": "system", "content": "⼤学⽣でもわかるように要約してください"}, {"role": "user", "content": f"次のサイトを200⽂字程度で要約してください:{content}"} ], max_tokens=500 ) summary_text = response.choices[0].message.content.strip() return summary_text 最終的なapp.pyのコード。9割はChatGPTに⽣成してもらい、⼈間が⼿で修正した。※importは省略
  11. confidential TENDA CO., LTD. 今回AWS謹製のChaliceというフレームワークを使⽤して、 ChatGPTに⼿伝ってもらいながら、⽣成AIを組み込んだAPIを作成してみました。 思ったことをまとめると以下になります。 ・Chaliceは(知名度は低い気がするが)APIを作成するだけであれば、⾮常に簡単で便利 ・環境構築やAWSへのリソース作成もコードのコピペで実現できるのでコードを書くことに集中しやすい ・⼤規模なことや他のAWSサービスを繋ぐときには、⼯夫が必要

    →共通化やデコレーターの書き⽅など →複雑な場合はSAM(AWS Serverless Application Model )のほうがいいのか・・・?有識者いれば教えてください。 ・コード⾃体もシンプルなので、初学者でも⽐較的学習ハードルは低い ・ChatGPTで簡単なプログラムは作れる。がエラーは完全に解消してくれるわけではない →ある程度の⾃⼒は必要。完全に仕事は取られるのはもう少し先・・・なはず 19 まとめ
  12. confidential TENDA CO., LTD. 1. 公式ドキュメント • Chalice公式ドキュメント: https://aws.github.io/chalice/index.html •

    OpenAI APIドキュメント: https://platform.openai.com/docs/ 2. ネット記事 •サクッとChaliceでAPI作ってみた!(⼊⾨編) : https://www.cloudbuilders.jp/articles/2265/ •爆速 API 開発を実現するサーバーレスアプリケーション開発向けフレームワーク: https://aws.amazon.com/jp/builders-flash/202003/chalice-api/ • AWS Chalice 再⼊⾨ 〜RESTful APIはやっぱり最⾼〜 : https://pages.awscloud.com/rs/112-TZM-766/images/A-3_AWSDevDay2021.pdf 20 参考⽂献
  13. confidential 【注意事項】 l 本資料を無断で第三者に配布することを禁⽌します。 l Amazon Web Services、『Powered by Amazon

    Web Service』ロゴ、[その他AWS商標名]は、⽶国および/またはその他の諸国における、Amazon.com, Inc. またはその関連会社の商標です。