mattintosh note

どこかのエンジニアモドキの備忘録

AWS

AWS LambdaでシンプルなPHP実行環境を作る

AWS SDK であれこれしたいだけで別に Symfony や Laravel 等のフレームワークを動かしたいわけじゃなく、JavaScript とか Python に馴染みが無いから PHP でやりたいっていう程度っていう相談が来たとか来てないとか。https://github.com/aws-samples/php-ex…

Amazon Linux 2023 PHP 8.1でsodiumを使えるようにする

Amazon Linux 2023(AL2023)では何故か PHP 8.1 に sodium パッケージが用意されていない。AL2023 の PHP 8.2 や Amazon Linux 2(AL2)の PHP 8.1 には存在する。 調べてみると 2022 年 10 月には issue が立ってるのに We are evaluating inclusion of th…

Amazon Linux 2023にlsyncdをインストールする

そろそろ Amazon Linux 2023(以下 AL2023)への移行を…と思ってたんだけど AL2023 では EPEL が無くなってしまっているのでパッケージマネージャで lsyncd がインストールできない。仕方ないのでソースコードからインストールすることにした。 NAME="Amazon…

CloudFront Functionsでクエリ付きリクエストのリダイレクト

前に「こういうの作って」って言われて作ってメモってたんだけど何やってるかわからなくなったので整理。 CloudFront Functions で単純にリダイレクトする場合は ${event.request.uri} を引き継げば良い。 function handler (event) { var host = 'example.c…

Amazon LinuxのPHP 8.xでElastiCache Cluster Clientを使えるようにする

PHP が 7.4 くらいまでだった頃は ElastiCache Cluster Client は各 PHP のバージョンに対して x86 と ARM それぞれ一種類ずつだった気がするんだけど PHP 8.x 以降ぐらいからだろうか、OpenSSL 1.1 版と 3.0 版に分かれるようになった。 AWS ElastiCache 今…

AWS RDSにmysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for userが出て接続できなくなった

mysqldump のバージョンを上げたせいか AWS RDS で運用してるデータベースのダンプを取ろうとすると下記のメッセージが出てダンプが取れなくなった。尚、mysql コマンドでは接続できる。 mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access…

AWS LambdaでRDSの自動起動と自動停止

忘れるので自分用メモ。 EventBridge Scheduler でも出来るだろうけど今回は従来からある Lambda を使って DB インスタンスを指定して自動起動・停止を行う方法。 ※「これをコピペすれば出来ます」的なことは書いてないです IAM の作成 素直に起動と停止の関…

AWS EventBridge SchedulerでEC2インスタンスの定時起動・停止を設定する

久し振りに EventBridge でルールを作ろうと思ったらスケジュールを選択すると "EventBridge Scheduler - A new AWS scheduling capability!" となっていて EventBridge Scheduler というものが追加された模様。なお、左下の[Create to new rule]ボタンか…

CloudFront Functionsで遊ぶ

旧サイトから新サイトにリダイレクトする index.html なしでドキュメントを表示して URL の正規化もする IP 制限をかける Basic 認証をかける オリジンの 403 Forbidden を 404 Not Found に書き換える 旧サイトから新サイトにリダイレクトする EC2 が稼働し…

AWS Transfer Family のメモ

用事があって久しぶりに AWS Transfer Family を構築する用事があったんだけど大分昔に作ったので作り方をすっかり忘れた。 今回の要件としては外部から FTP/SFTP で EFS にデータを置くっていうものだった。 Transfer Family に EFS への書き込みを許可を与…

AWS Image Builder コンポーネントのコンテンツに設定ファイルをそのまま書いたら文字数オーバーした

ファイルの置き場に S3 が使えないので Nginx などの設定ファイルをヒアドキュメントで配置してゴールデンイメージを作ることになったんだけど色々なファイルを配置していたらエラーになった。コンポーネントのコンテンツは 16,000 文字の制限があるらしい。…

Amazon Linux 2 の Extra Library PHP 7.4 に imagick をインストールする

amazon-linux-extras でインストールした PHP 7.4 で WordPress 用に imagick をインストールしようとしたら無かったのでいまのところパッケージマネージャからはインストールできないっぽい。 bash-4.2# amazon-linux-extras install -y php7.4 bash-4.2# y…

monitでlsyncdをモニタリングしたいけどpidfileが作成されない

Amazon Linux 2 で monit で何らかのプロセスを監視させるとき、そのプロセスの PID ファイルを指定する(PID ファイルじゃなくても出来るのだが)。 Amazon Linux 1(以下 amzn1)では lsyncd 使ってるときに /var/run/lsyncd.pid が作成されてた気がするん…

ElastiCacheでMemcachedを使うときのクライアントのインストール

PHP アプリケーションから ElastiCache Memcached を使用する場合、AWS が提供している ElastiCache Cluster Client をインストールする必要がある。(普通の php-pecl-memcached を入れるとマルチ AZ な Memcached に対応してなさそう) Amazon Linux 2 & P…

CloudFrontのGeo Restrictionで削減出来そうなコストを計算してみる

依頼で色々なプロジェクトの AWS 環境を見ているんですが、よく言われるのが「データ転送料金が高い」です。 EC サイトの場合、この原因の多くはクライアントがアップロードしている商品画像のサイズが大きかったり枚数が多かったりと、アクセス数が増えれば…

リモートでsudoしてrsyncしたい

EC2 インスタンス上のデータをバックアップするのに root しか読み取り権限がないファイルやディレクトリをどうコピーするか、という問題にあたった。Amazon Linux では root のログインを禁止しているため何らかの方法でユーザをスイッチしなくてはならない…

ApacheでELB-HealthCheckerのログ振り分けについて考える

User-Agent による振り分けの問題点 ベストプラクティスを考える Location ディレクティブを使う SetEnvIf で複数条件を組み合わせて AND 条件を作る IF ディレクティブを使う ALB で UA 偽装を弾いてみる User-Agent による振り分けの問題点 AWS で Applica…

孤独の AWS Cloud9 ハンズオン 〜Cloud9 は SSH 踏み台として使えるのか〜

先日、Amazon 本社で AWS スタートアップの説明を聞く機会があった。そこで「最近では踏み台に Cloud9 を使っている方も」という話を聞いたので「本当に踏み台として使えるのか」「Terraform との相性はどうなのか」というのを確認してみた。なお、Cloud9 に…

AWS Elasticache で作成した Redis に外部から接続したい

Heroku Redis を使っている方から「Redis だけ AWS を利用出来ないか?」というご相談をいただいたので検証してみた。 本記事は接続検証を目的としたものです。本記事に起因して発生したいかなるトラブルや損害等について当方は一切責任を負いません。 事前…

Amazon Elasticsearch Service 6.x 用に curator をインストールする

容量削減のためインデックス自動削除に curator を導入することにした。 Amazon Elasticsearch Service のバージョンは「6.2.3」。EC2 インスタンスの AMI は「Ubuntu Server 18.04 LTS (HVM), SSD Volume Type - ami-07ad4b1c3af1ea214」。 $ curl -sq 'htt…