4月も半ば、左からも散った後ににわかに気温もとても上がって、1日中お休みを心穏やかに過ごせた yuku_tasです。


日が高くなりつつあるこんな時期は 昼間にしっかり仕事 して、夜は 趣味や遊びに、アクティブに過ごしたい ものです。

季節が徐々に、しかし一方で劇的にも変わるこの頃、プログラマーの皆様はいかがお過ごしでしょうか。

概要

AWS AppRunnerを試してみた。その評価を主観的に行う。

手順が長くなりそうなので複数回に分けて解説したいと思います。

AWS AppRunner導入までの経緯

こちらの記事を読み、気になっていたAppRunnerの 導入を試してみました。

この辺りが導入を検討した契機でした。

導入手順

Dockerの用意

普段開発環境として利用している環境は、Docker Composeを使った構成なのですが、App Runnerでは 単体のDocker として動かす必要 があります。

そのため、ローカルで単体のDockerの動作確認をまず行う必要があります。本稿ではあくまで動作確認目的ということでPHPのブートストラップスクリプト(index.php)を設置するのみにとどめますが、Laravelなどのフレームワークも、Docker内のApacheのVirtualHost設定を当てることにより利用が可能です。

これは次回以降に解説をしてまいります。

なお、Laravelについては、弊ブログでたくさんの記事を書いてありますのでよろしければ、以下リンクからご参照くださいませ。

参考URL: Laravelの様々なバリデーションパターンをわかりやすい実例付きで解説 VaporにLaravelアプリをデプロイしてサーバーレス環境を作る LaravelとNextjsの両方で設定ファイルを兼用する 第1回YAML化 【開発環境】Laravel+Filamentでらくらく管理画面を構築する方法。

ファイル構成

今回はDockerfileは以下で構成します。

プロジェクトの構成は以下のようになります。

/sample-docker-app-runner
|
+-- Dockerfile
|
+-- src
   |
   +-- index.php

AWS ECR

Dockerのインストール

もしDockerのインストールがまだの方がいれば こちら からインストールしましょう。※ Mac向けのリンクとなります。

Dockerfileの記述

Dockerfileは以下のように記述しました。

Dockerfile
FROM php:8.3-apache

WORKDIR /var/www/html/

# srcをゲストマシンの/var/www/html/src以下に丸ごとコピー
COPY src src

# バーチャルホスト設定をそのままデフォルトのconfファイルに上書き
COPY ./apache/sample-docker-app-runner.conf /etc/apache2/sites-available/000-default.conf

# ※ 下記はテスト用のsqliteファイルとなるため、777で設定していますが、本番稼働する場合は絶対に755などに変更してください!
RUN cd src && php artisan key:generate
RUN chmod 777 /var/www/html/src/database/database.sqlite

# Apache mod_rewriteを有効化
RUN a2enmod rewrite

# apacheを再起動する
RUN service apache2 restart
phpファイルの記述

次に、ブートストラップファイル(サイトのアクセス時に叩かれるファイル)となる/src/index.phpを以下のように記述します。

src/index.php
<html>

<head>
  <title>疎通テスト</title>
</head>

<body>
  <span style="font-weight:bold;">成功しました。</span>
</body>

</html>

中身はご覧の通りhtmlファイルとなっています。(もちろん、PHPファイルを動かすことも可能です。)

Dockerの立ち上げ

以下のコマンドで立ち上げてみます

# 下記を実行すると、新しいDockerImageの立ち上げを許可することになります。
export DOCKER_CONTENT_TRUST=0

# ビルド(初回は時間がかかります。2回目からはキャッシュを利用)
docker build t sample-docker .

# 立ち上げ 8010番ポートを80番ポートに内部的に転送する(Docker側で設定を変える必要はなし)
docker run -d -p 8010:80 --name sample-docker sample-docker

# コンテナ内にアクセス
docker exec -it sample-docker bash
ar2.png

無事疎通まで行えました。

(すぐにしなくて良い) Dockerを止めたい時

Dockerを止めたい時は、以下のコマンドを実行するか、GUI(Dockerアプリ)から停止を実行します。

# 停止
docker stop sample-docker

# 作成したImageを削除(ビルドを最初からし直す時など)
docker rm sample-docker
ar1.png

まとめ

ということで、今回はローカル環境のhttp://localhost:8010/から疎通を行うところまで解説しました。

次回は、AWS ECRに今回作成したDocker Imageをプッシュするところまでを解説してまいります。

弊社ではこのような新しい技術を通じたWebサービスの開発・保守・運営を承っておりますので 御用の際にはぜひお申し付けくださいませ。

参考URL: モルドスプーン株式会社


この記事が何かのお役に立てれば幸いです。
最後までお読みいただきありがとうございました!