Ch6. 移行の計画

CloudFront

クエリ文字列パラメータに基づくコンテンツのキャッシュ - Amazon CloudFront

CloudFrontによるコンテンツのキャッシュはURLを元に行われる。URLの?より後ろクエリ文字列パラメータに応じてキャッシュするコンテンツを変更したいような場合に、上記の設定を使うことが出来る。

例えば、

http://www.pyons.co.jp/images/topimage.png?lang=jahttp://www.pyons.co.jp/images/topimage.png?lang=en

で異なる画像をユーザーに表示させたいとき、CloudFrontに?より後ろのクエリパラメータを読み込ませ別のコンテンツを返すことが出来る。

またCloudFrontのオリジンサーバにオンプレミスのサーバを利用する場合、DNSレコードにはCloudFrontのIPアドレスを登録しておく必要がある(全てのアクセスはCloudFront経由で裁かれる)。

これに関する良い記事が見つからなかったので、後で探して見る。

データベースレプリケーション

データベースのマイグレーションを行うにあたってSnowball Edgeを利用する方法がある。しかしSnowball Edgeでは移行に2週間ほど要してしまうため、Snowballで移行した断面よりも新しい変更について同期できない。

AWS Database Migration Service(最小限のダウンタイムでデータベースを移行)| AWS

AWS Database Migration Service によって、お客様のデータベースの AWS への移行を事実上ダウンタイムなしで行えます。データ移行中にソースデータベースで行われるすべての変更はターゲットに継続的にレプリケートされるため、移行プロセスの間もソースデータベースは完全に利用可能な状態に保たれます。

AWS DMSを利用すると、こうしたオンプレミスのDBとRDS上のDBの差分を移行してくれる。これをレプリケーションと呼んでいる。「リードレプリカ」で指しているレプリカとはやや意味が異なり、DMSとして提供されている機能である。

ECSのAutoScaling

EC2でAutoScalingを利用した場合、コストは起動したEC2インスタンスに対して発生することになる。

ECSも同じようにEC2起動タイプで起動した場合、コストは起動したEC2(Dockerをホストしているインスタンス)に対してかかることになる。ECSでEC2を利用している場合でもDockerをホストしているEC2の数を(CloudWatchでEC2を監視させることで)AutoScaling出来る

更にDockerではコンテナのスケールアウトが出来ることを理解する必要がある。 Docker Hubでホストしているコンテナ(サービスという)の数を増やすことで、並行処理させる方法でdocker swarmと呼ばれる。swarmには[群れ]という意味がある。

Docker Swarm 概要 — Docker-docs-ja 19.03 ドキュメント

当然だが、docker swarmを利用している限りEC2の稼働数には変化がないので利用料金は変わらない。 ECSのAutoScalingとdocker swarmを利用することでアプリケーションの並行処理を効率よく行って負荷分散できる。

問題ではElastic BeanstalkとECSのコスト効率について問われた。ElasticBeanstalkでEC2を起動した場合、(AutoScalingしか行われないという意味で)並行処理は起動するEC2の数だけしか行われない。なのでECSの方がコスト効率が高いと判断する。

AutoHealingとは

AutoHealingはEC2が提供するものとOpsWorksが提供するものが存在する。どちらも「異常が発生したインスタンスに代わり新しいインスタンスを起動して必要なスケールを保つ」ことが出来る。

OpsWorksというとIaSによる自動構成ツールとしてのイメージが強いが、各EC2インスタンスにエージェントを常駐させているので(例えば)Chefサーバとエージェントとを疎通させることで死活確認を行うことが出来る。

自動ヒーリングを使用した、失敗したインスタンスの置き換え - AWS OpsWorks

OpsWorks(for Chefにせよfor Puppetにせよ)自体がCloudFormationのサービスの一部である。ClouFormationでインスタンスの起動を行うような場合、OpsWorksと組み合わせることをBestPracticeとしているようだ。

IP Adress / MAC Adress

EC2インスタンスで稼働するアプリケーションが「マックアドレスに関連付けられたライセンスファイル」が必要になるような場合、固定のMACアドレスをEC2インスタンスに与えることが出来るようにENIをEC2にアタッチする。ENIはネットワークカードであり、EC2からデタッチ/アタッチが可能である。

IP Adressも固定とすることも出来る。RDSなどではENIにElastic IPを割り当てることで可能になる。ただし、変更になる可能性を考慮してIPアドレスのトラッキングを行う仕組みが欲しくなる。

AWS RDSに固定IPアドレスを割り当てる方法 | 株式会社CONFRAGE ITソリューション事業部

この場合、lambdaで相手ホストのIPアドレスを取得した上で、Systems Manager(SSM)のパラメータストアという機能を利用して、更新する仕組みを手動で作り上げる必要がある。