前回はcopilot-cliのアップデートで少しserviceのデプロイまでが変わっていたので記事にしました。
今回ですが、より実際に使うであろう構造に近いものを試してみます。
WEBサービスの場合におおよそですが、HTTPクライアントが要求を受け取り、バックエンドが処理してHTTPクライアントがレスポンスをするという構成が私の経験してきているところなのでこれを試してみます。
今回はローカルであらかじめコンテナを立ち上げて、さらにコンテナ間通信まで確認したものでcopilotでのデプロイとHTTPでのアクセスを確認するまでを目標とします。
まずはLaravel(composerで特に指定していなくインストールされたもの Laravel Framework 9.21.6)をインストールして、php artisan serveで開発サーバーをポート8000で立ち上げてたコンテナに、nginxのコンテナがユーザーからの要求を80番ポートで受け取りLaravelのコンテナに8000番に流してLaravelの初期画面を表示されるまでを確認しました。
続いてそれをAWSのcopilotでデプロイできるようにしたいと思います。
サイドカーで実行して80番ポートでリクエストを受け取り8000番で起動しているLaravelに流すというものを作成したいと思います。
ちなみにDockerfileはこんなものを用意しました。
php8/laravel
FROM arm64v8/php:latest
RUN cd /usr/local/src \
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
&& php composer-setup.php \
&& php -r "unlink('composer-setup.php');"
RUN cd /usr/local/bin && ln -s /usr/local/src/composer.phar composer
RUN apt update && apt-get install -y unzip
RUN cd /usr/local/src && composer create-project laravel/laravel laravel
#RUN cd /usr/local/src/laravel && php artisan serve --host=0.0.0.0 --port=8000
EXPOSE 8000
WORKDIR /usr/local/src/laravel
CMD ["php","artisan","serve","--host","0.0.0.0"]
nginxはconfを用意してLaravelのサービスに流せるようにします。
default.conf
upstream laravel {
server localhost:8000;
}
server {
listen 80;
location / {
proxy_pass http://laravel;
}
}
nginxのコンテナを作成するDockerfileはこんな感じで作成しています。
FROM nginx:1.23
ADD default.conf /etc/nginx/conf.d/default.conf
こちらでローカルでのコンテナ間通信が確認できましたのでcopilotでデプロイまでしていきたいと思います。(ローカルのnginxコンテナからlocalhostでは名前解決できないのでそこはIPで確認しています。)
copilot app initをまずは実行してアプリケーションを作成すると、copilotディレクトリができて.workspaceが作成することを確認しました。
次にcopilot env initを実行します。
環境名はtestで環境を作成して試行的なものなのでdefaultのVPCを作成しました。
copilot-cliのアップデート後に新たなセクションが追加されていて
observabilityという項目があります。
cloudwatchコンテナーインサイトを有効にするかどうかというものなので今回は有効にしなくていいという判断をしました。
observability:
container_insights: false
こちらでcopilot env deployを実行します。
ECSクラスターが作成され、VPCなどのネットワーク設定がされた環境が出来上がりました。
次にcopilot svc initを実行しました。
Load Balanced Web Serviceを選択し、サービス名を設定しDockerfileを指定して作成を選びます。
Dockerfileのパスはcopilotディレクトリからのパスを指定します。
サービスのmanifestが作成されました。
まずこれでサービスをデプロイしてみましょう。
copilot svc deploy
test環境しかないので特に指定しなくてもtest環境へデプロイしてくれます。
実行でプライベートネットワークの名前解決やロードバランサーなどを作成してくれます。
ただ結果的に実行してもうまく起動しませんでした。
原因を探っていきたいと思います。
コメント
コメントを投稿