Kusanagiセットアップ

EC2でKusanagiを実行するにあたって変更等を行った箇所 早いと噂のKusanagiを検証用にインスタンスを作成したので、その備忘録

前提kusanagiAMIでのインスタンスの起動が出来ており、SSH接続できる状態

  1. 管理者権限で実行
    • sudo su -

  1. Kusanagiをセットアップ
    • セットアップに関しては、公式からわかりやすい手順が記載されている。 こちらを参照

  1. Kusanagiをプロビジョニング
    • これに関しても、公式からわかりやすい記事が用意されているので
      こちらを参照
    • ※プロビジョニングをやり直したい時は、下記コマンドで削除して再試行すればOK
      • kusanagi remove -y [プロファイル名]

  1. phpiniを変更(アップロード最大容量をUP)
    • /etc/php7.d/php.iniにある下記2つの設定を変更
      • post_max_size = 16M
      • upload_max_filesize = 16M
    • 設定の変更をkusanagiに読み込ませる
      • kusanagi php7

  1. All-in-One WP Migration プラグインを入れる
    • ブラウザでWP管理画面にアクセスして、プラグインを導入
    • ※FTPを選択して、kusanagiパスワードを入力する
    • ※このままでは、ファイルサイズが大きかったりするとファイルをアップロードできない可能性が高い

  1. NginxのPOST許容サイズを変更
    • 下記2つのファイルを変更する
      • /etc/nginx/conf.d/[プロファイル名]_http.conf
      • /etc/nginx/conf.d/[プロファイル名]_ssl.conf
    • 変更内容
      • client_max_body_size = 200M
    • Nginxを再起動
      • systemctl restart nginx

  1. ディレクトリの所有者を変更
    • chown -R httpd:www wp-content/plugins/all-in-one-wp-migration/storage
    • chown -R httpd:www wp-content/ai1wm-backups

  1. All-in-One WP Migrationでバックアップファイルをアップロードして完成
    • ファイルサイズが大きいと、時間がかかったりします….

  1. まとめ
    • 少しやることが多いけど、All-in-One WP Migrationのおかげでかなり楽に移行できる。
    • 画像たっぷりのサイトは、Kusanagiに移行してもあまり意味が無いかも…

  1. 参考サイト

初めて、MarkDown形式で投稿してみました✨

Lambdaでレイヤーを追加する方法


Lambdaって便利ですよね…AWSを利用していて何か便利にしたい!と思ったときに必ずと言っていいほどに活躍してくれています。そんなLambda関数をもっと便利に使うために、「レイヤー」と呼ばれる機能があります。


1.レイヤーとは

公式ドキュメントでは、こんなことが書かれています。


Lambdaレイヤーは、追加のコードまたはデータを含むことができる .zip ファイルアーカイブです。レイヤーには、ライブラリ、 カスタムランタイム 、データ、または設定ファイルを含めることができます。レイヤーを使用すると、コードの共有と責任の分離を促進し、ビジネスロジックの記述をより迅速に繰り返すことができます。
レイヤーは、 .zip ファイルアーカイブとしてデプロイされた Lambda関数でのみ使用できます。コンテナイメージとして定義された関数では、コンテナイメージの作成時に、優先ランタイムとすべてのコード依存関係をパッケージ化します。詳細については、AWS コンピューティングブログの「コンテナイメージの Lambda レイヤーと拡張機能の使用

」を参照してください。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html

ざっくりとまとめると、pipなどのライブラリをLambda関数間で共有できたりします。
レイヤーを使う前は、個々の関数で必要なライブラリをpipして、それをひとまとめにしてzipでアップロードしていました。
ですが、このレイヤーを利用することで、あの関数で使ったライブラリが便利だからこっちでも使いたい!となっても、その関数にレイヤーを追加するだけで利用できるようになります。


2.レイヤー追加

1.左横のメニューから「レイヤー」を選択

2.右上の「レイヤーの追加」を選択

3.名前と説明を記入してzipファイルをアップロード、ランタイムを選択し右下の「作成」をクリック

この時に気を付けたいのが、「ファイル名」です。pipしたライブラリ群をzipします。そしてそのファイル名は、「python.zip」としてください。そうしないとレイヤーを追加できても関数で、うまく動作しません。

4.完成!


3.最後に

これで、一つの関数でしか使えなかったpipも、他の関数でも利用できるようになりました。

最後にもう一度だけ、「アップロードするzipファイルの名前は、python.zipにしましょう」

リモートDBを使って開発環境を整える


1.動機

①セットアップ
最近、開発環境をセットアップすることが増えました。
Docker環境が整備されたことで、かなり楽にセットアップを行うことができました。しかし、DBの変更まで、完璧に同期することはかなり難しいです。

②PR確認
DB変更を伴う機能追加や修正の場合、レビュアーはローカルのDBに変更を加える必要があります。しかし、レビューが終わったら元に戻す必要があったりと、かなり時間と手間がかかってしまいます。


2.検討

どんなサービスを使うか?

【要件】
・MySQL5.7
・~20GBの容量

結果として、LightsailのDBインスタンスを利用する形にしました。

エントリーNo.1:RDS for MySQL
 
 Good
 ・本番環境に近い形で運用が可能
  ・最小構成で20GBから始められる
  ・社内ノウハウもある
 Bad
  ・高い!(使わない時間は停止すればコストダウン可能)

エントリーNo.2:Lightsail

 Good
  ・安い!
  ・リカバリーが簡単にできる
 Bad
  ・可用性が微妙
  ・最小構成が40GB~


3.導入

LightsailのDBインスタンスでは、下記のようにパブリックネットワークにすると危ないかもよ?と脅されます。


同じリージョンにあるインスタンスであれば、アクセスできます。
なので、踏み台用のインスタンスを用意します。

「俺は、ローカルからアクセスしたいんだよ!!!話が違うじゃないか!」

そんなあなたに、SSHポートフォワーディングを!!!

・SSHポートフォワーディングとは?
 ローカルから踏み台サーバーのネットワークにアクセスし、DBにアクセス可  能にできます。こんな感じです↓

・Point
 リモートDBに繋ぐ際は、ローカルのDockerから一度出て、SSH Clientのポートフォワーディングで踏み台サーバー経由でリモートDBに繋ぎます。


4.まとめ

少々面倒な方法になってしまいましたが、リモートDBがあることで、開発のスピードが格段に上がったよに感じます。
今後も、ロジック周りの環境が変化することはあると思うので、データと隔離するメリットはあると思います。



Redmineにプラグインを入れる!

前置き

突然ですが、Redmineのガントチャートって激見づらくないですか?
そんな事象を解決するために、プラグインで解決しようじゃありませんか…


環境

LightSailのbitnamiを使ってRedmineが動いています。
     ↓こんな感じで動いてます↓


プラグインを入れる

①プラグインフォルダに移動してプラグインを入れる

cd ~/apps/redmine/htdocs/plugins

ここで、git clone なりでプラグインを引っ張ってきます。

②いったんhtdocsに戻ります

cd ../

③必要なものをインストールします

bundle install --no-deployment

④変更をマイグレーションします

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

⑤再起動します

sudo /opt/bitnami/ctlscript.sh restart

■もしかすると、③を行った際に、mimemagicが~と怒られるかもしれませんが、安心してください。下記コマンドを実行すればおそらく解決します。

sudo apt install shared-mime-info

mimemagicの箇所でかなり手こずりました💦

Lambdaでもpipがしたい!

Lambdaでもpipしたいですよね….いろいろ面倒だし…..

やり方

①ローカルの作業ディレクトリにpipして使いたいものをためておきます。
  サンプルとして、pymsteamsを入れる形です。

pip3 install pymsteams -t .

 そうすると、作業ディレクトリにこんな感じでぶわっとファイルが量産されま  す↓

②それらをzipします。upload.zipだったりの名前にしておきます。

③作成したupload.zipをLambdaのアップロードでzip形式を選択後、該当ファイルをアップロード(既にアップロードされている状態….💦)

これでひとまず使えるようになりました…

レイヤーとかに追加してあげると、後で使うときに便利になるっぽいです。