箱のプログラミング日記。

渋谷の自社開発企業でRails書いてます。

AWSで既存の環境を複製したい〜AMIからインスタンス作成・Route53・サブネット等〜

f:id:y_hakoiri:20191102121618j:plain

業務で検証環境の複製を行い、AMI作成〜EC2インスタンス作成〜サブネット周りのところまで一通り網羅できたので書いておきます。

概要

今回の内容は「元からある環境を複製する時に行うこと」がメインになっています。

VPCを作成するところや最初にインスタンスを立ち上げて色々インストールするところなど、何もない状態からAWSを使いたい方にとっては不十分な内容となっていると思いますので悪しからず。。

今回の手順

今回の手順は以下の通り。

  • 既存のEC2インスタンスからAMIを作成
  • 作成したAMIから新たにインスタンスを作成
  • ターゲットグループを作成し新しいインスタンスを紐付ける
  • ロードバランサの作成
  • Route53でサブドメインの作成&レコードの割り当て

順に見ていきます。

既存のEC2インスタンスからAMIを作成

AMIとは

Amazon マシンイメージ (AMI) は、ソフトウェア構成 (オペレーティングシステム、アプリケーションサーバー、アプリケーションなど) を記録したテンプレートです。AMI から、クラウドで仮想サーバーとして実行される AMI のコピーであるインスタンスを起動します。

引用元:インスタンスと AMI - Amazon Elastic Compute Cloud

要はイチからインスタンスを作成して必要なパッケージをインストールしていくのがめんどくさいので、もともとそれらが入った状態のテンプレートを作成して、そこからインスタンスを立ち上げましょう、というお話。

やること

大まかな流れは以下の通りです。

  • サービス一覧からEC2を検索してインスタンス一覧画面に入る
  • 該当インスタンスを選択した状態で上部の「アクション」を選択
  • 「イメージ」→「イメージの作成」

注意すること

主に注意するのは以下二つ

  • インスタンスは一度停止した方が良い
  • イメージ名は後から変えられない

インスタンスは一度停止した方が良い

イメージ作成時のメニューで「再起動しない」というのがありますが、こちらを選択すると現在稼働中のインスタンスを再起動せずにAMIのバックアップをとってしまい問題ありな模様。

f:id:y_hakoiri:20200716232726p:plain

イメージ名は後から変えられない

イメージ名にこだわりがある場合は注意。

インスタンスの名前には影響しないので特段こだわりがなければそこまで気にしなくても良いのかも。

作成したAMIから新たにインスタンスを作成

先ほど作成したテンプレートから新たにインスタンスを立ち上げます。

  • サイドバー「インスタンス」の下にある「イメージ」→「AMI」で一覧を確認
  • 作成したイメージを選択した状態で左上の「起動」をクリック
  • インスタンスの内容やオプションを入力し新規作成(下記参照)

作成までのステップ

確認画面までのステップは以下の通り。

  • インスタンスタイプ(スペック)の選択
  • インスタンスの詳細の設定
  • ストレージの追加
  • タグの追加
  • セキュリティグループの設定

基本的に既存のインスタンスと同じにしたいので、別画面で既存のインスタンスの詳細画面を確認しながら進めると良さげ

注意すること

  • タグはつけた方が良い
  • キーペアは後から変えられない

タグはつけた方が良い

インスタンス一覧画面で何がどのインスタンスか見やすくするためにタグを使用して名前をつけることができます。

キーに「Name」、値の方に任意の名前を入力すればOK

f:id:y_hakoiri:20200716234306p:plain

そうするとインスタンス一覧画面でタグ名がName列に入るようになります

f:id:y_hakoiri:20200716235837p:plain

キーペアは後から変えられない

確認画面まで到達すると最後の最後にキーペアの選択に移ります

キーペアを新規で作成するか既存のものを使用するか(その場合、どのキーペアを使用するか)を指定できますが、ここで選択したキーペアは後から変更することができないので注意。

ここまでは割と順調にいきましたが、ここから先にどの順序で作業をすべきかだいぶ右往左往しました。笑

ターゲットグループを作成し新しいインスタンスを紐付ける

ターゲットグループとは

ターゲットグループの説明をしようとするとまずロードバランサー(ELB)の話になる。

ロードバランサーは、クライアントにとって単一の通信先として機能します。このロードバランサーは、受信アプリケーショントラフィックを複数のアベイラビリティーゾーンの複数のターゲット(EC2 インスタンスなど) に分散します。これにより、アプリケーションの可用性が向上します。

引用元: Application Load Balancer とは - Elastic Load Balancing

簡単に表現するとこんな感じ↓

ELB>>>AZ>>>ターゲットグループ>>>EC2インスタンス

クライアントからのリクエスト→ELBで複数のアベイラビリティーゾーン(AZ)に負荷分散→その先にターゲットグループがあり、そこにインスタンスが紐づいている

この辺はわかりやすく説明してくれている人がQiitaとかに居そうなので、これ以上の説明は割愛。

ターゲットグループを作成する

確認画面までのステップは以下の通り。

  • サイドバー「ターゲットグループ」より右上の「create target group」
  • typeは「instances」を選択
  • ヘルスチェックの設定を入力

ヘルスチェックに関しては以下参照。

ヘルスチェックの実装

簡単にまとめると、数分に一度ヘルスチェックが行われていて、インスタンスやネットワーク周りが正常に動いているかどうかのチェックが入る。

基本的にヘルスチェックを行うパスはrootで問題なさそう。

少し長くなってきたので一旦ここまで。。