Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ChatGPT と AWS Chalice で始めるサーバレス API 開発
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
tenda_kurumada
July 03, 2024
97
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ChatGPT と AWS Chalice で始めるサーバレス API 開発
tenda_kurumada
July 03, 2024
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
860
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
Building Applications with DynamoDB
mza
96
7.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Into the Great Unknown - MozCon
thekraken
41
2.6k
The Cost Of JavaScript in 2023
addyosmani
55
10k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Raft: Consensus for Rubyists
vanstee
141
7.5k
Agile that works and the tools we love
rasmusluckow
331
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Transcript
confidential ChatGPT と AWS Chalice で始める サーバレス API 開発 2024年7⽉4⽇
confidential TENDA CO., LTD. 1. スピーカー紹介とイントロダクション 2. Chalice とは? 3.
Chaliceの導⼊ 4. ChatGPTに⼿伝ってもらいAPIの実装 5. デモの動作結果確認 6. まとめ ⽬次
confidential TENDA CO., LTD. ⾞⽥ 尚平(くるまだ しょうへい) ・東京郊外で⽣まれ育ち、⼤学で情報系に触れる ・新卒で⼊社したSI会社の1年⽬に仙台へ転勤 ・⼤規模な業務システムのアプリ開発(管理作業含む)をメインに従事
・割とレガシーなシステムが多く、AWSを使った開発もそこまで多くなかった ・AWSなどクラウド技術をキャッチアップするためSAAを取得 ・2024年4⽉にテンダ⼊社 ・現在はバックエンドエンジニアをメインにいろいろ経験中 ・⽣成AIは流れが早すぎて若⼲挫折中。AWSが⽣成AI資格を作るので、受けようか悩み中 3 スピーカー紹介とイントロダクション
confidential TENDA CO., LTD. 前職で初めてAWSに触れる それまではオンプレミスでJavaやVBを使ったシステムを担当 AWSの存在はもちろん知っていたが、仕事で使うことはなさそうだったので、 そこまで深く勉強できていなかった。 そんなときに突然の異動辞令が。 「来⽉からAWS案件を東京メンバと合同でやるから、チームリーダとしてよろしく」
「よくわかんないけど、新規顧客でサーバレスシステムをスクラム開発するらしいよ。」 その⽇から必死に勉強して、AWS?サーバレス?スクラム?を勉強。 結局その案件はプチ炎上したが、エンジニアとして⾮常によい経験ができた。 4 スピーカー紹介とイントロダクション
confidential TENDA CO., LTD. 特に”サーバレス”という概念 オンプレミスでアプリ開発していた⼈間からすると ”サーバなしでプログラム動くわけないでしょ”と思っていたが、 実際にサーバの構築なしでプログラムを動かすことができた。 ※実際には開発者がサーバを意識しなくてよいだけで、サーバ⾃体は存在している。 今回はAWSで実装できるサーバレスについて。
そして、このサーバレスをさらに簡単に構築するためのフレームワーク「Chalice」を 流⾏りに乗っかってChatGPTを活⽤して紹介させていただきたい。 5 スピーカー紹介とイントロダクション
confidential TENDA CO., LTD. ChaliceはAWS が提供しているAWS LambdaとAPI Gatewayを簡単に利⽤するためのPythonベースのマイクロフレームワーク AWS Lambdaはサーバレスアーキテクチャの象徴のようなサービスでAPI
Gatewayと連携することで スケーラブルなAPIをAWS上に構築することができる 6 Chaliceとは? AWS Lambda クライアント API Gateway DBなどの各種サービス との連携が可能
confidential TENDA CO., LTD. ⾼速なプロトタイピング: • 少ないコード量でサーバレスAPIを構築可能 • 開発からデプロイまでのサイクルが短い ⾃動デプロイ:
• デプロイコマンド⼀つで、Lambda関数とAPI Gatewayがセットアップされる • ローカル・devなど環境を定義することが可能 • 簡単なコマンド例: chalice deploy AWSとの統合: • IAMロールの⾃動設定ができるため、セキュリティや認証などの実装が楽 • AWSのPython SDKであるBoto3とシームレスに統合されているため、様々なサービスとの連携が可能 7 Chaliceとは?
confidential TENDA CO., LTD. サーバ管理不要: • インフラの管理が不要で、コードに集中できる • AWS管理コンソールでの操作は不要で、コードだけでリソース管理が可能(IaCの実現) ⾃動スケーリング:
• AWS Lambdaによる⾃動スケーリングで、⾼い可⽤性とパフォーマンスを実現 コスト効率: • 使⽤した分だけの従量課⾦制 • 初期投資が少なく、スタートアップや⼩規模プロジェクトにも最適 「便利そう」「試してみたい」と少しでも思ってもらえたでしょうか? 8 Chaliceとは?
confidential TENDA CO., LTD. インストール ※Pythonやpipはインストール済みの前提 pip install chalice プロジェクト作成
chalice new-project chaliceApp 9 Chaliceの導⼊
confidential TENDA CO., LTD. プロジェクトディレクトリの構成 ・app.py Chaliceアプリケーションのエントリーポイント PythonのWebフレームワークのFlaskに近い記法 10 Chaliceの導⼊
デフォルトはエンドポイントのルート(‘/’)にアクセスしたら レスポンスボディとして{‘hello’: ‘world’}を返すようなコードになっています。
confidential TENDA CO., LTD. プロジェクトディレクトリの構成 ・config.json Chaliceアプリケーションの設定全般を扱う 各環境ごとの設定やデプロイに関する情報、 IAMロール、環境変数なども保持することができる 11
Chaliceの導⼊
confidential TENDA CO., LTD. 実際に起動・リクエストしてみる ・ローカルで起動 ここではローカルにAPIサーバを⽴てて動作の確認ができる。 ・アクセス 12 Chaliceの導⼊
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の導⼊
confidential TENDA CO., LTD. ChatGPTはʮ"EWBODFE%BUB"OBMZTJTʯͱ͍͏ػೳΛ͑ࣗવݴޠ͔ΒPythonコードの作成が可能 もちろん分からないことは教えてくれるし、エラーがあったら⼀緒に悩んでくれる 以下が今回使⽤したプロンプト。(Pythonファイルは直接ダウンロードできる形でも提供してくれる) ⾞⽥: 14 ChatGPTに⼿伝ってもらいAPIの実装
confidential TENDA CO., LTD. ChatGPT: 15 ChatGPTに⼿伝ってもらいAPIの実装
confidential TENDA CO., LTD. ChatGPT: 16 ChatGPTに⼿伝ってもらいAPIの実装 ChatGPTに⾔われたとおりに実装して動くのか? やってみました。
confidential TENDA CO., LTD. 実際に動くのか?? ⇨さすがに⼀発では無理だった ・古いバージョンの書き⽅をして怒られたり ・オブジェクトの展開⽅法を間違えたり ・{“summary”:“¥u3053¥u306e¥u30b5¥u30a4¥u30c8¥ ・・・みたいにUnicodeエスケープシーケンスがでていたり
・参照するべき変数をミスっていたり 今回のパターンだと4箇所を後から修正 ただどれもエラー内容を⾒ればわかりやすいものしかなかったため、時間かからず修正できた。1時間かからず。 ⼿で直して動かしてみる 本イベントについてのテンダのプレスリリースを要約してみた結果が以下 17 デモの動作結果確認
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は省略
confidential TENDA CO., LTD. 今回AWS謹製のChaliceというフレームワークを使⽤して、 ChatGPTに⼿伝ってもらいながら、⽣成AIを組み込んだAPIを作成してみました。 思ったことをまとめると以下になります。 ・Chaliceは(知名度は低い気がするが)APIを作成するだけであれば、⾮常に簡単で便利 ・環境構築やAWSへのリソース作成もコードのコピペで実現できるのでコードを書くことに集中しやすい ・⼤規模なことや他のAWSサービスを繋ぐときには、⼯夫が必要
→共通化やデコレーターの書き⽅など →複雑な場合はSAM(AWS Serverless Application Model )のほうがいいのか・・・?有識者いれば教えてください。 ・コード⾃体もシンプルなので、初学者でも⽐較的学習ハードルは低い ・ChatGPTで簡単なプログラムは作れる。がエラーは完全に解消してくれるわけではない →ある程度の⾃⼒は必要。完全に仕事は取られるのはもう少し先・・・なはず 19 まとめ
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 参考⽂献
confidential TENDA CO., LTD. ご清聴ありがとうございました!! 21
confidential 【注意事項】 l 本資料を無断で第三者に配布することを禁⽌します。 l Amazon Web Services、『Powered by Amazon
Web Service』ロゴ、[その他AWS商標名]は、⽶国および/またはその他の諸国における、Amazon.com, Inc. またはその関連会社の商標です。