Slide 1

Slide 1 text

confidential ChatGPT と AWS Chalice で始める サーバレス API 開発 2024年7⽉4⽇

Slide 2

Slide 2 text

confidential TENDA CO., LTD. 1. スピーカー紹介とイントロダクション 2. Chalice とは? 3. Chaliceの導⼊ 4. ChatGPTに⼿伝ってもらいAPIの実装 5. デモの動作結果確認 6. まとめ ⽬次

Slide 3

Slide 3 text

confidential TENDA CO., LTD. ⾞⽥ 尚平(くるまだ しょうへい) ・東京郊外で⽣まれ育ち、⼤学で情報系に触れる ・新卒で⼊社したSI会社の1年⽬に仙台へ転勤 ・⼤規模な業務システムのアプリ開発(管理作業含む)をメインに従事 ・割とレガシーなシステムが多く、AWSを使った開発もそこまで多くなかった ・AWSなどクラウド技術をキャッチアップするためSAAを取得 ・2024年4⽉にテンダ⼊社 ・現在はバックエンドエンジニアをメインにいろいろ経験中 ・⽣成AIは流れが早すぎて若⼲挫折中。AWSが⽣成AI資格を作るので、受けようか悩み中 3 スピーカー紹介とイントロダクション

Slide 4

Slide 4 text

confidential TENDA CO., LTD. 前職で初めてAWSに触れる それまではオンプレミスでJavaやVBを使ったシステムを担当 AWSの存在はもちろん知っていたが、仕事で使うことはなさそうだったので、 そこまで深く勉強できていなかった。 そんなときに突然の異動辞令が。 「来⽉からAWS案件を東京メンバと合同でやるから、チームリーダとしてよろしく」 「よくわかんないけど、新規顧客でサーバレスシステムをスクラム開発するらしいよ。」 その⽇から必死に勉強して、AWS?サーバレス?スクラム?を勉強。 結局その案件はプチ炎上したが、エンジニアとして⾮常によい経験ができた。 4 スピーカー紹介とイントロダクション

Slide 5

Slide 5 text

confidential TENDA CO., LTD. 特に”サーバレス”という概念 オンプレミスでアプリ開発していた⼈間からすると ”サーバなしでプログラム動くわけないでしょ”と思っていたが、 実際にサーバの構築なしでプログラムを動かすことができた。 ※実際には開発者がサーバを意識しなくてよいだけで、サーバ⾃体は存在している。 今回はAWSで実装できるサーバレスについて。 そして、このサーバレスをさらに簡単に構築するためのフレームワーク「Chalice」を 流⾏りに乗っかってChatGPTを活⽤して紹介させていただきたい。 5 スピーカー紹介とイントロダクション

Slide 6

Slide 6 text

confidential TENDA CO., LTD. ChaliceはAWS が提供しているAWS LambdaとAPI Gatewayを簡単に利⽤するためのPythonベースのマイクロフレームワーク AWS Lambdaはサーバレスアーキテクチャの象徴のようなサービスでAPI Gatewayと連携することで スケーラブルなAPIをAWS上に構築することができる 6 Chaliceとは? AWS Lambda クライアント API Gateway DBなどの各種サービス との連携が可能

Slide 7

Slide 7 text

confidential TENDA CO., LTD. ⾼速なプロトタイピング: • 少ないコード量でサーバレスAPIを構築可能 • 開発からデプロイまでのサイクルが短い ⾃動デプロイ: • デプロイコマンド⼀つで、Lambda関数とAPI Gatewayがセットアップされる • ローカル・devなど環境を定義することが可能 • 簡単なコマンド例: chalice deploy AWSとの統合: • IAMロールの⾃動設定ができるため、セキュリティや認証などの実装が楽 • AWSのPython SDKであるBoto3とシームレスに統合されているため、様々なサービスとの連携が可能 7 Chaliceとは?

Slide 8

Slide 8 text

confidential TENDA CO., LTD. サーバ管理不要: • インフラの管理が不要で、コードに集中できる • AWS管理コンソールでの操作は不要で、コードだけでリソース管理が可能(IaCの実現) ⾃動スケーリング: • AWS Lambdaによる⾃動スケーリングで、⾼い可⽤性とパフォーマンスを実現 コスト効率: • 使⽤した分だけの従量課⾦制 • 初期投資が少なく、スタートアップや⼩規模プロジェクトにも最適 「便利そう」「試してみたい」と少しでも思ってもらえたでしょうか? 8 Chaliceとは?

Slide 9

Slide 9 text

confidential TENDA CO., LTD. インストール ※Pythonやpipはインストール済みの前提 pip install chalice プロジェクト作成 chalice new-project chaliceApp 9 Chaliceの導⼊

Slide 10

Slide 10 text

confidential TENDA CO., LTD. プロジェクトディレクトリの構成 ・app.py Chaliceアプリケーションのエントリーポイント PythonのWebフレームワークのFlaskに近い記法 10 Chaliceの導⼊ デフォルトはエンドポイントのルート(‘/’)にアクセスしたら レスポンスボディとして{‘hello’: ‘world’}を返すようなコードになっています。

Slide 11

Slide 11 text

confidential TENDA CO., LTD. プロジェクトディレクトリの構成 ・config.json Chaliceアプリケーションの設定全般を扱う 各環境ごとの設定やデプロイに関する情報、 IAMロール、環境変数なども保持することができる 11 Chaliceの導⼊

Slide 12

Slide 12 text

confidential TENDA CO., LTD. 実際に起動・リクエストしてみる ・ローカルで起動 ここではローカルにAPIサーバを⽴てて動作の確認ができる。 ・アクセス 12 Chaliceの導⼊

Slide 13

Slide 13 text

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の導⼊

Slide 14

Slide 14 text

confidential TENDA CO., LTD. ChatGPTはʮ"EWBODFE%BUB"OBMZTJTʯͱ͍͏ػೳΛ࢖͑͹ࣗવݴޠ͔ΒPythonコードの作成が可能 もちろん分からないことは教えてくれるし、エラーがあったら⼀緒に悩んでくれる 以下が今回使⽤したプロンプト。(Pythonファイルは直接ダウンロードできる形でも提供してくれる) ⾞⽥: 14 ChatGPTに⼿伝ってもらいAPIの実装

Slide 15

Slide 15 text

confidential TENDA CO., LTD. ChatGPT: 15 ChatGPTに⼿伝ってもらいAPIの実装

Slide 16

Slide 16 text

confidential TENDA CO., LTD. ChatGPT: 16 ChatGPTに⼿伝ってもらいAPIの実装 ChatGPTに⾔われたとおりに実装して動くのか? やってみました。

Slide 17

Slide 17 text

confidential TENDA CO., LTD. 実際に動くのか?? ⇨さすがに⼀発では無理だった ・古いバージョンの書き⽅をして怒られたり ・オブジェクトの展開⽅法を間違えたり ・{“summary”:“¥u3053¥u306e¥u30b5¥u30a4¥u30c8¥ ・・・みたいにUnicodeエスケープシーケンスがでていたり ・参照するべき変数をミスっていたり 今回のパターンだと4箇所を後から修正 ただどれもエラー内容を⾒ればわかりやすいものしかなかったため、時間かからず修正できた。1時間かからず。 ⼿で直して動かしてみる 本イベントについてのテンダのプレスリリースを要約してみた結果が以下 17 デモの動作結果確認

Slide 18

Slide 18 text

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は省略

Slide 19

Slide 19 text

confidential TENDA CO., LTD. 今回AWS謹製のChaliceというフレームワークを使⽤して、 ChatGPTに⼿伝ってもらいながら、⽣成AIを組み込んだAPIを作成してみました。 思ったことをまとめると以下になります。 ・Chaliceは(知名度は低い気がするが)APIを作成するだけであれば、⾮常に簡単で便利 ・環境構築やAWSへのリソース作成もコードのコピペで実現できるのでコードを書くことに集中しやすい ・⼤規模なことや他のAWSサービスを繋ぐときには、⼯夫が必要 →共通化やデコレーターの書き⽅など →複雑な場合はSAM(AWS Serverless Application Model )のほうがいいのか・・・?有識者いれば教えてください。 ・コード⾃体もシンプルなので、初学者でも⽐較的学習ハードルは低い ・ChatGPTで簡単なプログラムは作れる。がエラーは完全に解消してくれるわけではない →ある程度の⾃⼒は必要。完全に仕事は取られるのはもう少し先・・・なはず 19 まとめ

Slide 20

Slide 20 text

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 参考⽂献

Slide 21

Slide 21 text

confidential TENDA CO., LTD. ご清聴ありがとうございました!! 21

Slide 22

Slide 22 text

confidential 【注意事項】 l 本資料を無断で第三者に配布することを禁⽌します。 l Amazon Web Services、『Powered by Amazon Web Service』ロゴ、[その他AWS商標名]は、⽶国および/またはその他の諸国における、Amazon.com, Inc. またはその関連会社の商標です。