Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
第90回 雲勉【オンライン:初心者向け】AWS App RunnerにLaravelをデプロイ...
Search
Y.Sumikura
December 09, 2022
Technology
950
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
370
第101回 雲勉【オンライン】VPC から始めるネットワーク入門
sumikurayurie1125
0
220
第99回 雲勉【オンライン:初心者向け】Infrastructure as Code (IaC) 入門 〜TerraformとAnsibleを使ってみよう〜
sumikurayurie1125
0
290
第96回 雲勉【オンライン:初心者向け】インフラエンジニアのKubernetes入門
sumikurayurie1125
0
300
第8回 雲勉LT【オンライン:中級者向け】AthenaでS3上のデータとDynamoDBのデータを結合する
sumikurayurie1125
0
410
第93回 雲勉【オンライン:初心者向け】CI/CDって結局何なの?インフラエンジニアがCode3兄弟を学ぶ
sumikurayurie1125
14
8.5k
第7回 雲勉LT【オンライン:初心者向け】サーバレスコンテナサービス Lambda, Fargate, App Runnerの特徴、違いを解説
sumikurayurie1125
3
730
第6回 雲勉LT【オンライン:初心者向け】2022年 気になったアップデート情報:「RDSコンソールの、EC2ワンクリック接続オプション」について
sumikurayurie1125
0
200
第5回 雲勉LT【オンライン:初心者向け】GCのサービスだけでCI_CDを構築してみよう
sumikurayurie1125
0
110
Other Decks in Technology
See All in Technology
少ない人手 限られた予算 それでも守る 消せない・見つける・戻れる オールハザード型BCP on AWS / 20261107 Mitsutoshi Matsuo
shift_evolve
PRO
0
250
2026 Apache Flink Community Checkpoint
rmetzger
0
200
AI時代に求められる優秀なTechLeadの振る舞い
pospome
11
15k
AI時代の組織作り:チーム開発から「個人×AI」への移行と、持続可能な「開発資本」の築き方
ham0215
2
320
「いつか使う」の「いつか」は来ない 〜AI駆動開発における「作らない」判断について〜
ikki0006
0
170
攻撃 3 時間 vs 復旧 10 時間。アクセスキー流出の非対称性を体感するために CTF を作った話
kazzpapa3
1
160
セキュリティ専任チームなしで攻撃を先回りするSREが実践したSIEM on Amazon OpenSearch Service
cscengineer
PRO
0
620
AWS Quick 入門 | 目指せ Quick マスター 01
inariku
PRO
1
120
試験勉強はGrokBotでやれ
maigo999
0
120
BALLAS Technology Deck
ballas_inc
0
220
ライフワーク「猫でもわかるDirectConnect」
kentapapa
0
280
Microsoft Entra Kerberos で実現するクラウド デバイス管理
tamaiyutaro
2
650
Featured
See All Featured
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
320
My Coaching Mixtape
mlcsv
0
380
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Everyday Curiosity
cassininazir
0
390
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
580
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Test your architecture with Archunit
thirion
2
2.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Designing for Timeless Needs
cassininazir
1
550
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