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
第90回 雲勉【オンライン:初心者向け】AWS App RunnerにLaravelをデプロイ...
Search
Y.Sumikura
December 09, 2022
Technology
930
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
第90回 雲勉【オンライン:初心者向け】AWS App RunnerにLaravelをデプロイしてLINEBotを作ってみよう
Y.Sumikura
December 09, 2022
More Decks by Y.Sumikura
See All by Y.Sumikura
第103回 雲勉【オンライン】インフラエンジニアにおける ChatGPT の便利な使い方と注意点
sumikurayurie1125
1
320
第101回 雲勉【オンライン】VPC から始めるネットワーク入門
sumikurayurie1125
0
190
第99回 雲勉【オンライン:初心者向け】Infrastructure as Code (IaC) 入門 〜TerraformとAnsibleを使ってみよう〜
sumikurayurie1125
0
260
第96回 雲勉【オンライン:初心者向け】インフラエンジニアのKubernetes入門
sumikurayurie1125
0
270
第8回 雲勉LT【オンライン:中級者向け】AthenaでS3上のデータとDynamoDBのデータを結合する
sumikurayurie1125
0
390
第93回 雲勉【オンライン:初心者向け】CI/CDって結局何なの?インフラエンジニアがCode3兄弟を学ぶ
sumikurayurie1125
13
4.9k
第7回 雲勉LT【オンライン:初心者向け】サーバレスコンテナサービス Lambda, Fargate, App Runnerの特徴、違いを解説
sumikurayurie1125
3
680
第6回 雲勉LT【オンライン:初心者向け】2022年 気になったアップデート情報:「RDSコンソールの、EC2ワンクリック接続オプション」について
sumikurayurie1125
0
190
第5回 雲勉LT【オンライン:初心者向け】GCのサービスだけでCI_CDを構築してみよう
sumikurayurie1125
0
82
Other Decks in Technology
See All in Technology
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
240
攻撃者視点で考えるDetection Engineering
cryptopeg
3
2k
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
160
人材育成分科会.pdf
_awache
4
300
Chainlitで作るお手軽チャットUI
ynt0485
0
280
Claude Codeをどのように キャッチアップしているか
oikon48
13
8.6k
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
1.3k
LayerXにおけるセキュリティ管理の現在地と次の一手
tosho
0
240
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
0
210
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
420
FPGAの開発コンペでZephyrを使ってみた
iotengineer22
0
140
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
1.3k
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
My Coaching Mixtape
mlcsv
0
150
How to train your dragon (web standard)
notwaldorf
97
6.7k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
230
Optimizing for Happiness
mojombo
378
71k
Become a Pro
speakerdeck
PRO
31
6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
390
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
310
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Marketing to machines
jonoalderson
1
5.5k
Transcript
第90回 雲勉【オンライン︓初⼼者向け】 AWS App RunnerにLaravelをデプロイして LINEBotを作ってみよう 2022/12/08
アジェンダ 2 0. ⾃⼰紹介 1. AppRunnerとは(19:05~19:15) 2. AppRunnerにLaravelをデプロイ (19:15~19:25) 3.
LINE Botの作成 (19:25~19:40) 4. まとめ (19:40~19:45) 5. 質疑応答(19:45~20:00)
0.講師⾃⼰紹介 3 n 名前 有本 史紀(ありもとふみのり) • クラウドインテグレーション事業部開発第⼆セクション • 過去3社ほどWebエンジニアとして活動
• 2020年5⽉アイレット ⼊社 • 主にLAMP環境でのアプリケーション開発に従事、アイレット ではそれに加えてLambdaでのサーバーレスアプリケーショ ン開発、Redshiftを使ったDWH開発などを⾏なっている
1. AppRunnerとは 4
1. AppRunnerとは 5 n 概要 • 「AWS App Runner は、コンテナ化されたウェブアプリケーションや
API を開発者が簡単かつ迅速にデプロイ できるフルマネージド型サービスです。⼤規模に、しかも事前のインフラ経験を必要とせずにデプロイすること ができます。ソースコードからでも、コンテナイメージからでも始められます。App Runner は、ウェブアプリ ケーションを⾃動的に構築してデプロイし、暗号化を利⽤するトラフィックの負荷を分散し、トラフィックの ニーズに合わせてスケールし、お客様のサービスがプライベート Amazon VPC で実⾏される他の AWS のサー ビスやアプリケーションと簡単に通信できるようにします。App Runner を使⽤すれば、サーバーやスケーリン グについて煩わされることもなく、アプリケーションに集中できる時間が増えます。」 • → 裏側でFargateが実⾏されているので⾃動でスケーリング、AZ分散が⾏われる • → インフラに関する詳細な知⾒があまりなくてもコンテナアプリケーションをデプロイできる︕
1. AppRunnerとは 6 n AppRunnerでできること • AppRunner単体でWebアプリケーションを構築できる - 独⾃ドメインが払い出される •
オートスケーリング • CI / CD環境構築 - ECRにDockerイメージがプッシュされたとき - Gitリポジトリにプッシュされたとき 対応している⾔語 (https://docs.aws.amazon.com/apprunner/latest/dg/service-source-code.html) • CloudWatch - メトリクス監視 - ログ管理 • Route53でのカスタムドメイン作成 • IAMで他のサービスとの連携を制御できる(ただしCLIの知識が必要)
1. AppRunnerとは 7 n AppRunnerでできないこと(2022年11⽉現在) • シークレットマネージャー、パラメータストアの連携 - 環境変数はAppRunnerのコントロールパネルから設定する •
複数のイメージ管理 - PHPだとNginxとPHP-FPMのイメージをタスク定義ファイルで連携するような⽅法は使えない • セキュリティグループにおけるインバウンド設定 • 別のサービスからInvokeする https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.AppRunner.AppRunnerClient.html 基本的にはhttpのエンドポイントでの実⾏
1. AppRunnerとは 8 n AppRunnerのユースケース • モバイルアプリやAPIのバックエンド • ⼩規模ウェブサイトのCMSシステム等 •
アプリのプロトタイプ環境としての利⽤ • コンテナでのアプリケーション構築を試してみたい⼈
1. AppRunnerとは 9 n 今回はLINEBotを利⽤したアプリを作ってみよう 本⽇はブルーの枠内 • App Runner •
ECR の説明を⾏います
1. AppRunnerとは 10 n 今回はLINEBotを利⽤したアプリを作ってみよう 完成サンプルイメージ
2. AppRunnerにLaravelをデプロイ 11
2.AppRunnerにLaravelをデプロイ 12 n 環境について • MacOS catalina • Docker version
20.10.6 • aws version aws-cli/2.1.36 • Laravel v9.21.6 • PHP v8.1.13 n 他に必要なもの • AWSアカウント • AppRunner、ECRの操作に関するロール • アクセスキーとシークレットキー • LINEアカウント
2.AppRunnerにLaravelをデプロイ 13 n アプリケーションの構造 docker/ (各種Dockerfile) ┣ ecs ┣ mysql
┣ nginx ┣ php src/ (Laravelベースのソースコード) ┣ app ・・・・
2.AppRunnerにLaravelをデプロイ 14 n Dockerfileについて PHPの開発はローカル環境はQiitaなどで調べると出てくる「nginx」と「php-fpm」を併⽤ する「docker-compose」を使⽤した構成を利⽤することが多い https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4
2.AppRunnerにLaravelをデプロイ 15 n Dockerfileについて ただ、この構成だと前述の通り、AppRunnerにはデプロイできない それで別途ECRにビルドするためのDockerfileをひとつ⽤意する
2.AppRunnerにLaravelをデプロイ 16 n Dockerfileについて
2.AppRunnerにLaravelをデプロイ 17 n ローカルでビルドしてみる docker build -t laravel-docker-aws -f ./docker/ecs/Dockerfile
./src
2.AppRunnerにLaravelをデプロイ 18 n ローカル環境で確認する docker run --rm -it -p 80:80
laravel-docker-aws http://localhostにアクセス
2.AppRunnerでLaravelをデプロイ 19 n コンテナイメージをECRにプッシュする コンソール画⾯ > Elastic Container Registry >
レジストリの作成 「プッシュコマンドの表⽰」からコマンドを取得 aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 21xxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com docker tag laravel-docker-aws:latest 21 21xxxxxxxxxx.dkr.ecr.ap-northeast- 1.amazonaws.com/laravel_sandbox:latest docker push 21 21xxxxxxxxxx.dkr.ecr.ap-northeast- 1.amazonaws.com/laravel_sandbox:latest
2.AppRunnerでLaravelをデプロイ 20 n ECRにプッシュする
2.AppRunnerでLaravelをデプロイ 21 n ECRにプッシュする
2.AppRunnerでLaravelをデプロイ 22 n ECRからAppRunnerにデプロイ 「コンソール画⾯」 > 「AppRunner」 > 「サービスの作成」
2.AppRunnerでLaravelをデプロイ 23 n ECRからAppRunnerにデプロイ 基本的にはデフォルトの設定のままでOK
2.AppRunnerでLaravelをデプロイ 24 n ECRからAppRunnerにデプロイ ポートを80に変更
2.AppRunnerでLaravelをデプロイ 25 n ECRからAppRunnerにデプロイ ビルドが終了すると「デフォルトドメイン」にアクセスできます
3. LINEBot作成 26
3. LINEBot作成 27 n LINEBotの考え⽅ • LINE Developersのアカウントにログインして「Create a new
channel」から 「Messaging API」を作成する
3. LINEBot作成 28 n LINEBotの考え⽅ • WebhookのURLとして今回作成するAppRunnerのURLを指定する
3. LINEBot作成 29 n AppRunner側のアプリに必要なのは • チャンネルシークレット • チャンネルアクセストークン n
LINEBotに必要なものは • WebhookURL
3. LINEBot作成 30 n Laravelでの実装⽅法 • 「LINE Messaging API SDK
for PHP」をインストール • https://github.com/line/line-bot-sdk-php $ composer require linecorp/line-bot-sdk
3. LINEBot作成 31 n 実装イメージ
3. LINEBot作成 32 n Laravelでの実装⽅法 < routes/api.php > webhookの受け⼊れのルートを設定する Route::post('/webhook',
[App¥Http¥Controllers¥LineWebhookController::class, 'index'])->name('api.webhook_index');
3. LINEBot作成 33 n Laravelでの実装⽅法(コントローラ) < app/controllers/LineWebhookController> <⼤切な部分> $httpClient =
new CurlHTTPClient(config('line.line_channel_access_token')); $bot = new LINEBot($httpClient, ['channelSecret' => config('line.line_channel_secret')]); $signature = $request->header(HTTPHeader::LINE_SIGNATURE); $events = $bot->parseEventRequest($request->getContent(), $signature);
3. LINEBot作成 34 n Laravelでの実装⽅法
3. LINEBot作成 35 n Laravelでの実装⽅法 <Repositoryクラス>
3. LINEBot作成 36 n Laravelでの実装⽅法 <Botの設定ファイル>
3. LINEBot作成 37 n 今後のアップデート Botの設定ファイルについて ・完全⼀致 ・部分⼀致 に分けて設定していくことで精度をあげていく 今回はconfigファイルで設定しているが、
• S3のJsonファイルを取得する • DBを使⽤する 等のブラッシュアップを検討していく
3. LINEBot作成 38 n 今後のアップデート 完全⼀致でも部分⼀致でもキャッチできなかったテキストメッセージをDBに保存して分析する ことでユーザーの要望に対する精度をあげていく
4. まとめ 39 • AppRunnerはDockerfileひとつで⼿軽にデプロイ、CI/CDもできるのでコンテナベースのアプ リケーション⼊⾨におすすめです。 • LINE Botはバックエンドの設計に注⼒できるし、拡張性もあるので「何か作ってみたいけど 何を作ればいいかわからない」⽅におすすめです︕
4. まとめ 40 ありがとうございました m(__)m