ECS on FargateでLaravelを動かすときにはまったこと

ソフトウェアエンジニアの小野寺です。 先日、自社サービスのリニューアルで新たにコンテナ環境でサービスを稼働するタスクを担当させていただきました。 その際につまづいたこと、ハマったことを書こうと思います。 インフラ環境はアプリケーションはECS on Fargate、データベースはRDS(エンジン:Aurora MySQL、以下MySQLと表記)です。

続きを読む

心理的安全性の育て方

こんにちは、CTOの山岡(@hiro_y)です。ここ数年「心理的安全性」という言葉を目にすることが増えました。Web上の記事でも、書店に並ぶ書籍でも。

自分も何度か「心理的安全性」って大事だよね〜と話した記憶があるのですが、実際のところ「心理的安全性」とは何でしょう。大切なのは誰もが同意するでしょうが、皆が思い描く「心理的安全性」が達成された状態は少しずつ違っていたりしないでしょうか。

続きを読む

CloudTrailで特定のユーザーの行動を見よう!

こんにちは、エンジニアのありんこです。

年始からCircleCIでインシデントが発生して、Deploy keyやAWSのアクセスキーをローテーションしたりなど何かしら対応された方も多いのではないでしょうか?

弊社でもCircleCIを使用しているプロジェクトがいくつかあり、プロジェクトごとに環境変数を更新する等の対応を行いました。

その中でアクセスキーが不正使用されていないか確認する必要があり、その際にCloudTrailを使用したので簡単にその使用方法をまとめたいと思います。

続きを読む

WordPress案件のバージョンアップを行っている話

こんにちは、ソフトウェアエンジニアの荻島です。 当社で現在受諾案件の運用開発(バグ修正や追加改修)を主に対応しています。

最近の業務の一つとしてやや古いPHPで稼働しているWordPressのバージョンアップを絶賛対応中なので、本日のエントリーはそれにまつわるあれこれを書ければと思っています。

バージョンアップに至った経緯

発端はある機能の実現のために必要なライブラリが現行のPHPでは動かないということが発覚したことでした。

対象のプロジェクトで使用しているPHPは7系で、既に最新の7.4もEOLを迎えていたため、

  1. バージョンアップ時に最新の8系にアップデートを行う
  2. 使用しているWP本体のバージョンやプラグインなども最新の8系に対応したものにアップデートする
  3. アップデート後に本来実装したかった機能を実装する

という話に広がり、今回の改修PJがスタートした形です。

※システムのバージョンアップをした方がいい理由に関しては先日弊社CTOの山岡が記事を書いているのでそちらも是非読んでみてください! tech.innovator.jp.net

一次調査開始!

最初はどこから手を付けて良いのか分からない状態だったので、まずは全体の工数感の洗い出しのために一次調査としてフェーズを切り、対応が必要そうな部分の洗い出しを行いました。

幸いなことに今回の案件は

  1. 本番環境はAWS上で稼働
  2. メディアファイルはS3に上がっていてCloudFrontから配信されている
  3. サーバーはEC2だがEBSにあるのはソースコードと若干のキャッシュファイルだけ

という状態だったので比較的インフラ周りは気にすることが少なそうだなという印象。 アプリケーション側の主な対応は

  • プラグインのアップデート
  • 独自実装している部分(とそれに使われているライブラリ)のアップデート

であろうとアタリをつけて手元の開発環境で調査を実施、いくつか課題を発見しました。

課題①:ローカル開発環境

現行のローカル環境はDockerのAlpineベースのコンテナを利用しているのですが、何も考えずにPHPのバージョン指定だけ変えたところ、PHPのバージョンアップに伴い拡張周りの変更などが入った影響でイメージがビルドできなくなりました。しかも自分はAlpine系のコンテナに関する知見(主にAPK周り)がなく、なかなかうまく解決ができず...

こちらに関しては本番のOSとローカルのOSが元々揃っていなかったのと、自分でなんとかできるようにするしかなかったことから、コンテナを自分でも多少触ったことのあるDebianベースのものに切り替えることにしました。

課題②:メジャーバージョンの壁

ローカル環境が一先ず動くようになったところで次は

  • 元々少し古めのバージョンのPHPで動いていたこともあり、全体的にプラグインのソースも古め
  • プラグインを最新にするにはそもそもPHPのバージョンを上げないといけない
  • PHPのバージョン一気に8系まで上げると一部プラグインが壊れて動かなくなる

という合わせ技の課題にぶつかりました。

ここに関しては

  1. ローカルの環境を7系最新の7.4まで上げる
  2. WP本体やプラグインを最新にする(この時点で対応していないプラグインやライブラリに対処)
  3. ローカル環境を8系に上げる
  4. 再度プラグインとライブラリを精査して対応していないものに対処

という風に少し段階を踏んで調査を進めることにしました。

課題③:DBスキーマの変更を伴うプラグインの更新

一部のプラグインではアップグレード時にDBのスキーマ変更が必要なものがありました。 対象のプロジェクトではサーバーを冗長構成にしているのですが、DBは一つのRDSインスタンスを共有しているのでプラグインのバージョンアップは同時に行わないとプラグインが動かなくなるということが判明。

元々は段階的に新しいPHPのインスタンスをリリースできればなーと考えていたのですが、これにより本番デプロイ時は一気に全てのインスタンスを入れ替える必要が出てきてしまいました...

まとめ

一次調査で当初は予想していなかった課題もいくつか出てきましたが、ローカル環境がDocker化されていたおかげで比較的容易に調査が行なえ、おおよそやらないといけないところも見えてきました。

今回の調査では普段の改修や追加あまり意識することのないようなプラグインのコードや使用している外部ライブラリの実装/テストコードになどにも目を向けることになり、改めて先輩方から聞いていた

  • 技術選定時にはメンテナンスされているかを重視しないといけない
  • バージョンアップはとにかく地道にやるだけ
  • やれば力が付く、レガシー案件は宝の山

みたいなところを肌で感じられるいい機会になりました。

バージョンアッププロジェクトはまだまだ始まったばかりなので、しっかりと移行をやりきって経験値にしていきたいと思います!

お読み頂きありがとうございました!

Vimiumで快適ブラウジング、ときどき除外設定

こんにちは、アプリケーションエンジニアのたべたつです。

私は普段の開発ではエディタにVim拡張を入れて使っているのですが、Vimの使用感になれるとVimのキーバインドでブラウジングしたくなります(なりますよね?)

本日紹介するのはそんなあなたの願いを叶えてくれるChrome拡張がこちら!

続きを読む

システムの保守には修繕計画が必要という話

こんにちは、CTOの山岡(@hiro_y)です。

ソフトウェア開発(特にWebアプリケーション開発)に携わっていると「レガシー」という表現をよく聞きます。でもよくよく考えてみると、ソフトウェアは放っておいても腐りませんし、錆びてしまうこともありません。しかし現実問題として、ソフトウェアは放っておくと否応なく「レガシー化」します。どうしてそうなってしまうのでしょうか。

(「レガシー」それ自体は悪い意味の言葉ではないはずですが、不思議とソフトウェア開発の文脈だとよくない意味合いの方が強くなってしまいますね…。)

続きを読む

SDP(Salesforce Data Pipeline)で大量データをSalesforceに集約する

こんにちは、ソフトウェアエンジニアの小野寺です。

データ利活用のためにSalesforceを導入してる企業は多いのではないでしょうか。システムに散らばる情報をSalesforceに集約して営業戦略に役立てている企業が増えつつあると思います。

SDP(Salesforce Data Pipeline)について

大量データを連携する場合はSDPを検討してみても良いかもしれません。SDPはSalesforceとデータオブジェクトをすばやく同期してくれるサービスです。 実際にSDPを用いたRDSとSalesforce連携を順を追ってご紹介します。

続きを読む