Slide 1

Slide 1 text

confidential EC-CUBE/AWSの構築を ChatGPTに相談してみました 2024年3⽉14⽇ 株式会社テンダ 島⽥裕基

Slide 2

Slide 2 text

confidential TENDA CO., LTD. 1. スピーカー紹介 2. ChatGPTとは 3. EC-CUBEとは 4. AWSとは 5. ChatGPTとの会話 6. 実際にAWS/EC-CUBE環境を作成する 7. まとめ ⽬次

Slide 3

Slide 3 text

confidential TENDA CO., LTD. 島⽥裕基 • ⼤阪府で⽣まれ⻘春時代を宮城県で過ごす • 東北職業能⼒開発⼤学校 ⽣産電⼦システム技術科卒業 • 東京で就職 SI/EC/決済/MSP の⾃社サービスを持つ会社でECを中⼼に開発 • 2015年テンダに⼊社 (マニュアル⾃動作成Dojoを知っていたのがきっかけ) なんでもできる(する)テンダ︕ • 現在はPM業務を中⼼に稼働 • 最近Raspberry Pi5をプレゼントしてもらう 3 スピーカーについて

Slide 4

Slide 4 text

confidential TENDA CO., LTD. なんでもできる = なんにも⾊がない 4 スピーカーについて

Slide 5

Slide 5 text

confidential TENDA CO., LTD. テンダのパートナーランクを上げる︕ 5 スピーカーについて

Slide 6

Slide 6 text

confidential TENDA CO., LTD. OpenAI社が開発したAI 個⼈や⼩規模なプロジェクト向けには無料プランが提供されており、 本勉強会でも無料のChatGPT 3.5を利⽤しています。 商⽤利⽤や⼤規模なプロジェクトでは、有料プランに加⼊する必要あり。 最新のモデルであるChatGPT 4を使⽤する場合も有料プランが必要。 6 ChatGPTとは

Slide 7

Slide 7 text

confidential TENDA CO., LTD. 島⽥ 勉強会を開催する予定です。 ChatGPTのことを知らない⼈に向けて「 ChatGPTとは︖」を説明したいです。最適な説明 を教えて下さい。 ChatGPT ChatGPTは、OpenAIによって開発された⼈⼯知能(AI)プログラムです。このプログラム は⾃然⾔語処理(NLP)の技術を使⽤しており、テキストベースの対話を⾏うことができま す。ChatGPTは、与えられたテキストに基づいて⽂脈を理解し、適切な応答を⽣成します。 そのため、ユーザーが質問をしたり、会話をしたりする際に、より⾃然な対話体験を提供 します。 ChatGPTは⼤規模なデータセットで訓練されており、様々なトピックに関する知識や⾔語 パターンを学習しています。そのため、ユーザーが何かを尋ねたり、会話をする際に、広 範囲な情報や洞察を提供することができます。 また、ChatGPTは教育、カスタマーサポート、エンターテイメントなど、さまざまな分野 で活⽤されています。その柔軟性と⾼度な対話能⼒により、多くの⼈々がChatGPTを利⽤ して、さまざまな⽬的に活⽤しています。 7 ChatGPTとは

Slide 8

Slide 8 text

confidential TENDA CO., LTD. 島⽥ うーん、少し説明が⻑いです。 発表時間が短いのでもっと簡潔にできませんか︖ ⽂字量を3割程度にしてもらえますか︖ ChatGPT もちろんです。 ChatGPTは、⼈⼯知能のプログラムで、テキストベースの対話を⾏うことができます。 ⾔語パターンを学習し、⾃然な会話を提供します。さまざまな分野で活⽤されています。 8 ChatGPTとは

Slide 9

Slide 9 text

confidential TENDA CO., LTD. 株式会社イーシーキューブが提供するECサイト構築システム オープンソースと呼ばれるシステムで、ソースコードが無償で公開されている 以下システム要件(最新のEC-CUBE 4.2より) 9 EC-CUBEとは 分類 ソフトウェア Version WebServer Apache 2.4.x (mod_rewrite / mod_ssl 必須) PHP PHP 7.4 〜 8.1 Database PostgreSQL 10.x 〜 14.x (pg_settingsテーブルへの参照権限 必須) Database MySQL 5.7 or 8.0 (InnoDBエンジン 必須) Database SQLite(開発⽤途向け) 3.x

Slide 10

Slide 10 text

confidential TENDA CO., LTD. 10 EC-CUBEとは 島⽥ EC-CUBEというパッケージについて教えて下さい。 ChatGPT EC-CUBE(イーシーキューブ)は、⽇本発のオープンソースのECサイト構築パッケージで す。EC-CUBEは、ウェブ上での商品販売やオンラインショップの運営を簡単にするための ツールとして利⽤されます。以下にEC-CUBEの特徴や機能をいくつか挙げます︓

Slide 11

Slide 11 text

confidential TENDA CO., LTD. 11 EC-CUBEとは ChatGPT • オープンソース: EC-CUBEはオープンソースであり、無料で利⽤できます。 これにより、多くの開発者や企業が⾃由にカスタマイズや改善を⾏うことができます。 • カスタマイズ性: EC-CUBEは拡張性が⾼く、さまざまな機能やデザインを追加すること が可能です。 プラグインやテーマを使って、独⾃のECサイトを構築することができます。 • ⽇本市場向け: EC-CUBEは⽇本国内で開発され、⽇本の法律や決済システムに対応して います。 これにより、⽇本の企業や個⼈が安⼼して利⽤できます。 • 多⾔語対応: EC-CUBEは多⾔語に対応しており、国際展開を考える企業にも適していま す。 • 決済システムとの連携: EC-CUBEはさまざまな決済システムとの連携が可能です。 クレジットカードや銀⾏振込など、顧客が選ぶ決済⽅法に柔軟に対応できます。 • サポート体制: EC-CUBEにはコミュニティや公式サポートがあり、 問題解決や情報交換が⾏いやすい環境が整っています。

Slide 12

Slide 12 text

confidential TENDA CO., LTD. アマゾンウェブサービスはAmazonが提供するクラウドコンピューティングシステム 世界各国のデータセンターから175以上のフル機能のサービスを展開 12 AWSとは

Slide 13

Slide 13 text

confidential TENDA CO., LTD. • EC-CUBEは主に⽇本向けのパッケージのため情報が少なめ。 • どのように構築すべきか︖ 13 EC-CUBEをAWSでどう構築するのがベストエフォート︖ ChatGPTに相談だ︕

Slide 14

Slide 14 text

confidential TENDA CO., LTD. 14 ChatGPTと会話 構成相談編 島⽥ EC-CUBEをAWSで運⽤することを考えています。 最適な構成を考えてもらえますか︖ ChatGPT EC-CUBEをAWS上で運⽤する際の最適な構成を考える際には、いくつかの要素を考慮する必要があります。以下に、⼀般的なEC-CUBEのAWS構成のポイントを⽰します。 1. **EC2インスタンス**: EC-CUBEのコアアプリケーションをホストするために、EC2インスタンスを使⽤します。インスタンスのサイズとタイプは、トラフィック量やアプリ ケーションの要件に応じて選択する必要があります。また、Auto Scalingを使⽤してトラフィックの変動に柔軟に対応できるように構成することも重要です。 2. **RDS (Relational Database Service)**: EC-CUBEはデータベースを使⽤しており、RDSを使⽤してMySQLやAmazon Auroraなどのリレーショナルデータベースをホスト することが⼀般的です。データベースのパフォーマンスや可⽤性に応じて適切なインスタンスタイプと設定を選択します。 3. **Elastic Load Balancer (ELB)**: トラフィックの負荷分散と⾼可⽤性を確保するために、ELBを使⽤します。複数のEC2インスタンスを配置し、ELBを介してトラフィック を配信することで、システムの信頼性を向上させることができます。 4. **Amazon S3**: 静的コンテンツやメディアファイルなどの⼤容量データを保存するために、Amazon S3を使⽤します。EC-CUBEの画像やファイルをS3に保存し、CDNを 活⽤して⾼速かつ安定した配信を実現します。 5. **Amazon CloudFront**: グローバルなユーザーへの⾼速なコンテンツ配信を実現するために、CloudFrontを使⽤します。特に静的コンテンツやキャッシュ可能なコンテン ツの配信に効果的です。 6. **Amazon Route 53**: ドメイン名の管理やDNSのルーティングを⾏うために、Route 53を使⽤します。ドメイン名の設定やトラフィックのルーティングを柔軟に設定する ことができます。 7. **セキュリティ**: EC-CUBEのセキュリティを確保するために、AWS IAM (Identity and Access Management) を使⽤して適切なアクセス権限を設定し、VPC (Virtual Private Cloud) を使⽤してネットワークのセグメンテーションを⾏います。また、SSL証明書を使⽤してトランザクションの暗号化を実施します。 8. **モニタリングとログ管理**: AWS CloudWatchを使⽤してシステムのモニタリングとアラート設定を⾏い、CloudTrailを使⽤してアカウントのアクティビティを監査します。 これにより、システムのパフォーマンスやセキュリティに関する問題を早期に検出し、対応することができます。 以上が⼀般的なEC-CUBEのAWS構成のポイントです。ただし、具体的な要件や予算、セキュリティ要件などに応じて、より詳細な構成を検討する必要があります。

Slide 15

Slide 15 text

confidential TENDA CO., LTD. 15 ChatGPTと会話 構成相談編 島⽥ 質問のしかたを変えますね。 EC-CUBEをAWSでどのように構築すればいいでしょうか。 あまりお⾦はかけたくない、などいくつか考えていることがあるのでそちらを考慮してく ださい。 1. お⾦をあまりかけたくない。 2. 冗⻑性がある(ロードバランサを使いたい) 3. 秒間50の同時アクセス程度の規模感。1⽇の注⽂数は100程度。 ⼊⼒情報をより具体的な例で質問したり 表現を変えて質問することで回答も変わります。

Slide 16

Slide 16 text

confidential TENDA CO., LTD. 16 ChatGPTと会話 構成相談編 ChatGPT EC-CUBEをAWSで構築する際に、コストを抑えつつ冗⻑性を確保する⽅法を考えます。 1. **Amazon RDSを使⽤する**: - EC-CUBEのデータベースにはAmazon RDSを使⽤します。RDSはデータベースの冗⻑性やバックアップを提供し、コストも⽐較的低いです。T2やT3などのリザーブドインス タンスやスポットインスタンスを使⽤してコストを削減することもできます。 2. **EC2インスタンスを使⽤する**: - EC-CUBEのアプリケーション層にはEC2インスタンスを使⽤します。T3などの低コストなインスタンスタイプを選択し、Auto Scalingを設定して需要に応じてスケーリングす ることでコストを抑えることができます。 3. **ロードバランサーを使⽤する**: - Application Load Balancer(ALB)を使⽤してEC2インスタンスの前にロードバランサーを配置し、トラフィックを分散します。ALBはリクエストごとの料⾦体系を持ってい るため、負荷が低い場合はコストを節約できます。 4. **Amazon S3を使⽤する**: - EC-CUBEの静的コンテンツやアップロードされた画像などはAmazon S3に保存します。S3はスケーラブルで低コストなストレージオプションです。CloudFrontを使⽤して S3のコンテンツをキャッシュし、配信を⾼速化することもできます。 5. **Amazon CloudFrontを使⽤する**: - CloudFrontを使⽤してEC-CUBEのコンテンツをキャッシュし、⾼速かつ安定したアクセスを提供します。また、CloudFrontはリクエストごとの料⾦体系を持っており、負荷 の低い場合はコストを抑えることができます。 6. **Amazon Route 53を使⽤する**: - ドメイン名の管理にはAmazon Route 53を使⽤します。Route 53は低コストで信頼性の⾼いドメインネームシステム(DNS)を提供します。 以上の⼿法を組み合わせて、EC-CUBEをAWSで構築することで、コストを最⼩限に抑えつつ冗⻑性を確保できます。必要に応じて、AWSのコスト管理ツールを使⽤してコストを 監視し、最適化を⾏うことが重要です。

Slide 17

Slide 17 text

confidential TENDA CO., LTD. 17 ChatGPTと会話 構成相談編 島⽥ 上記の構成を図で⽰して欲しいです。 ChatGPT 努⼒は認めるケド、、、

Slide 18

Slide 18 text

confidential TENDA CO., LTD. 18 ChatGPTと会話 構成相談編 ChatGPTさんが頑張って図にしてくれましたが、要するに以下の構成です。

Slide 19

Slide 19 text

confidential TENDA CO., LTD. 19 ChatGPTと会話 EC-CUBE構築相談編 島⽥ EC-CUBE4.2最新版をEC2にインストールしたいです。 ⼿順を教えて下さい。 EC-CUBEをEC2に構築する⼿順を聞いてみます。 先に結論 ChatGPT3.5だと情報が古かったり精査されていないことが多い

Slide 20

Slide 20 text

confidential TENDA CO., LTD. 20 ChatGPTと会話 EC-CUBE構築相談編 ChatGPT EC-CUBE 4.2をAWS EC2にインストールする⼿順を以下に⽰します。EC2インスタンスは、Amazon Linux 2やUbuntuなどの適切なAMI(Amazon Machine Image)を選択し、 インスタンスを起動しておく必要があります。以下の⼿順では、Amazon Linux 2を想定しています。 1. **EC2インスタンスのセットアップ**: - AWS Management Consoleにログインし、EC2ダッシュボードに移動します。 - インスタンスを起動し、適切なインスタンスタイプとAMI(Amazon Linux 2)を選択します。インスタンスのセキュリティグループ設定で、HTTP(ポート80)および HTTPS(ポート443)のトラフィックを許可します。 2. **EC2インスタンスに接続**: - SSHクライアントを使⽤してEC2インスタンスに接続します。たとえば、Terminal(Mac/Linux)やPuTTY(Windows)を使⽤できます。 3. **LAMPスタックのインストール**: EC-CUBEを動作させるためにLAMP(Linux、Apache、MySQL、PHP)スタックをインストールします。以下のコマンドを実⾏します︓ ```bash sudo yum update -y sudo yum install -y httpd mariadb-server php php-mysqlnd sudo systemctl start httpd sudo systemctl enable httpd sudo systemctl start mariadb sudo systemctl enable mariadb ``` 4. **MySQLのセキュリティ設定**: MySQLのセキュリティ設定を⾏います。 ```bash sudo mysql_secure_installation ``` このコマンドを実⾏すると、MySQLのルートパスワードの設定などが求められます。必要に応じて設定してください。 LB配下に置くのでHTTPSは許可し なくて良い。 公式はphp8.1までと⾔っている。 DBはRDSを利⽤するのでここでは 不要。

Slide 21

Slide 21 text

confidential TENDA CO., LTD. 21 ChatGPTと会話 EC-CUBE構築相談編 ChatGPT 5. **PHP設定の変更**: PHPの設定を変更して、EC-CUBEが動作するために必要な設定を有効にします。 ```bash sudo sed -i 's/;date.timezone =/date.timezone = Asia¥/Tokyo/' /etc/php.ini sudo systemctl restart httpd ``` 6. **EC-CUBEのダウンロードと展開**: EC-CUBEの最新版をダウンロードし、適切なディレクトリに展開します。 ```bash cd /var/www/html sudo wget https://github.com/EC-CUBE/ec-cube/releases/download/4.2.0/ec-cube-4.2.0.tar.gz sudo tar -xzvf ec-cube-4.2.0.tar.gz ``` 7. **パーミッションの設定**: EC-CUBEのディレクトリとファイルに適切なパーミッションを設定します。 ```bash sudo chown -R apache:apache /var/www/html/ec-cube sudo chmod -R 755 /var/www/html/ec-cube ``` 8. **設定**: EC-CUBEのインストールを開始します。ウェブブラウザを開き、EC-CUBEが展開されたディレクトリにアクセスします。セットアップウィザードに従って進み、必要なデータ ベース情報などを⼊⼒します。 9. **アプリケーションの設定**: EC-CUBEのセットアップが完了したら、EC-CUBEの管理画⾯にアクセスして、追加の設定やカスタマイズを⾏います。 以上で、EC-CUBE 4.2のインストールが完了します。これでEC2インスタンス上でEC-CUBEを実⾏する準備が整いました。 ルートアクセスでEC-CUBEを⾒せ ることが多い。のでapacheの 設定も変えてやる必要あり。 最新ではない

Slide 22

Slide 22 text

confidential TENDA CO., LTD. 22 実際にEC-CUBEを構築してみる 「ChatGPTとの会話だけで解決」 is 理想 ↓なので↓ • 情報サイトを覗く • 公式(開発者向けドキュメントサイト)を⾒てみる • 開発コミュニティで質問してみる ChatGPTが台頭する以前より実施していた上記⼿法に加え • ChatGPTとの会話からヒントを得る という流れを取るのがベターな選択、と痛感

Slide 23

Slide 23 text

confidential TENDA CO., LTD. 23 実際にEC-CUBEを構築してみる 先程までの構築相談をヒントに、以下の流れで構築をします。 • RDSでデータベース作成 • EC2インスタンスでEC-CUBEアプリサーバ作成 • ALBでロードバランサ作成 • S3バケットを作成してコンテンツ配置 • CloudFrontでCDN設定

Slide 24

Slide 24 text

confidential TENDA CO., LTD. 24 実際にEC-CUBEを構築してみる RDS RDSでデータベース作成を⾏います。 ウィザードに従って作成。 エンジンは MySQL (Auroraではない) を採⽤。 ここでデプロイオプションの選択肢 今回は低コスト意識した開発環境なので単⼀でいいです。 が、クラスターorマルチAZ DBインスタンスはどう使い分ける︖

Slide 25

Slide 25 text

confidential TENDA CO., LTD. 25 実際にEC-CUBEを構築してみる RDS 島⽥ RDSはバックアップ機能が充実してるので、可⽤性を担保するならクラスター、そうじゃ なければ単⼀インスタンスにして問題発⽣時はAWS Backup使ってなるべく最新を復元す るという⽅法にすればいいんじゃないの︖マルチ AZ DB インスタンスの存在意義がないと おもう。200字以内で説明して。 ChatGPT マルチ AZ データベースインスタンスは⾼可⽤性を提供し、障害発⽣時に⾃動フェイル オーバーするため、アプリケーションの中断を最⼩限に抑えます。単⼀インスタンスに バックアップを頼る場合は、復元までの時間がかかり、データ損失が発⽣する可能性が⾼ まります。 このように不明点や使い⽅の相談、要約という点でChatGPTは優れています。 RDS構築は以降特に不明な点もなく構築完了。

Slide 26

Slide 26 text

confidential TENDA CO., LTD. 26 実際にEC-CUBEを構築してみる EC2 EC-CUBEをEC2にインストールします。 最新は4.2なのでp.7のシステム要件を満たす必要があります。 PHP は 〜8.1とのこと。 しかしAmazon Linux 2023のphpのインストールはデフォルトが8.2。 ChatGPTにも聞きましたがマトモな回答はもらえませんでした。 ですが他の⽅の記事をみたところ8.2でもインストールは問題なさそう。 https://qiita.com/rmatttu/items/6a33e3c437aef37b91dd こちらの記事を参考にしつつEC2へEC-CUBEをインストールしました。 先程のRDSでMySQLを導⼊していましたがクライアントは互換のある MariaDBクライアントを⼊れても特に問題はなかったです。 ということでEC2構築は完了。(構築の詳細は本発表ではスキップします)

Slide 27

Slide 27 text

confidential TENDA CO., LTD. 27 実際にEC-CUBEを構築してみる ALB EC2でアプリが動くことを確認したら次はALBで可⽤性を担保する。 ロードバランサを作成するために、事前にターゲットグループを作成します。 ロードバランサとターゲットグループの説明はこんな感じ。 島⽥ ロードバランサとターゲットグループの関係を簡潔に説明してほしい ChatGPT • ロードバランサ︓インターネットからのトラフィックを受け取り、複数のサーバーにトラフィックを分 散します。クライアントからのリクエストを受け取る⼊り⼝の役割を果たします。 • ターゲットグループ︓ロードバランサがトラフィックを送信する対象のグループです。このグループに は、ウェブサーバーやアプリケーションサーバーなどのバックエンドのリソースが含まれます。 ロードバランサは、受け取ったリクエストをターゲットグループにルーティングし、ターゲットグループ 内のサーバーに転送します。 つまり、ロードバランサはトラフィックの⼊り⼝であり、ターゲットグループはトラフィックの⾏き先を 指定します。

Slide 28

Slide 28 text

confidential TENDA CO., LTD. 28 実際にEC-CUBEを構築してみる ALB 参考になる記事も発⾒ https://dev.classmethod.jp/articles/elb-explanation-try/ 天下のクラスメソッドさんのサイトですね … …… ということでALBも作成完了

Slide 29

Slide 29 text

confidential TENDA CO., LTD. 29 実際にEC-CUBEを構築してみる ALB とりあえずターゲットグループに先ほど作成したインスタンスを登録し、1台のみ ターゲットに追加した状態で動作確認をしてみる。 と、ここで問題発⽣。 ALBはhttpsで動作しており、配下のEC2はhttpで動作してますが 管理画⾯ログインして会員管理→会員登録に進んでフォーム⼊⼒しようとすると http使ってるから安全じゃないとの警告、、まずはChatGPTに聞いてみる

Slide 30

Slide 30 text

confidential TENDA CO., LTD. 30 実際にEC-CUBEを構築してみる ALB 島⽥ ALBで運⽤しているEC-CUBEですが、httpsアクセスしたのにformのPOST先がhttpになっ てしまっています。回避⽅法教えて。 ChatGPT EC-CUBEがhttpsで運⽤されている場合に、フォームのPOST先がhttpになってしまう問題は、⼀般的にセキュリティのリスクとなります。この問題を解決するために、いくつか の⽅法があります。 1. **EC-CUBEの設定変更**: EC-CUBEの設定ファイルや管理画⾯から、フォームのPOST先をhttpsに変更することができます。EC-CUBEのバージョンや設定⽅法によって異なりますが、⼀般的にはSSLを 使⽤する設定を有効にすることで、フォームのPOST先をhttpsに変更することができます。 2. **リバースプロキシの設定**: ALBの背後にリバースプロキシを設置し、リバースプロキシ側でhttpsを受け取り、EC-CUBEにhttpで転送するように設定することができます。この場合、EC-CUBEの設定を変 更せずにhttpsを使⽤することができますが、セキュリティ的なリスクが残ります。 3. **ALBの設定変更**: ALBの設定を変更して、httpsで受信したリクエストをhttpでバックエンドのEC-CUBEに転送するようにします。ただし、これもセキュリティ的なリスクがありますので、慎重 に対応する必要があります。 4. **EC-CUBEのコード修正**: EC-CUBEのソースコードを変更して、フォームのPOST先をhttpsに明⽰的に設定することも可能です。ただし、この⽅法はEC-CUBEのアップデート時に修正が失われる可能性 があるため、メンテナンスが必要です。 これらの⽅法の中から適切なものを選択し、セキュリティを確保しつつフォームのPOST先をhttpsに変更してください。

Slide 31

Slide 31 text

confidential TENDA CO., LTD. 31 実際にEC-CUBEを構築してみる ALB 当てにならない、、、 やはり先⼈の情報共有に助けられます。 https://umebius.com/eccube/elb-alb-https-restrict-err_too_many_redirects/ U-MebiusさんはEC-CUBEインテグレートパートナーPLATINUM(最上位)です。 さすが。 ということで、index.phpを編集。 再度アクセスしたところ問題回避できていました。 ということでALB設定も完了。 [root@tttnd-c ec-cube]# diff index.php.bak index.php 8a9,13 > // https check > if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { > $_SERVER['HTTPS'] = 'on'; > }

Slide 32

Slide 32 text

confidential TENDA CO., LTD. 32 実際にEC-CUBEを構築してみる S3 静的なコンテンツはS3に配置しておき、 この後登場のCloudFrontでCDN運⽤する構成がよくあるパターンです。 S3の基本的な使⽤⽅法はスキップしますが、⼀般的な設定をします。 今回はバケットを 「tohokutech-static」で作成します。 このあとCloudFrontで設定をするため、とりあえず設定はデフォルトで作成。 バケットの中⾝は以下の構成です。 contents/ CloudFrontのビヘイビアパスパターン └index.html とりあえずのindexファイル └error.html CloudFront全体のエラーページに設定 └sangaku.pdf なんとなくの静的ファイル 特に詰まるところはなくこちらでS3設定は完了。

Slide 33

Slide 33 text

confidential TENDA CO., LTD. 33 実際にEC-CUBEを構築してみる CloudFront 改めてCloudFrontとは、の説明から。 CloudFront: AWSの⾼速でセキュアなコンテンツ配信サービス • ⾼速化: 世界中のエッジロケーションからコンテンツを提供し、 ユーザーのアクセスを⾼速化。 • セキュリティ: DDoS攻撃からの保護やSSL/TLS暗号化により、 コンテンツのセキュリティを確保。 • 信頼性: グローバルなネットワークを活⽤して、⾼い信頼性と可⽤性を提供。

Slide 34

Slide 34 text

confidential TENDA CO., LTD. 34 実際にEC-CUBEを構築してみる CloudFront 先ずはディストリビューションの作成から。 オリジンはALBとします。(後ほどS3設定を追加) 各種設定は⼀部以外デフォルトで作成します。変更点は以下 • オブジェクトを⾃動的に圧縮 Noに変更 • ビューワープロトコルポリシー HTTPS onlyに変更 • 許可された HTTP メソッド GET〜DELETEに変更 • 代替ドメインの設定 登録をしてみたが、代替ドメイン(CNAME設定済み)名にアクセスするとエラー

Slide 35

Slide 35 text

confidential TENDA CO., LTD. 35 実際にEC-CUBEを構築してみる CloudFront この設定で解決︕ 解決⽅法としては 間違ってる気が、、、 教えて偉いひと(>_<)

Slide 36

Slide 36 text

confidential TENDA CO., LTD. 36 実際にEC-CUBEを構築してみる CloudFront 島⽥ キャッシュキーとオリジンリクエストの箇所をヘッダー/クエリ/クッキーをいずれも「すべ て」に選択したところ問題が解決しました。これは対応⽅法として正しいですか︖ ChatGPT CloudFront でのキャッシュキーとオリジンリクエストの設定は、問題の解決に役⽴つ可能性がありますが、必ずしも適切な対応⽅法とは限りません。ただし、問題が解決したと いう点において、選択した設定が有効だったことが⽰唆されています。 通常、キャッシュキーとオリジンリクエストの設定は、特定のリクエストヘッダーやクエリ⽂字列、クッキーなどを考慮して⾏われます。すべてのヘッダー、クエリ、クッキーを キャッシュキーとオリジンリクエストに含めることで、より柔軟なキャッシュの制御やオリジンへのリクエストのルーティングが可能になります。 ただし、すべてのヘッダー、クエリ、クッキーを含めることは、キャッシュの効率性やセキュリティに影響を与える可能性があります。特に、クエリやクッキーにユーザー固有の 情報が含まれている場合、キャッシュのミスヒット率が⾼くなり、キャッシュの効率が低下する可能性があります。 したがって、すべてのヘッダー、クエリ、クッキーを含める設定が問題を解決した場合でも、最適なキャッシュキーとオリジンリクエストの設定を検討することが重要です。必要 な情報のみを含めることで、キャッシュのパフォーマンスを最適化し、セキュリティを確保することができます。 したがって、問題が解決したのであれば⼀旦はそのままでも問題ありませんが、将来的にキャッシュやセキュリティの最適化を⾏う際に、キャッシュキーとオリジンリクエストの 設定を⾒直すことをお勧めします。 ただこれって正しいの︖ パワープレイに⾒えるんだけど、、

Slide 37

Slide 37 text

confidential TENDA CO., LTD. 37 実際にEC-CUBEを構築してみる CloudFront こちらも同じ状況になって解決された⽅がいました https://zenn.dev/aidiot_dev/articles/20230706-distribute-from-cloudfront-to-alb 中⾝を⾒ると、ほぼ同じ定義なのがわかります →リクエストヘッダーの維持がポイントのようです

Slide 38

Slide 38 text

confidential TENDA CO., LTD. 38 実際にEC-CUBEを構築してみる CloudFront 最後にs3のオリジンを追加し、特定パスパターン(ここでは /contents/* )への アクセスはCloudFront→s3に流すことにする。 こちらはChatGPTさんが活躍してくれました。 島⽥ CloudFrontからs3へつなぎコンテンツを返却したいです。 現状、対象のs3バケットは⾮公開状態にしています。 オリジンやビヘイビアの設定⽅法を教えて下さい。 ChatGPT CloudFront を使⽤して S3 バケットの⾮公開コンテンツを配信するには、 以下の⼿順に従ってオリジンとビヘイビアの設定を⾏います。

Slide 39

Slide 39 text

confidential TENDA CO., LTD. 39 実際にEC-CUBEを構築してみる CloudFront ChatGPT 1. **S3 バケットポリシーの設定**: S3 バケットにアクセスするために、CloudFront が必要なアクセス許可を与えるためのバケットポリシーを設定します。このポリシーには、 CloudFront の Origin Access Identity (OAI) を使⽤して、CloudFront が S3 バケットにアクセスできるようにする設定が含まれます。以下はポリシー の例です: ```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXX" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket/*" } ] } ``` このポリシーで `your-bucket` をバケット名に置き換えます。また、`arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXX` の部分は、実際の CloudFront OAI の ARN に置き換えます。 2. **CloudFront オリジンの設定**: CloudFront で S3 バケットをオリジンとして追加します。これにより、CloudFront は S3 バケットからコンテンツを取得します。 - CloudFront コンソールにログインし、対象のディストリビューションを選択します。 - "Origins and Origin Groups" タブに移動し、"Create Origin" をクリックします。 - "Origin Domain Name" には、S3 バケットのエンドポイント (`your-bucket.s3.amazonaws.com`) を指定します。 - "Origin Path" には必要に応じてパスを指定します。 - "Origin Protocol Policy" を "HTTP Only" または "HTTPS Only" に設定します。 - "Origin Custom Headers" には必要に応じてヘッダーを追加します。 3. **CloudFront ビヘイビアの設定**: CloudFront ビヘイビアを追加し、適切なルーティングおよびキャッシュ動作を設定します。 - "Behaviors" タブに移動し、"Create Behavior" をクリックします。 - "Path Pattern" には、コンテンツのパスパターンを指定します (例: `/*`)。 - "Origin or Origin Group" で先ほど作成した S3 オリジンを選択します。 - "Viewer Protocol Policy" を "Redirect HTTP to HTTPS" に設定します。 - "Allowed HTTP Methods" はデフォルトの設定のままにします。 - "Cached HTTP Methods" もデフォルトの設定のままにします。 これらの⼿順を実⾏すると、CloudFront が S3 バケットから⾮公開のコンテンツを配信するようになります。必要に応じて、S3 バケットのポリシー、 CloudFront オリジンの設定、およびビヘイビアの設定をカスタマイズしてください。

Slide 40

Slide 40 text

confidential TENDA CO., LTD. 40 実際にEC-CUBEを構築してみる CloudFront オリジンアクセスを Origin access control settings (recommended) にして、OAC作成→ポリシーコピーをして S3バケットのアクセス許可-バケットポリシーを編集

Slide 41

Slide 41 text

confidential TENDA CO., LTD. 41 実際にEC-CUBEを構築してみる CloudFront 振り分けできていることを確認。

Slide 42

Slide 42 text

confidential TENDA CO., LTD. 42 実際にEC-CUBEを構築して すべて完了

Slide 43

Slide 43 text

confidential TENDA CO., LTD. 43 まとめ 上記⼀連を対応して感じたことをまとめると以下となります。 • ChatGPTは要約上⼿ 普通に説明を求めたら詳しく回答をくれる。 要約を依頼した場合、主要なポイントを絞って提⽰してくれる。 • EC-CUBEについて詳しくない EC-CUBEという⽇本産アプリの質問への回答が強くなかった。 情報量が少ないから︖だろうか。 • ggrksのきっかけとしてのChatGPTは有能 要点を教えてくれるのでWEB検索する際のキーワード選択の補助になる。 • おまけ︓GPT4はより賢い ChatGPT-4は試さなかったが、MSのCopilotを使ったら EC-CUBE設定の細かい部分も⽐較的新鮮な情報で回答くれた。 GPTは要約/質疑応答/時には⽣成、あらゆる業務をサポートしてくれるツールです。 S◯ftbank某社⻑「まだChatGPTを使ってない⼈は⼈⽣を悔い改めた⽅がいい」 も間違いじゃない未来はすぐそこに来ているなーと感じます。

Slide 44

Slide 44 text

confidential TENDA CO., LTD. 44 ありがとうございました

Slide 45

Slide 45 text

confidential TENDA CO., LTD. 45 参考⽂献 • EC-CUBEをAmazon Linux 2023にインストールする https://qiita.com/rmatttu/items/6a33e3c437aef37b91dd • ELB(Elastic Load Balancing)を調べて使ってみた。 https://dev.classmethod.jp/articles/elb-explanation-try/ • [AWS/EC2] ELB、ALBの冗⻑化でHTTPSアクセスがHTTPになる現象を回避する⽅法 https://umebius.com/eccube/elb-alb-https-restrict-err_too_many_redirects/ • CloudFront経由でALBにHTTPS接続 https://zenn.dev/aidiot_dev/articles/20230706-distribute-from-cloudfront-to-alb

Slide 46

Slide 46 text

confidential 【注意事項】 l 本資料を無断で第三者に配布することを禁⽌します。 l Amazon Web Services、『Powered by Amazon Web Service』ロゴ、[その他AWS商標名]は、⽶国および/またはその他の諸国における、 Amazon.com, Inc. またはその関連会社の商標です。