課題に対する解決策 1. Railsアプリをコンテナ化する a. Rubyのバージョンアップやライブラリの追加をするときは Dockerfileを更新するだけで済む 2. Kubernetes上で動かす a. インフラがPod / ReplicaSet / Deployment / Service等のリソースに抽象化される b. インフラ構成をマニフェストファイルで一元的に管理できる c. コード化されるため誰でも読めるし書ける( Infrastructure as Code)
Railsアプリをコンテナ化する 1. Dockerfileを書く a. Alpine LinuxベースのRubyコンテナを使う b. Multi-stage buildsを使う 2. コンフィグを整理する a. Capistranoでのデプロイ前提のコードを廃止 b. KubernetesのConfigMap / SecretとRailsのCustom-configurationを使う
運用環境の切り替え方法 1. ALBに紐づくターゲットグループを切り替える a. メリット i. 準備もオペレーションも簡単 b. デメリット i. ターゲットグループが切り替わってからターゲットのインスタンスのヘルスチェックを行うため、ダウンタイムが発生してしまう 2. Route53の加重ルーティングポリシーでアクセスを振り分ける a. メリット i. 割合変更のための操作が、 Route53のルーティングポリシーを変更するだけで済む ii. ALB Ingress Controllerがサポートされているので、一般的な EKS Clusterで使いやすい b. デメリット i. アクセスを振り分けるため、 ALB関連のリソースをもう 1セット作成する必要がある ii. 設定反映に時間がかかるため、実際にアクセスが振り分けられるまでにラグが発生する 3. ALBの加重ターゲットグループでアクセスを振り分ける a. メリット i. ALBにターゲットグループを追加するだけなので、 ALB関連のリソースをもう 1セット作成する必要がない ii. DNSでの切り替えではないので、アクセス割合設定の変更が即時反映される b. デメリット i. ALBに設定する内容のため、 ALB Ingress Controllerは使用できない