koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

Laravel を AWS App Runner で動かしてみる

App RunnerなどのHTTPリクエストをベースにしたコンテナランナーでLaravelのようなフルスタックのWebアプリケーションフレームワークを動作させる構成の例は意外に見つからない。

そもそもLaravelの公式には本番運用のノウハウはあまり提供されていない(Forge / Vapor が収益源だからか?)。

クラウドプロバイダの公式に提示されるのはあくまでHTTPリクエストを受け付ける部分だけなことが多く、実際にWebサービスを提供するための情報としては片手落ち感が強い。

サービス提供にあたってはHTTPリクエスト以外の要素も存在するからだ。

他の要素には他の実行環境を用意する? それでは平易にコンテナを動かせる利点が半減してしまう。ここしばらくApp RunnerでLaraveを動かす試行をしていたのでまとめておく。

現状は何となく動かす分には不足なさそうだった。

  • 試した結果のリポジトリ
  • Laravel の基本構成要素
  • Laravel をコンテナで動かす際の考え方
  • 今回の構成
    • スケジュールの重複実行
    • DB Migration のタイミング
  • App Runner の振る舞い
  • App Runner でHTTPのリクエスト以外を動かしても大丈夫か?
  • 追記: 不意の終了対応
続きを読む

AWS App Runner はおもちゃなのでそれ以上の用途には使ってはならない

おもちゃとして遊ぶにしても別のコンテナランナーにした方がよい。というのが現状の結論だ。

絶対にやめたほうがいい。

コンテナ運用したいがAWSしか使えないならECS Fargateを選ぶのが良いし、AWS縛りが無く平易にコンテナ運用したいならGoogle CloudのCloud Runや、Azureのまだプレビュー中だが大いに期待できるContainer Appsを使うのが良いだろう。

ここしばらくTwitterで文句を言いつつAWSApp Runnerを試していたのだけれど、こりゃどうにもダメだと思ったので記事にした感じ。

追記:この記事の半年後位に振り返り記事を書いた

koudenpa.hatenablog.com

追記:その翌年、振り返りというか決別記事を書いた

koudenpa.hatenablog.com

  • おもちゃ
  • App Runnerに何が足らないのか?
  • AWSは高レイヤに弱い
  • 注力されていない
  • 競合サービス
  • ネガティブフィードバック
  • 追記: やっぱ自動デプロイに金取られるの納得いかねー
  • 追記: 一時停止中は何もできないぞ気をつけろ
  • 追記: WebSocketはサポートされていないぞ気を付けろ
  • 追記: それでも使ってなんだか変な動きをしたら? サービス自体を再作成
  • 追記: 手前にCDNを挟むときはHostヘッダを転送しない
続きを読む

phpMyAdminのDockerイメージにBASIC認証を追加する

人は何故BASIC認証を求めてしまうのだろうか? やはり安心のためだろう。

BASIC認証は兎に角お手軽だ。ユーザー名とパスワードの組さえ設定すればそれだけで認証できてしまう。

令和の時代になってもこれ程簡単に設定できる認証はそうそうない。

何となく未認証でインターネットに晒したくないサイトにBASIC認証を設定してしまいたい場面はある。

例えばphpMyAdminだ。

コンテナの普及著しい令和の時代ではオフィシャルなDockerイメージをデプロイすることでphpMyAdminを立てられてしまう。便利だ。

github.com

これにBASICを設定しておきたい。

そう思ってしまったので設定出来るようにした。

github.com

https://github.com/7474/phpmyadmin-with-basic-auth/blob/v5.1.3/Dockerfile

FROM phpmyadmin/phpmyadmin:5.1.3

# BASIC認証を構成した設定ファイルをコピーして有効にしておく
COPY basic-auth.conf /etc/apache2/conf-available
RUN a2enconf basic-auth

# 環境変数から .htpasswd ファイルを作成してたら起動するエントリースクリプトを配置しておく
COPY docker-entrypoint-with-basic-auth.sh /docker-entrypoint-with-basic-auth.sh

ENTRYPOINT ["/docker-entrypoint-with-basic-auth.sh"]
CMD ["apache2-foreground"]

phpMyAdminの公開ディレクトリは /var/www/html なのでそこに認証を必要とするように設定する。

<Directory "/var/www/html">
  AuthType Basic
  AuthName "auth"
  AuthUserFile /etc/apache2/.htpasswd
  Require valid-user
</Directory>

後はパスワードファイルを起動時に作って終わり。

#!/bin/bash

htpasswd -cb /etc/apache2/.htpasswd "$BACIC_AUTH_USER" "$BACIC_AUTH_PASSWORD"

/docker-entrypoint.sh "$@"

実際にこのイメージを使うかどうかは分からないが、供養の意味も込めて記事を書いた次第である。

世のBASIC認証したい人に届けば幸いだ。

Apache2で動作するようになっているコンテナイメージなら同じ要領でBASIC認証を追加できるだろう。

Nginxにしたって似たようなものだと思う。

コンテナの前で認証しろ?

AWS App Runner*1は強制的にパブリックなエンドポイントが生えるのでそう言うのやりづらいんだよね。

そうでないにしてもコンテナの環境変数設定するだけは楽っしょ!

BASIC認証で安心を得たい程度にはちょうど良い塩梅なのではなかろうか。

そんな感じ。


余談

App RunnerはECRとECR Publicしか参照できないので、今回はECR Publicにイメージを公開してみた。

BASIC認証をイメージに追加するのにかかった時間を1とするなら、ECR Publicにイメージ公開するのにかかった時間は10位あったように思う。

ECRとECR Publicが全然別の存在だって知らなくて、ECR向けにIAMを作っていたり不馴れでやたら時間を取られてしまった。

ECRへのログインは出来ているのに、ECR Publicへのアクセスが401になる状態、しばらく意味が分からなかった。

やはりIAMは難しい。


とかなんとかやっていたら、AzureのApp Runner相当サービスであるContainer AppsがEasy Authに対応していた。

これは文字通り簡単便利に認証を追加できる機能で、App Serviceが好きな理由の一つでもある。

App Runnerは爪の垢を煎じて飲んで欲しい、お前はCognitoと連携できるのか? そういうところだぞ。

*1:koudenpaは最近App Runnerで遊んでいる

嫉妬

他人がいい仕事をしていると嫉妬してしまう。 俺がやりたかった、俺にはできないことやりやがって。

妬ましい。

直近でも周囲で「いい感じに使っている言語のバージョンアップを完遂」したり、「段階的にアプリケーションの実装を切り替える手法の実現性が評価」されたりしていて畜生という気分である。

どれもこれも「俺がやりたかった」し「俺にはあんなにいい感じにはできない」ことだった。

あー妬ましい。

まぁ、嫉妬できるってことはそのくらい自分もやりたいってことなので、出来るようになったり、やっていったりしたいですね。

40の手習いである。


ところで、突撃!パッパラ隊という漫画をご存じだろうか?

嫉妬について語るなら履修必須なマンガである。

www.amazon.co.jp

1,2巻はKindle Unlimited対象なようなのでみんなで読もう。嫉妬について出てくるのはもうちょい先だった気もするので、気に入ったらその後の巻も読もう。

炎の中の希望

お疲れポップ。これは感情のたれ流し記事です。

東映アニメーション不正アクセスを受けてTVアニメシリーズが中断してから一月以上、あまりにもやきもきする時間だった。ダイの大冒険はまたもや道半ばで途切れてしまうのか?

続きを読む

.NET で Twitter Bot につぶやかせるにあたっての備忘

Twitter APIは迷走していて、v2がリリースされた後もv1.1にしかない機能がまだまだあったり、とりあえずプログラムにつぶやかせるのがまぁまぁ面倒臭かったり、とても難しい。

ので、少し最近触った結果の整理をまとめておく。

  • 登場人物
  • Bot につぶやかせる場合の認証
  • Tweetinvi + 未実装のAPI v2
  • がんばれイーロン
続きを読む

Hatena Engineer Seminar #19 カクヨム編

で喋ってきた。

これ。

hatena.connpass.com

カクヨムはここしばらく仕事で関わっているサービスで、正式なサービス開始から6年目に入っている。控えめに言って絶好調で、まだまだ終了はしそうにない。つまり開発も運用も続けることになる。

システム開発を始めてから5年もすれば相応に技術的負債も溜まってくる。このセミナーではそうした状況にどう対応して行こうとしているのか? の概観と直近1年の実践を率直に発信できたのではないかと思う。

技術的負債はエンジニア界隈では人気のある言葉なので、対応事例はいくらあってもよいと思う。一つの参考としてみてもらえるのではないだろうか。

続きを読む