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
PHPなプロダクトをAmazon ECSで開発運用してる話
Search
taiko19xx
November 25, 2017
Technology
0
1.2k
PHPなプロダクトをAmazon ECSで開発運用してる話
PHPカンファレンス北海道出張版(仮)で発表した内容です
taiko19xx
November 25, 2017
Tweet
Share
More Decks by taiko19xx
See All by taiko19xx
Bedrockで遊ぼう! 短期間で色々開発してみた
taiko19xx
1
130
Incident Managerでインシデント発生時のエスカレーションを自動化する
taiko19xx
0
240
LambdaカスタムランタイムでPHPでもサーバーレス!
taiko19xx
0
77
IoTっぽいアプリをk3s+Raspberry Piで実行する
taiko19xx
0
330
ハニーポットから見たWebサーバへの攻撃
taiko19xx
0
2.9k
RaspberryPi+AWSでIoT(っぽ い)GPSロガーを作ってみた
taiko19xx
0
1.6k
PHPからWin32APIをいじってみた
taiko19xx
0
1.7k
Other Decks in Technology
See All in Technology
Glacierだからってコストあきらめてない? / JAWS Meet Glacier Cost
taishin
1
140
B2C&B2B&社内向けサービスを抱える開発組織におけるサービス価値を最大化するイニシアチブ管理
belongadmin
1
5.5k
AI専用のリンターを作る #yumemi_patch
bengo4com
5
3.9k
WordPressから ヘッドレスCMSへ! Storyblokへの移行プロセス
nyata
0
430
KubeCon + CloudNativeCon Japan 2025 Recap
ren510dev
1
360
生成AI時代の開発組織・技術・プロセス 〜 ログラスの挑戦と考察 〜
itohiro73
1
410
mrubyと micro-ROSが繋ぐロボットの世界
kishima
3
400
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 完全版 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming - Expanded
tomzoh
4
3.4k
開発生産性を組織全体の「生産性」へ! 部門間連携の壁を越える実践的ステップ
sudo5in5k
1
5.6k
ネットワーク保護はどう変わるのか?re:Inforce 2025最新アップデート解説
tokushun
0
180
あなたの声を届けよう! 女性エンジニア登壇の意義とアウトプット実践ガイド #wttjp / Call for Your Voice
kondoyuko
4
560
高速なプロダクト開発を実現、創業期から掲げるエンタープライズアーキテクチャ
kawauso
2
7.6k
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
680
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
The Cult of Friendly URLs
andyhume
79
6.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
For a Future-Friendly Web
brad_frost
179
9.8k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
Transcript
PHPなプロダクトをAmazon ECS で開発運用してる話 PHPカンファレンス北海道出張版(仮) PHPオフ会@2017/11/25 @taiko19xx / 木村 俊彦
Amazon ECS使ってみた PHPカンファレンス北海道出張版(仮) PHPオフ会@2017/11/25 @taiko19xx / 木村 俊彦
こんにちは • PHPを使ったプロダクトをDockerとAmazon ECSで開発運用して いますので得られた知見を共有します • DockerとECSの話がメインです • PHPカンファレンスとは?
もくじ • ECS(EC2 Container Service)とは • 構成図 • 何故ECSか •
Docker/ECSで… • 良かった所 • 苦労した所 • 全体のまとめ
ECS(EC2 Container Service)とは • EC2上のDockerコンテナを管理できる • いわゆるコンテナオーケストレーションのサービス • 無料 •
コンソール/AWS CLI/ECS CLI/AWS SDKから操作可能 • マネージドなコンテナレジストリも利用可能 • ECR(EC2 Container Registry) • ログインがめんどくさい • $0.1/GB/月 + 転送料
構成図
何故ECSか • AWS上に構築するという方針は決まっていた • Dockerで構築するのはどうかという話が出た • 管理をどうするか考えていた所、ECS/ECRを見つけた • 確認や検証の結果、採用する事に
Docker/ECSで良かった所
ローカルとリモートで”ほぼ”同様の環境が使える • ローカルはdocker-composeで • リモートもそれに近いように • イメージはCodeBuildでdocker-composeを使ってビルド • 環境はCloudFormationで同等の環境を構築
ローカルとリモートで”ほぼ”同様の環境が使える • 100% docker-composeを使い回す事はできなかった • ECS CLIを利用すれば可能 • CloudFormationにおけるECSのServiceの記述はdocker- composeに比較的近い
• 0から書き直しにはならない • 両方ともYAML
展開しやすい • Dockerベースなので、誰でも環境を起動できるように • リポジトリをcloneしたら環境構築して起動するだけ • コンテナ起動時にcomposer installするように仕込んでいた • VMやVagrantと違い、重いイメージファイルを配布せずに済む
• ただし、以下の面で幸運だったという可能性も • 利用者が全員mac • フロント側も含めて全員コマンドの操作に慣れていた
開発環境構築にかかる時間が少ない • 基本的にはdocker-compose.ymlと必要なDockerfile書いて終わり • ただし… • 記述に慣れていれば、最低限の立ち上げは早そう • あくまで”開発環境” •
AWS側はCloudFormationの記述やら各種設定が大変だった
Docker/ECSで苦労した所
結局Dockerfileを追加変更する事になる • PHPのコンテナ(php:7-fpm-alpine)はそのまま使う予定だったが Dockerfileでカスタムした • タイムゾーンの変更 • メモリやファイルアップロード周りの設定変更 • Composerの追加
• 拡張の追加 • docker-php-ext-installをRUNする • nginxは最初に1度調整したのみ
変わった事をしようとすると一工夫がいる • cron • 各コンテナにはcrondが入ってるが、デフォルトで起動しない • 各サービスやデーモンと同時に起動する必要がある • コンテナ起動時に実行するスクリプトを用意し、その中に記 述
• cron専用コンテナを使わずにPHPコンテナ内でスクリプトを起 動している
変わった事をしようとすると一工夫がいる • 一時的にコンテナを止める必要がある時 • 今回はDBのバックアップ時に一時停止 • コールドバックアップ • SDK経由でECSを操作 •
手動で停止すると自動で復活するので、回避する設定変更も 必要 • 上記設定を戻せば元のコンテナが立ち上がるので、リカバ リー処理は楽
デプロイフローが複雑になった:開始前の想定
設計完了!
デプロイフローが複雑になった:設計時点
Twitter [CC BY 4.0 (http://creativecommons.org/licenses/by/4.0)], via Wikimedia Commons
デプロイフローが複雑になった:設計時点 • リポジトリがGitLabになった • GitLabからCode(Pipeline|Build|Deploy)の直接連携は不可
(CodePipeLineの場合:2017年11月現在)
デプロイフローが複雑になった:設計時点 • リポジトリがGitLabになった • GitLab→Code(Pipeline|Build|Deploy)の直接連携は不可 • API GatewayとLambdaを追加構築 • GitLabのwebhookで起動
• S3に配置 • CodePipelineはS3をチェック
デプロイフローが複雑になった:設計時点 • アプリのビルドとデプロイを別途設定する必要があった • CodeBuildの追加 • CodeDeployの設定
リリース!
デプロイフローが複雑になった:リリース時点
Twitter [CC BY 4.0 (http://creativecommons.org/licenses/by/4.0)], via Wikimedia Commons
デプロイフローが複雑になった:リリース時点 • デプロイ処理に時間がかかっていた • 特にDockerのビルドとCloudFormationの適用に時間がかかる • アプリケーションのデプロイのみを行うCodePipelineを別途作成 • 大体15~20分ほどかかっていたデプロイが3分ほどに短縮 •
Composerやnpmによるライブラリ取得が短縮できれば更に…?
全体のまとめ • 思っていたより難易度が高かった • いい勉強になりました • 学習コストも高い • また使うかと言われると正直… •
使ってみないと分からない部分もあったので、使わなければよ かったという訳ではない • フローの部分はもう少しすっきり出来たはずというのが反省点
自己紹介 • 木村俊彦 @taiko19xx • 株式会社SRIA
株式会社SRIA • Web開発 • フロントエンド制作 • バックエンド構築 • アプリ開発 •
iOS/Android/UWP • その他、デザインやクラウド(Azure/AWS)構築など… • お仕事&お仲間募集中
自己紹介 • 木村俊彦 @taiko19xx • 株式会社SRIA • Web(フロント・バックエンド)もアプリもクラウドもやってま す •
仕事は開発したり打ち合わせに行ったり • 最近はAzureとかAWSをいじっています • 今日は仙台からおいしいものを食べに来ました
ありがとうございました