コンテンツにスキップ

2021

Amazon Lambda Layer の作成

まず、Amazon Lambda Layer とは下記のものです。

一言で言えば、複数のLambda関数でライブラリを共有できる仕組みです。

Lambda の Python は標準である程度ライブラリが利用できるようになってますが、 pandas や numpy 、 requests など利用できないライブラリもあります。 「ライブラリを追加したい + 複数のLambdaで共有したい」ときに Amazon Lambda Layer を活用すると便利になります。 また、既存のライブラリ以外にも独自で作成したライブラリもLayer化すれば共有できるのでいい感じです。

手順

  1. ライブラリを ZIP にまとめる
  2. AWS Lambda から レイヤーの作成を行う
  3. Lambda関数からレイヤーを選択する

以下、 requests を例に説明します。

1. ライブラリを ZIP にまとめる

ターミナル等から任意のディレクトリで以下を実行する。

mkdir python
pip install -t python requests
zip -r9 layer.zip python
2. AWS Lambda から レイヤーの作成を行う
  1. AWS Lambdaのコンソールから 2. その他リリース > レイヤー を選択する。
  2. 画面右上の レイヤーの作成 ボタンからレイヤーの作成を行う。
  3. 各項目を適当に入力して、さっき作成したZIPファイルをアップロードし、作成ボタンを押す。これでレイヤーの作成は完了です。
3. Lambda関数からレイヤーを選択する
  1. requests を使いたいLambda関数を開き、関数の概要 のところにある Layers を選択する。
  2. レイヤーの追加 ボタンからさっき作成したレイヤーを選択する。
  3. import requests を定義すれば、利用できます。

参考

Firefoxからタブを非表示にする

Firefox でタブを縦で使うために Tree Style Tab - ツリー型タブ をインストールしています。 ただ、これを使うとタブが2箇所に表示されてて既存のタブが邪魔なので、userChrome.cssを使って非表示にしたので、備忘録として残しておきます。

Firefox before

userChrome.css の作成場所

アドレスバーにabout:supportを入力してトラブルシューティング情報にアクセスする。 アプリケーション基本情報に プロファイルフォルダー とあるので、finder や explorer で開きます。

トラブルシューティング

プロファイルフォルダー を開いたら、 chrome フォルダを作成します。 userChrome.css の作成場所になります。

finder

コード

@charset "UTF-8";
/* chrome://browser/content/browser.xhtml */

/* タブの非表示 */
#titlebar {
  display: none;
}

/* サイドバーの微調整 */
#tabbrowser-tabs {
  visibility: collapse !important;
}

#sidebar {
  min-width: 65px !important;
}

結果

保存したら、Firefox を再起動して確認します。ブラウザ上部のタブが消えてるはずです。

Firefox after

追記 2022-01-19

userChrome.css が効かない場合がある。 about:config を開いて、 toolkit.legacyUserProfileCustomizations.stylesheets を入力。 値を true に変更しておこう。

サブブランドやMVNOの通信料金比較

プライベートでサブブランドや MVNO の通信料金を調べる機会があったのでまとめました。

2021 年 10 月末時点での通信料金比較です。 5 社をピックアップして比較しました。

今回の比較は月々にかかる料金と通信の品質をメインに調べています。

基本料金

音声通話 + データ通信の料金の一覧です。(税抜)

基本データ容量 ahamo UQ mobile ワイモバイル OCN モバイル ONE BIGLOBE モバイル
1GB - - - 700 円 980 円
3GB - 1480 円 1980 円 900 円 1200 円
6GB - - - 1200 円 1700 円
10GB - - - 1600 円 -
10GB - - - - 3400 円
15GB - 2480 円 2980 円 - -
20GB 2700 円 - - - 5200 円
25GB - 3480 円 3780 円 - -
30GB - - - - 7450 円

その他比較

項目 ahamo UQ mobile ワイモバイル OCN モバイル ONE BIGLOBE モバイル
回線 ドコモ au ソフトバンク ドコモ ドコモ / au (選択可能)
5G × ×
通話料金 22 円/30 秒 22 円/30 秒 22 円/30 秒 10 円/30 秒 1 10 円/30 秒 1
無料通話分 1 回につき 5 分間まで無料 なし なし なし なし
家族割 なし あり 2 あり あり 3 あり
割引料金 - 全回線が対象
3GB: 900 円/月
15GB: 1900 円/月
25GB: 2700 円/月
2 回線目以降が対象
3GB: 900 円/月
15GB: 1900 円/月
25GB: 2700 円/月
2 回線目以降が対象
200 円割引
2 回線目以降が対象
200 円割引

通信速度の比較

ahamo ≧ ワイモバイル ≧ UQ mobile > OCN モバイル ONE > BIGLOBE モバイル

ahamo、ワイモバイル、UQ mobile の通信品質は安定しているので、いつでも速くて快適に使えます。 OCN モバイル ONE、BIGLOBE モバイルは、平日の昼辺りで通信速度が低下しますが、インターネットを普通に利用できる程度の通信速度は出るので、あまり気にするほどでもなさそうです。

まとめ

  • データ通信の安定を選ぶなら、ahamo・UQ mobile・ワイモバイル
  • 電話を書けることが多いなら、ahamo
  • 安さを求めるなら、OCN モバイル ONE

  1. 専用アプリから電話をかけると 10 円/30 秒で通話可能です。専用以外のアプリからの通話料金は 22 円/30 秒になります。 

  2. でんきコース または インターネットコース のどちらかに加入した場合に適用されます。詳細はこちらから。 

  3. OCN 光モバイル割 に加入した場合に適用されます。詳細はこちらから。 

Amazon API Gatewayでバイナリデータを返す

API Gateway を使ってバイナリデータを返却する場合、設定が必要だったのでメモしとく。

困ってること

画像が表示されない。

細かいこと書くのがめんどうなので図にしました。

occurrence.png

やったこと

API Gatewayの設定でバイナリメディアタイプに text/html を設定

Lambdaプロキシ統合を使用して、バイナリデータを処理するAPI Gateway APIを設定するにはどうすればよいですか? によると、ブラウザから送信してるAcceptヘッダーのデフォルトが text/html らしいので、バイナリメディアタイプとして追加する必要があるらしい。

注: ウェブブラウザは複数の値を含む Accept ヘッダーを自動的に送信します。デフォルトでは、最初の値は常に html/text です。API Gateway は最初の値のみを参照するので、text/html をバイナリメディアタイプとして API に追加する必要があります。そうでないと、次のエラーメッセージが表示されます

Linuxでユニットファイルを作って自動起動させる

PHPのビルトインサーバとNode.js Express アプリケーション用のビルトインサーバのユニットファイルを作成して自動起動できるようにしました。 凝ったことをしないのであれば、service ファイルを作成するだけでOKなので簡単です。

実行させるコマンドは以下です。

  • PHP
  • php -S 0.0.0.0:8000 public/index.php -t public
  • Node.js
  • node ./bin/www

service ファイルに書くときは、 php コマンドや node コマンドをフルパスで書くと確実に動くので、パスを確認しておきます。

$ which php
/usr/bin/php
$ which node
~/.nvm/versions/node/v16.11.1/bin/node

確認したら、service ファイルを作ります。ファイル名はなんでもOKです。ここではphp.servicenodejs.serviceとします。

  • /etc/systemd/system/php.service
[Unit]
Description = serve php

[Service]
ExecStart = /usr/bin/php -S 0.0.0.0:8000 public/index.php -t public
Restart = always
Type = simple
WorkingDirectory = /home/ec2-user/php-app
User = ec2-user
Group = ec2-user

[Install]
WantedBy = multi-user.target
  • /etc/systemd/system/nodejs.service
[Unit]
Description = serve nodejs

[Service]
ExecStart = /home/ec2-user/.nvm/versions/node/v16.11.1/bin/node ./bin/www
Restart = always
Type = simple
WorkingDirectory = /home/ec2-user/nodejs-app
User = ec2-user
Group = ec2-user

[Install]
WantedBy = multi-user.target

WorkingDirectory にアプリケーションのルートディレクトリを指定して ExecStart にコマンドを指定します。他の項目については説明できないので各々で調べてください。

それでは、ビルトインサーバを起動しましょう

$ sudo systemctl start php
$ sudo systemctl start nodejs

開始したら状態を確認します。以下のようになっていればOKです。

$ sudo systemctl status php
● php.service - serve php
   Loaded: loaded (/etc/systemd/system/php.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-10-14 01:30:20 UTC; 1h 8min ago
 Main PID: 10612 (php)
   CGroup: /system.slice/php.service
           └─10612 /usr/bin/php -S 0.0.0.0:8000 public/index.php -t public

$ sudo systemctl status nodejs
● nodejs.service - serve nodejs
   Loaded: loaded (/etc/systemd/system/nodejs.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-10-14 02:16:43 UTC; 23min ago
 Main PID: 8875 (node)
   CGroup: /system.slice/nodejs.service
           └─8875 /home/ec2-user/.nvm/versions/node/v16.11.1/bin/node ./bin/www

自動起動の設定をする場合は、以下コマンドを実行してください。

$ sudo systemctl enable php
$ sudo systemctl enable nodejs

PeerCast民と麻雀

新宿で麻雀オフ会してきました。

メンツは以下。

@Blood_chin@tottokotototo は既にオフしたことありますが、きーばしさんが初めてでした。

結果は10半荘打って、2-2-2-4-47

もっと大負けしそうなところで親国士の16000オールを上がれたのでよかったー😮‍💨

あと、スリーファイブに行ったんですが、セット代が1卓555円/時間と超格安だったのでマジで助かりました。永遠にこの料金でお願いします。

息抜きをするいい機会となりました。

ありがとうございました。

CentOSにMeCabをインストールする

白ヤギコーポレーションが公開しているモデルを使用する際に、pipで色々インストールするほかにサーバの方にMeCabをインストールしておく必要があります。インストールしないとエラーになったので多分そうだと思います。

前提

  • CentOS7
  • python 3.6.13
  • pip 21.2.4

MeCab のインストール

sudo yum install -y https://packages.groonga.org/centos/groonga-release-latest.noarch.rpm
sudo yum makecache
sudo yum install -y mecab mecab-ipadic mecab-devel

gensimのインストール

gensimが4.0以降のやつを使うと、よくエラーになるので、3.8.3をインストールにします。 ※エラーになる理由はわかってません。やる気が出たときにデバッグします。

pip install gensim=3.8.3

モデルの取得

wget http://public.shiroyagi.s3.amazonaws.com/latest-ja-word2vec-gensim-model.zip
unzip latest-ja-word2vec-gensim-model.zip

確認

word2vec.gensim.model と同じ階層に以下コードを書いたpythonファイルを置く。

from gensim.models.word2vec import Word2Vec

model_path = '/path/to/word2vec.gensim.model'
model = Word2Vec.load(model_path)

参考

Amazon IVS でライブストリーミング配信

Amazon Interactive Video Service (Amazon IVS) を利用するとあっという間にOBSからライブストリーミング配信ができます。

IVS チャネルの作成

  1. https://us-west-2.console.aws.amazon.com/ivs/home に移動してチャネルの作成をします。
  2. チャネル名を入力して、チャネルの作成ボタンを押して作成します。 基本はデフォルトのままで良いと思いますが、配信動画を保存したい場合は、ストリームの記録と保存S3 への自動記録を選択しましょう。
  3. ストリーム設定再生設定を確認しておきましょう。

ライブストリーミングの開始

今回はOBSを使ってライブストリーミングをします。

OBSの設定画面から設定します。

  1. 配信設定

  2. サービス: カスタム

  3. サーバ: ストリーム設定の取り込みサーバー
  4. ストリームキー: ストリーム設定のストリームキー

  5. 映像設定

  6. 基本解像度: 1280x720

  7. 出力解像度: 852x480
  8. 縮小フィルタ: バイキュービック (先鋭化スケーリング、16のサンプル)
  9. FPS共通知: 30

  10. 出力設定

  11. エンコーダ: x264

  12. レート制御: CBR
  13. ビットレート: 2000(または、それ以下)
  14. キーフレーム間隔: 2
  15. CPU使用のプリセット: veryfast
  16. チューン: ゼロレイテンシー

設定値は適宜好きなように変更してもOKです。本設定はライブストリーミングの開始の内容をそのまま流用しています。

入力できたら、OKボタン押します。

OBSのメイン・ウィンドウの左下にある「ソース」セクションで配信したいやつを選択しましょう。 配信開始をクリックすると、ライブ配信が開始されます。

配信内容は再生設定再生URLから視聴できます。 VLCなどを使って見てみましょう。

参考

Dark Mode Switch でダークモード対応

Dark Mode Switch というJavaScriptのライブラリを使って本サイトのダークモード対応をしました。 README.md に書いてある通りに実装するだけで簡単にできます。

README.md の内容丸パクリですが、実装の仕方を残しておきます。

必須条件

  • Bootstrap 4.x or 5.x

使い方

  1. ダークモードトグル用のカスタムスイッチを追加し、続いて dark-mode-switch.min.js スクリプトを追加します。 Bootstrap 4.x
    <div class="custom-control custom-switch">
      <input type="checkbox" class="custom-control-input" id="darkSwitch" />
      <label class="custom-control-label" for="darkSwitch">Dark Mode</label>
    </div>
    <script src="dark-mode-switch.min.js"></script>
    
    Bootstrap 5.x
    <div class="form-check form-switch">
      <input type="checkbox" class="form-check-input" id="darkSwitch" />
      <label class="custom-control-label" for="darkSwitch">Dark Mode</label>
    </div>
    <script src="dark-mode-switch.min.js"></script>
    
  2. dark-mode.css をサイトに合わせて編集します。

dark-mode.css の編集

ダークモードをオンにすると、bodyタグに data-theme="dark" が追加されます。CSSを使ってページ内の要素を対象にすると、次のようになります。

[data-theme="dark"] {
  background-color: #111 !important;
  color: #eee;
}

Amazon Linux 2 + Apache + Codeigniter4 でのWebサーバ構築

Amazon Linux 2 インスタンスに Apache HTTP Server と PHP8 をインストールしてWebサーバを構築します。 Codeigniter4のソースコードを利用したかったので、それ用に少しアレンジしています。

環境

  • Amazon Linux 2 (EC2)
  • PHP 8.0.8
  • Apache HTTP Server 2.4
  • Codeigniter 4

手順

  1. PHP 8 とApache HTTP Server をインストール
    $ sudo amazon-linux-extras enable php8.0
    $ sudo yum install -y httpd php php-devel php-mysqlnd php-mbstring php-gd php-xml php-opcache php-pecl-zip php-pear php-intl mod_ssl
    
  2. Apache HTTP Server を有効化 + 起動
    $ sudo systemctl enable httpd
    $ sudo systemctl start httpd
    
  3. ファイルの許可設定 ec2-user を apache グループに追加し、apache ディレクトリの所有権を /var/www グループに付与し、グループへの書き込み権限を割り当てます。
$ sudo usermod -a -G apache ec2-user
$ exit

再ログインして、グループが適用されているか確認する。

$ groups

/var/www 配下のグループと所有権を変更する。

$ sudo chown -R ec2-user:apache /var/www
$ sudo chmod 2775 /var/www && find /var/www -type d -exec $ sudo chmod 2775 {} \;
$ find /var/www -type f -exec sudo chmod 0664 {} \;
  1. (オプション) Composer のインストール 個人的に Composer を使いたかったのでインストールしています。
$ sudo su -

# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
# php composer-setup.php
# php -r "unlink('composer-setup.php');"
# mv composer.phar /usr/local/bin/composer
# chmod 777 /usr/local/bin/composer
  1. SSL/TLS の設定 自己署名のデジタル証明書を使用して、Amazon Linux 2 で TLS をセットアップしてきます。

サーバーホスト用の自己署名 X.509 証明書とプライベートキーを生成するためのスクリプトを利用してセットアップします。 作成された localhost.crt には証明書とキーの両方が含まれています。

# cd /etc/pki/tls/certs
# ./make-dummy-cert localhost.crt

/etc/httpd/conf.d/ssl.conf を編集します。

  • DocumentRoot "/var/www/html/public" を追加
  • SSLCertificateKeyFile /etc/pki/tls/private/localhost.key をコメントアウト

/etc/httpd/conf.d/vhost.conf を新規追加します(vhost.conf というファイル名でなくてもOK)。

<Directory "/var/www/html">
    AllowOverride All
</Directory>

<VirtualHost *:80>
    DocumentRoot "/var/www/html/public"
</VirtualHost>

完了したら Apache HTTP Server を再起動します。

# systemctl restart httpd
# exit
  1. Codeigniter プロジェクトを作成
    $ cd /var/www/
    $ composer create-project codeigniter4/appstarter html
    

参考