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
330
第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
5.1k
第7回 雲勉LT【オンライン:初心者向け】サーバレスコンテナサービス Lambda, Fargate, App Runnerの特徴、違いを解説
sumikurayurie1125
3
680
第6回 雲勉LT【オンライン:初心者向け】2022年 気になったアップデート情報:「RDSコンソールの、EC2ワンクリック接続オプション」について
sumikurayurie1125
0
200
第5回 雲勉LT【オンライン:初心者向け】GCのサービスだけでCI_CDを構築してみよう
sumikurayurie1125
0
84
Other Decks in Technology
See All in Technology
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
220
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
13
6.4k
ヘルスケア領域における AI 活用と その安全性担保のための取り組み (Leveraging AI in Healthcare and Our Efforts to Ensure Its Safety) - Google I/O Extended Tokyo 2026, July 11, 2026
zettaittenani
0
410
アカウントが増えてからでは遅い? ~ マルチアカウント統制の勘所 ~
kenichinakamura
0
250
美しいコードを書くためにF#を学んでみた話
yud0uhu
1
450
Compose 新機能総まとめ / What's New in Jetpack Compose
yanzm
0
300
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
300
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
【Claude Code】鹿野さんに聞く 私の推しの並行開発環境 大公開 / claude-code-parallel-2026-07-15
tonkotsuboy_com
12
8.4k
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
4
1.4k
「早く出す」より「事業に効く」 ── 顧客の業務サイクルから逆算するAI時代の二重ループ開発と「変化の設計者」 / devsumi2026
rakus_dev
1
330
AI Coding Agent時代のcdk-nagガードレール 〜組織ルールを強制CIで守り抜く設計の挑戦〜
mhrtech
3
350
Featured
See All Featured
HDC tutorial
michielstock
2
740
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
190
エンジニアに許された特別な時間の終わり
watany
108
250k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
880
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Building Adaptive Systems
keathley
44
3.1k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
A Modern Web Designer's Workflow
chriscoyier
698
190k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.6k
Bash Introduction
62gerente
615
220k
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