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
EC-CUBEはサーバレスで動かせるのか?
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
yshimada
March 13, 2025
Technology
280
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
EC-CUBEはサーバレスで動かせるのか?
yshimada
March 13, 2025
More Decks by yshimada
See All by yshimada
ECCUBEAWSの構築をChatGPTに相談してみました
yukishimada
0
830
Other Decks in Technology
See All in Technology
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
22
13k
Amazon Quick on DesktopがIAM Identity Centerで動かない理由
yukiogawa
0
180
あるけみー式LTスライド作成術
alchemy1115
1
210
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
290
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
5
25k
おい、エージェントを使って終わらせろ
nwiizo
0
150
Screen Lens - 今見てる画面を翻訳する
komagata
0
270
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
320
GoにおけるFFIのこれまでとこれから
goccy
5
2.6k
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
370
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
330
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
1
290
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
4k
Site-Speed That Sticks
csswizardry
13
1.5k
Color Theory Basics | Prateek | Gurzu
gurzu
0
460
Art, The Web, and Tiny UX
lynnandtonic
304
22k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
670
A Tale of Four Properties
chriscoyier
163
24k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
How to Ace a Technical Interview
jacobian
281
24k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Building Adaptive Systems
keathley
44
3.2k
Transcript
confidential EC-CUBEはサーバレスで動かせるのか 2025年3⽉13⽇ 株式会社テンダ 島⽥裕基
confidential TENDA CO., LTD. 1. スピーカー紹介 2. EC-CUBEとは 3. AWSとは
4. EC-CUBEってサーバレス化できるの︖ 5. やってみた 6. まとめ ⽬次
confidential TENDA CO., LTD. 島⽥裕基 • ⼤阪府で⽣まれ⻘春時代を宮城県で過ごす • 東北職業能⼒開発⼤学校 ⽣産電⼦システム技術科卒業
• 東京で就職 SI/EC/決済/MSP の⾃社サービスを持つ会社でECを中⼼に開発 • 2015年テンダに⼊社 (マニュアル⾃動作成Dojoを知っていたのがきっかけ) なんでもできる(する)テンダ︕ • 現在はPM業務を中⼼に稼働 • 最近Raspberry Pi Pico 2 W を衝動買いして何をしようか悩んでいる 電⼦ペーパーキット買って遊んでます→ 3 スピーカーについて
confidential TENDA CO., LTD. なんでもできる = なんにも⾊がない 4 スピーカーについて
confidential TENDA CO., LTD. …未だ、、ッッノーマルッ︕ 5 スピーカーについて
confidential TENDA CO., LTD. 株式会社イーシーキューブが提供するECサイト構築システム オープンソースと呼ばれるシステムで、ソースコードが無償で公開されている 以下システム要件(EC-CUBE 4.3より) 6 EC-CUBEとは
参考 : https://doc4.ec-cube.net/quickstart/requirement
confidential TENDA CO., LTD. Amazon Web Services(アマゾン ウェブ サービス、略称︓AWS)とは、 Amazon
Web Services, Inc. により提供されるクラウドコンピューティングサービスである。 2006年にサービス提供が開始され、IaaS における世界的シェアが39%で1位。 世界で数百万以上、⽇本国内においても数⼗万を超える顧客が AWS を利⽤している。 7 AWSとは 参考 : https://ja.wikipedia.org/wiki/Amazon_Web_Services
confidential TENDA CO., LTD. • EC-CUBEはPHPのオープンソースシステム • ステートフルでありセッションやファイル管理を⾏う必要がある ↓ 完全なステートレス(AWS
Lambda等での構成)は難しい ↓ コンテナのサーバレス化(Fargate/ECS) をしてみよう 8 EC-CUBEってサーバレス化できるの︖
confidential TENDA CO., LTD. ECSって︖ • Amazon Elastic Container Service
(Amazon ECS) は フルマネージドコンテナオーケストレーションサービス。 • コンテナ化されたアプリケーションを効率的に デプロイ/管理/スケールできる。 9 EC-CUBEってサーバレス化できるの︖ 参考 : https://aws.amazon.com/jp/ecs/
confidential TENDA CO., LTD. EC-CUBEはdockerで動作する仕組みが提供されている 10 EC-CUBEってサーバレス化できるの︖ 参考 : https://doc4.ec-cube.net/quickstart/docker_compose_install
開発ドキュメントにて以下記事が存在 Docker Composeを使⽤してインストールする https://doc4.ec-cube.net/quickstart/docker_compose_install gitでダウンロードしたリポジトリには左記のように docker利⽤のための資材あり。 dockerで動かせる ということは Fargate/ECSで動かせる、はず︕
confidential TENDA CO., LTD. いきなりFargate/ECSでサービス実⾏するとログ追跡が難しい ので EC2インスタンスを使って環境作成し、 その後Fargate/ECSでサービス起動する。 という流れで進める。 11
EC-CUBEってサーバレス化できるの︖
confidential TENDA CO., LTD. 12 やってみた 先程までの流れを踏まえ、以下の⼿順で構築。 • セキュリティ系の準備(セキュリティグループ/IAMロール) •
検証⽤EC2インスタンスの作成 • ECRにEC-CUBEイメージを設置 • RDSでデータベース作成 • EFSで共⽤ファイルストレージ作成 • EC2で環境作成 • ECSでタスク定義〜サービスの実⾏ • 起動後の微修正
confidential TENDA CO., LTD. 13 やってみた ゴールイメージはこんな感じ
confidential TENDA CO., LTD. セキュリティグループの作成 各サービス向けのセキュリティグループを作成する。 • for_ec2 : 検証⽤EC2⽤。WEBサーバポートを許可する。
• for_efs : 共有ファイルストレージ⽤。 • for_rds : RDS⽤。EC2やECSからのアクセスを許容する。 • for_ecs : ECS⽤。ALBからのアクセスを許可する。 • for_alb : ALB⽤。WEBサーバポートを許可する。 14 やってみた セキュリティ系の準備
confidential TENDA CO., LTD. IAMロールの作成 EC2とECSそれぞれに付与するロールを作成する。 • ttech2025UseECRRole : 検証⽤EC2⽤に付与。
許可ポリシー AmazonEC2ContainerRegistryFullAccess を設定 • ecsTaskExecutionRole : ECSに付与。 許可ポリシー AmazonECSTaskExecutionRolePolicy を設定 15 やってみた セキュリティ系の準備
confidential TENDA CO., LTD. 検証⽤EC2を作成する。 16 やってみた 検証⽤EC2インスタンスの作成 // EC2インスタンスを作成する
vpcは ttech2025-vpc にする ttech2025UseECRRoleロールを付与 // dockerのインストールとサービス起動 # dnf install -y docker # systemctl start docker // gitのインストール # dnf install -y git // EC-CUBEのダウンロード # cd /opt/ # git clone https://github.com/EC-CUBE/ec-cube.git # cd /opt/ec-cube/ # git branch * 4.3 // 2025-03 時点では4.3ブランチが最新 // とりあえずなにも変えずビルド # docker build -t ec-cube .
confidential TENDA CO., LTD. 17 やってみた ECRにEC-CUBEイメージを設置 ECRの作成 リポジトリを作成しておく。 検証⽤EC2から、作成したリポジトリに対してイメージのpushを⾏う。
// ECRログイン(ロール付与してれば成功する) # aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded // ECRへのpushとタグ付け docker tag ec-cube:latest XXXXXXXXXXXX.dkr.ecr.ap-northeast- 1.amazonaws.com/ec-cube:latest docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/ec- cube:latest
confidential TENDA CO., LTD. 18 やってみた RDSでデータベース作成 RDSの作成 データベースを作成しておく。 右記詳細は割愛するが、ポイントは以下
• エンジンタイプを設定する ここでは Aurora MySQL コンパチにする • DBクラスター識別⼦を設定する ここでは ec-cube-cluster とする • インスタンスタイプの設定 ここでは db.t3.medium とする • 接続は極⼒少なくする • セキュリティグループは for_rds とする
confidential TENDA CO., LTD. 19 やってみた RDSでデータベース作成 検証⽤EC2を使って接続確認の実施と、 EC-CUBE利⽤ユーザとそのパスワードを設定する。 //
mysqlのクライアントをインストール # dnf -y install https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm # dnf -y install mysql // RDSに接続 # mysql -h ec-cube-cluster.cluster-c9rb6qfpwavf.ap-northeast-1.rds.amazonaws.com -u admin -p // docker-compose.mysql.yml と同じ設定で登録しておく mysql> CREATE USER 'dbuser'@'%' IDENTIFIED BY 'secret'; mysql> GRANT ALL PRIVILEGES ON eccubedb.* TO 'dbuser'@'%'; mysql> FLUSH PRIVILEGES; ユーザー名/パスワードは docker-compose.mysql.yml と同⼀
confidential TENDA CO., LTD. 20 やってみた EFSで共⽤ファイルストレージ作成 EFSの作成 共⽤ファイルストレージを作成する。 ポイントは以下
• 名前を ec-cube-html に設定 • スループットモード 伸縮⾃在 に設定
confidential TENDA CO., LTD. 21 やってみた EFSで共⽤ファイルストレージ作成 検証⽤EC2を使ってマウントの設定と検証をする。 // EFSを使えるように
# dnf install -y amazon-efs-utils # mkdir /mnt/efs # chmod 777 /mnt/efs # mount -t efs -o tls fs-00f0e4ce20d7117fa:/ /mnt/efs
confidential TENDA CO., LTD. 22 やってみた EC2で環境作成 検証⽤EC2を使ってdocker起動でEC-CUBEを動かす。 // docker-compose.yml
変更 # cd /opt/ec-cube/ # vi docker-compose.yml # git diff docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml index 3b81328da4..1d44066b2f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,9 +5,6 @@ networks: driver: bridge volumes: - mailcatcher-data: - driver: local - ### ignore folder volume ##### var: driver: local @@ -22,23 +19,22 @@ services: ### ローカルでビルドする場合は以下のコマンドを使⽤します ## docker build -t ec-cube --no-cache --pull --build-arg TAG=8.1-apache . ## docker tag ec-cube ghcr.io/ec-cube/ec-cube-php:8.1-apache - image: ${REGISTRY:-ghcr.io}/${IMAGE_NAME:-ec-cube/ec-cube-php}:${TAG:-8.1-apache} + image: XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/ec-cube:latest ports: - - 8080:80 - - 4430:443 + - 80:80 volumes: ### 同期対象からコストの重いフォルダを除外 ##################### - "var:/var/www/html/var" - "vendor:/var/www/html/vendor" - "node_modules:/var/www/html/node_modules" + - "/mnt/efs/html:/var/www/html/html” environment: # EC-CUBE environments - APP_ENV: "dev" - APP_DEBUG: 1 - DATABASE_URL: "sqlite:///var/eccube.db" + APP_ENV: "prod" + APP_DEBUG: 0 + DATABASE_URL: "mysql://dbuser:
[email protected]
1.rds.amazonaws.com:3306/eccubedb?charset=utf8mb4" DATABASE_SERVER_VERSION: 3 DATABASE_CHARSET: 'utf8' - MAILER_DSN: "smtp://mailcatcher:1025" ECCUBE_AUTH_MAGIC: "<change.me>" # TRUSTED_HOSTS: '^127.0.0.1$$,^localhost$$' # ECCUBE_LOCALE: "ja" @@ -59,11 +55,3 @@ services: networks: - backend - ### Mailcatcher ################################## - mailcatcher: - image: schickling/mailcatcher - ports: - - "1080:1080" - - "1025:1025" - networks: - - backend
confidential TENDA CO., LTD. 23 やってみた EC2で環境作成 検証⽤EC2を使ってdocker起動でEC-CUBEを動かす。 // docker-composeインストール
# curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose # docker-compose --version Docker Compose version v2.33.1 // git保有のhtml内容をEFSにコピーする # cp -pr html/ /mnt/efs/ # chmod -R 777 /mnt/efs/html/ // 起動 # docker-compose up -d EC2インスタンスのパブリックIPにアクセス → 表⽰ // 停⽌ # docker-compose down --remove-orphans
confidential TENDA CO., LTD. 24 やってみた EC2で環境作成 httpでIPにアクセスすると画⾯が表⽰される これをECSで対応する︕
confidential TENDA CO., LTD. 25 やってみた ECSでタスク定義〜サービスの実⾏ タスク定義の作成 EC2内でdocker-compose.ymlをどう設定するかを宣⾔したように、 ECSのタスク定義をどう設定するかでAWSコンテナを操作するかが決まる。
… services: ### ECCube4 ################################## ec-cube: ### ローカルでビルドする場合は以下のコマンドを使⽤します ## docker build -t ec-cube --no-cache --pull --build-arg TAG=8.1-apache . ## docker tag ec-cube ghcr.io/ec-cube/ec-cube-php:8.1-apache image: XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/ec-cube:latest ports: - 80:80 volumes: ### 同期対象からコストの重いフォルダを除外 ##################### - "var:/var/www/html/var" - "vendor:/var/www/html/vendor" - "node_modules:/var/www/html/node_modules" - "/mnt/efs/html:/var/www/html/html” … … … … … … 似てる〜
confidential TENDA CO., LTD. 26 やってみた ECSでタスク定義〜サービスの実⾏ タスク定義の作成 docker-compose.ymlを参考にタスク定義に設定したもの(pickup) •
コンテナ : イメージURIをdocker-compose.ymlに設定したものと同じにする。 • 環境変数 : APP_ENV / APP_DEBUG / DATABASE_URL / ECCUBE_AUTH_MAGIC を docker-compose.ymlに設定したものと同じにする。 • ボリューム / コンテナマウントポイント : docker-compose.ymlと同様に、EFSを設定。 設定したら作成実施。 タスク定義ができたら、 続いてクラスターの作成へ。
confidential TENDA CO., LTD. 27 やってみた ECSでタスク定義〜サービスの実⾏ クラスターの作成 クラスターはECSを動作させるための箱です。 インフラストラクチャ
で AWS Fargate(サーバーレス)にチェックを⼊れ作成します。 続いてサービスの作成。
confidential TENDA CO., LTD. 28 やってみた ECSでタスク定義〜サービスの実⾏ サービスの作成 先ほど作成したタスク定義を⽤いて、サービスを作成する。 ポイントを以下に列挙
• コンピューティングオプション : 「起動タイプ」に設定 • 起動タイプ : 「FARGATE」を選択 • アプリケーションタイプ : 「サービス」を選択 • タスク定義(ファミリー指定) : 先ほど作成した ec-cube を選択 • ネットワーキングVPC : 本勉強会⽤のVPCを選択 • サブネット : 利便性を考えてPublic系選択 • セキュリティグループ : 最初に作成した 「for_ecs」 を選択 • ロードバランシングを使⽤ : チェックをつける • 新しいリスナー / 新しいターゲットグループを作成する 設定したら「作成」実⾏。
confidential TENDA CO., LTD. 29 やってみた ECSでタスク定義〜サービスの実⾏ サービスの作成 暫く待つと実⾏中に切り替わる。 が、、ALB設定周りを変更する必要がある。
confidential TENDA CO., LTD. 30 やってみた ECSでタスク定義〜サービスの実⾏ ALBの設定 作成直後だとエラー 到達不可能を回避
confidential TENDA CO., LTD. 31 やってみた ECSでタスク定義〜サービスの実⾏ ALBの設定 ECSサービス作成経由だと細かい設定がされていないので修正する。 到達不可能の理由は、ALBのセキュリティグループが「for_ecs」になっているから。
→最初に作成した「for_alb」に変更する。 もう1点、作成したターゲットグループの属性編集を⾏い、 「維持設定をオンにする」にチェックを⼊れること。これで複数インスタンスでも 対象を維持できる。
confidential TENDA CO., LTD. 32 やってみた ECSでタスク定義〜サービスの実⾏ ALBにアクセスすると画⾯が表⽰される
confidential TENDA CO., LTD. 33 やってみた 起動後の微修正 動作確認を進めていると、会員登録画⾯に進めないことを確認。。 index.phpを修正することで回避できそう。 EC2で右記対応。
ECRのリポジトリを最新化したら、 ECSのサービスを強制更新。 再度アクセスすると会員登録画⾯OKに。 # cd /opt/ec-cube/ # vi index.php # git diff index.php diff --git a/index.php b/index.php index 001279a600..d33974a002 100644 --- a/index.php +++ b/index.php @@ -55,6 +55,10 @@ if ($trustedHosts) { Request::setTrustedHosts(explode(',', $trustedHosts)); } +if (@$_SERVER["HTTP_X_FORWARDED_PROTO"] === 'https') { + $_SERVER['HTTPS'] = 'on'; +} + $request = Request::createFromGlobals(); // 再度ビルド # docker build -t ec-cube . // ECRログイン(ロール付与してれば成功する) # aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password- stdin XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com // ECRへのpushとタグ付け docker tag ec-cube:latest XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/ec-cube:latest docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/ec-cube:latest 参考 : https://umebius.com/eccube/elb-alb-https-restrict-err_too_many_redirects/
confidential TENDA CO., LTD. 34 やってみた すべて完了
confidential TENDA CO., LTD. 35 まとめ EC-CUBEをサーバレスで動かすことができた。 EC-CUBEを完全なサーバレス(AWS Lambda etc)で動かすのは難しいが、
コンテナのサーバレス(Fargate/ECS)なら⽐較的現実的だった。 EC-CUBEにはDocker関連の資材が標準で⽤意されているため、 タスク定義の設定を理解できれば対応する敷居は⾼くない。 (今回紹介しませんでしたが、Docker Compose を使ってECSに直接デプロイもできるそうな。)
confidential TENDA CO., LTD. 36 ありがとうございました
confidential TENDA CO., LTD. 37 参考⽂献 • EC-CUBE システム要件 https://doc4.ec-cube.net/quickstart/requirement
• Amazon Web Services Wikipedia https://ja.wikipedia.org/wiki/Amazon_Web_Services • Amazon Elastic Container Service https://aws.amazon.com/jp/ecs/ • EC-CUBE Docker Composeを使⽤してインストールする https://doc4.ec-cube.net/quickstart/docker_compose_install • ELB、ALBの冗⻑化でHTTPSアクセスがHTTPになる現象を回避する⽅法 https://umebius.com/eccube/elb-alb-https-restrict-err_too_many_redirects/
confidential 【注意事項】 l 本資料を無断で第三者に配布することを禁⽌します。 l Amazon Web Services、『Powered by Amazon
Web Service』ロゴ、[その他AWS商標名]は、⽶国および/またはその他の諸国における、 Amazon.com, Inc. またはその関連会社の商標です。