投稿

php_modが非推奨になったのね

昔のバージョンのphp環境でphpバージョンを上げるという対応中。 apache + PHP8のインスタンスを構築してドキュメントルートまで到達を確認。 対応する人にドキュメントルートまで到達するからプロジェクトのファイルを置いてバージョンアップのエラーを確認してもらうため依頼しましたが HTTP 503 Service Unavailable のエラーが出ているとのこと。 HTMLファイルはアクセスできているからPHPの実行ができていないと思い調べると Apache HTTP サーバーで使用するために PHP に提供されている mod_php モジュールが非推奨になりました。 php-fpmをインストールして起動し、リクエストを流してphp-fmpでphpを実行するようにして解決。 しばらくPHPを触っていなかったのでモジュールが非推奨になったことに気づかずでした。

tmuxをはじめて使う

イメージ
初めてtmuxを使ってみた最低限の利用 以前から使いたかったtmux 最近はリリースなどは自動化(シニアエンジニアの私はSCPアップロードから知っている。。)だったり、コンテナ化やログディレクトリのマウントや同期など直接ログインしなくてもいい環境だったりするが、私の作業環境ではログインすることが多々あります。 そんな中でそこそこ台数があるサービスなんかで、confファイルを編集なんてたまーにあったりしますが、同じ作業をすることになるので同時にコマンドを打ちたかったりします。SSHクライアントでもできるものがあるようですが、OSに依存せず利用したいのでtmuxを利用することにしました。 インストール $ brew install tmux tmuxを起動 $ tmux prefixはデフォルトの ctrl + b ペイン分割(左右) prefix % ペイン分割(上下) prefix " ペインの移動 prefix o ペインの破棄 prefix x そして一番やりたかった、ウィンドウで開いているペインに対してコマンドの同時実行 開始 prefix :set-window-option synchronize-panes on 終了 prefix :set-window-option synchronize-panes off ウィンドウの終了 prefix &

AWS EFSのインスタンス起動時の自動マウント

AWS EFSのインスタンス起動時に自動マウント 前回の続きです。 前回はs3fsを利用していたら勝手にマウントが解除され、イメージが表示されなくなっていたというトラブルを受けて、EFSに切り替えるところまでやりました。 前回 AWS EFSに切り替える しかしこれだと何かのトラブルでインスタンスを再起動した場合に、作業者以外ができない、コマンドを知らないなどで2次災害が起こらないとも言えません。 ですので、基本的にインスタンスをコピーをしたりしてもマウントされているように自動でマウントをするようにしたいわけです。 そもそもですが、ディレクトリをNFSへマウントしなくてもいいじゃん? って思うかもしれません。 なぜやるか?というところでいうと 複数台あるサーバーで同じものを参照させたいからというところが大きい理由です。 手法としていはいろいろあって 共有できるサーバーを用意して全てのアプリケーションサーバーはそこに保存・参照 s3に保存し、SDKなどを使いプログラムから参照 s3に保存して、パブリックURLで参照 どっかのサーバに保存する際、全てのサーバに配信 などなど。 ちなみに全てやったことあります。4は現在の世の中ではありえない気がしていますが。。。 化石の知識😅 よくイメージサーバー作ってなんてことしてたっけ昔。。 そんなサーバーの構築しないで、マウントすればプログラムで意識しなくても保存や、同じファイル参照できるよってのがディレクトリをマウントするメリットかなって思います。 ということで話は長くなりましたが、インスタンス起動時に自動でマウントするやり方はとっても簡単でした。 sudo vim /etc/fstab 追記>> fs-*******:/nfs_dir /mount_dir efs defaults,_netdev 0 0 これを記載すればインスタンスを再起動してもマウントされています。 同じ環境でオートスケールするなんて時も記載しておかないと、マウントされていないと思うので、これで負荷がかかった時の準備もできたかな。 次回はEFSのオプションについてメモっときます。

AWS EFSに切り替える

イメージ
s3fsからEFSに切り替えを行いました 先日、s3fsが意図せずにマウントが外れており、短期的にマウントが外れていないかチェックをして、外れている場合は再度マウントする定期実行処理を作りました。 AWSのS3バケットをマウントするs3fsでマウントが外れた件 というところで、長期的な対応はどうするかなと思って調べていたら、『無理してs3fsとか使わなくてもEFSってAWSのサービスがあるからそっち使えば?』みたいな記事を発見しました。 なんと。。。 ということでこれが使えるか調査。 普通にマウントできますね。 しかも同じVPCからのアクセスに絞れたりするので安心な面も デメリットとしては、s3より料金が高いことのようです。 2020/02/07時点 アジアパシフィック東京 標準ストレージクラス   0.36USD/GB 月額 低頻度アクセスストレージ 0.072USD/GB 月額 低頻度アクセスリクエスト  0.012USD 転送GB プロビジョニングスループット 7.2USD MB/秒 月額 アクセス数と容量を加味した料金比較(ミニマム版) S3は 最初の50TB 0.025USD/GB 月額 ファイル転送を考慮せずあくまでアクセスに絞るとGETのみとし GET・SELECT、他の全てのリクエスト 1000リクエストあたり 0.00037USD インターネット転送が 9.999TB以内程度と想定して 0.114USD/GB 月額 が計算するに、ストレージ料金は確かにS3の方が格段に安いですが、リクエスト数と転送量を加味するとEFSの方が安いのでは?っと思ってしまいました。 多分、参考にしたサイトがストレージ料金でしたみていなかったのかもしれませんし、私の扱っているシステムが要領の観点で少ないからだと思います。 それぞれの用途により金額は変わるのでシミュレーションをしてどちらをどのように使うかを決めればいいと思います。 EFSを作成していきます。 新規作成 まずはEFSのメニューから【ファイルシステムの作成】を選択します。 ネットワークアクセスを設定 次にネットワークアクセスを設定します。特に新規でお試しなどであ...

PHPプロジェクト構築する時にいつもcomposerのインストールではまる件

PHPのcomposerをインストールする際に参考にするもの だいたいインストールする時にGoogleさんで検索します 例えばこんな感じで php composer インストール しかしヒットするのはおおよそブログ記事だったりします。 でもその通りにやってもだいたいすんなりとインストールすることができなかったりする場合があります。 原因は php -r "if (hash_file('sha384', 'composer-setup.php') === '*********') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" *の部分が記事の記載当時そのままの場合があるのです。 こういったものは個人の備忘録だったりするので、こうやったらできるんだとコピペしていくとなんで?っとなります。 しかし、よくみるとIF文のelseに処理が入っていて、 echo 'Installer corrupt'; が出力され composer-setup.phpがなくなっています。 *の比較はなんなんだ!! って結局なるので 素直に最初から公式サイトを見てしまえばいいんだってことを言いたいだけです😆 composer公式 インストール方法を解説とかいうブログより真先にここをみるべし!! 普通にわかりやすいし確実です!!

AWSのS3バケットをマウントするs3fsでマウントが外れた件

s3fsでマウントが外れた件のお話し ネットで検索すると予期せずマウントが外れたなんて記事を見かけてて そんなことあるの〜?? うちは大丈夫でしょ! なんて鷹を括っていましたが なんと起きてしまいました。。。 しかも本番で… まぁ起きてしまったことはしょうがない。。 一応発生した時に再マウントしようとするとエラーがでますのでそれも参考に備忘録しておきます。 発生 A:すいません今大丈夫ですか?? 私:ええよ〜 A:なんか画像が表示されないんです。 私:大丈夫ですか言っとる場合やないやん!! ということで事象の認知がされました。しかも本番です。 インスタンスにログインして確認するとこんな感じです。 ※うちは大量のユーザーごとに登録するイメージファイルをイメージディレクトリとS3バケットをマウントすることでEC2のイメージボリュームを抑えるようにしていました。 # cd /image_dir # ls -a # イメージが入ってなぁーい!! AWSのコンソールからS3のバケットを見るとイメージはある ということでマウントされているかの確認 # df -h df: `/image_dir': 通信端点が接続されていません 通信端点が接続されてないってどういうこと? と思いながらマウントを試みる # s3fs bucket-name /image_dir -o allow_other,use_cache=/tmp,uid=48,gid=48,passwd_file=/etc/passwd-s3fs s3fs: unable to access MOUNTPOINT /image_dir: Transport endpoint is not connected ※uid,gidはアパッチ操作なのでそのIDです。 エンドポイントと接続できないと。。。 なんだかこれが出る理由はいろいろあるらしいのですが、意図せずマウントが外れているがNFSではマウントしている情報が残ったりのようなことだったりいろいろ。。。 今まで見てきた記事によるとマウントできない場合は 一度アンマウントしてからマウントすれば成功するよ!! ってことなので、一度アンマウントし...

S3マウントできない事象(s3fs)

s3fsでマウントできない事象が発生 前提として今回は、新規ディレクトリに作成したバケットをマウントしようとした際に出た事象の記事です。 とある作業をしていたメンバーからいつものコマンドでS3のバケットとマウントできないんですと問い合わせがありました。 マウントを実行するシェルコマンドはエラーもなく実行されているんですが # sudo ./mount.sh user Password 4 sudo: #  てな感じで終了しています。 手順通りだとマウントされているかの確認のため # df -h  s3fs             256T     0  256T    0% /var/www/html/webroot/img みたいに確認するのでですがその際に以下のエラーが出ました。 df: `/var/www/html/html/webroot/img': 通信端点が接続されていません 特に検索しても同様の事象はumountしてマウントしなおせばできるよって記事はありましたが今回は新規なので該当しません。 私も初めての事象でしたが、以前に何かのきっかけでこちらの記事をみていたのでもしかしてと思いました。 s3fs の利用者はいますぐバージョンを確認しないと使えなくなるかも?! 利用していたバージョンは(1.78)でした。 そこでバージョンを上げてみようと思い対応。 以前は、ソースからmake && make install をしていたんですが、yumリポジトリから普通に取れるじゃんって思い普通に # sudo yum install s3fs-fuse でインストール これでmount.shを実行したらうまくいきました。 うまくいっていないところからこれだけ対応してマウントできるようになったので原因はこれかと思います。 今回は新規の場合にマウントできませんでしたがすでにマウントしてあるディレクトリができなくなったという記事がほとんどでしたのでこちらもしかするともう一度マウントしなおさないといけないかもしれません。 こわ...

nginxでaccess.logにアクセスユーザーの識別子を出す

nginxでaccess.logにアクセスユーザーの識別子を出すように設定 環境について OS:debien ※これは設定ファイルの場所の違い等があるかもしれないがそれ以外はどれでも同じ nginx: 1.17.6 言語: Go 1.11.2 基本的にはこちらを参考にしています。 nginxのアクセスログにユーザーIDを記録する方法 結構以前のものですがそのまま使えてます。助かりました。 まずはnginxの設定から vim /etc/nginx/nginx.conf こちらのログフォーマットを追加 > log_format sample-log '$remote_addr - $remote_user [$time_local] "$request" ' > '$status $body_bytes_sent "$http_referer" ' > '"$http_user_agent" "$http_x_forwarded_for" ' > '$upstream_http_x_user_id'; #該当アクセスログの出力設定に追加したログフォーマットを指定する > access_log /var/log/nginx/access.log sample-log; こちらを追加して、実行しているプログラムなりからHeader情報X-user-Idを追加することになります。 今回はGo言語だったので、IDが取れるのは各認証が必要なAPIは 認証関数が実行され、そこでIDが取得されるのでこちらに以下を記載 w.Header().Set("X-User-ID", fmt.Sprintf("%d", Id))/code> w関数の引数で受け取っている w http.ResponseWriter これで nginx -s reload でアクセスログの最後にアクセスユーザーI...