はじめに
似たようなEC2インスタンスを何個も作る際にAMIを使うととても便利だったのでまとめておきます
これによってRubyやNginx、Node.jsなどのパッケージのインストール作業などを何度もやらなくて済み、数分でインスタンスを複製できるのでとても便利でした
前提
AWSで作成済みのEC2インスタンスがある
対象読者
EC2インスタンスを新規で作成したいけど、パッケージのインストールなど諸々の作業がめんどくさいと思っている人
AMIって何?
Amazon Machine Imageの略
インスタンスの作成に必要なソフトウェア構成 (OS、アプリケーションサーバー、アプリケーション) を含むテンプレートのこと
EC2インスタンスを作成する際に出てくる以下の画面で選択するのがAMIです
通常はここからAWSが提供しているAmazon Linux 2 AMIなどを選択してEC2インスタンスを作成しますが、
今回はこのAMIを自分で作ってそこからEC2インスタンスを作成するという流れになります
作業の流れ
- 複製元となるEC2インスタンスからAMIイメージを作成する
- AMIイメージから新規のEC2インスタンスを作成する
- 作成したインスタンスにssh接続して、インスタンスの中身を確認する
1. 複製元となるEC2インスタンスからAMIイメージを作成する
まずは複製するインスタンスを決めて停止させます
*停止させなくてもできるのですが、AWS非推奨でデータの整合性が取れない場合があります
今回は停止したChat-spaceという名のインスタンスを複製することとします
*Elastic IPアドレスがEC2インスタンスに紐づいていないと課金されてしまいますので、必ずアドレスの関連付け解除と解放をしてから停止させましょう
複製するインスタンスを選択し、アクションからイメージの作成をクリックします
次に実際のAMIの設定を入力していきます
イメージの説明はあとで変更可能ですが、イメージ名は変更できないので注意してください
今回はtest-serverとします
ボリュームタイプなども選べますが、今回はデフォルトの設定とします
イメージの作成を押すとAMIの作成が始まります
左側のタブのイメージ>AMIをクリックすると、作成したAMIを確認できます
しばらくするとステータスがavailableになったAMIが作成されます
2. AMIイメージから新規のEC2インスタンスを作成する
次に新規のEC2インスタンスを起動していきます
作成されたAMIを選択して、起動ボタンをクリックします
すると、EC2インスタンスを作成するいつもの画面が出てくるので設定をしていきます
インスタンスタイプ
インスタンスの設定
ネットワークの設定などを行います
自分で作成したVPCやサブネットがあればここで選択します
今回はデフォルト値のままとします
自動割り当てパブリックIPは有効になってないとインターネット通信ができないので注意してください
ストレージの追加
タグの追加
必須ではないですが、タグ付けをしておくと何のインスタンスなのか一目でわかるのでつけておくと便利です
Nameキーで好きなインスタンス名をつけておくことが一般的です
今回はtest-serverとします
セキュリティグループの設定
既存のセキュリティグループがある場合はそれを選択することもできますので適宜設定してください
今回は新規作成することとします
ルールの追加を押し、HTTP, HTTPS, ポート3000をフルオープンで許可します
最後にキーペアを選択してください
今回は既存のdeploytestというキーペアを使います
インスタンスの作成を押すと作成が始まります
3. 作成したインスタンスにssh接続して、インスタンスの中身を確認する
EC2インスタンスが作成されたらパッケージがインストールされているか確認していきます
その前に今回はパッケージがインストールされていないとどういう表示になるかを先に見てみます
nginxやnode.jsがインストールされてるかを確認しましたが、下記のように何も出力されません
ではいよいよ作成したインスタンスにssh接続します
先ほど設定したキーペアを使ってください
Elastic IPアドレスは必要であれば適宜設定してください
なければインスタンスのパブリックIPアドレスを@以降に記述して接続します
インスタンスに接続した状態でnginxやnode.jsがインストールされているかを確認すると、下記のようにインストールされていることが確認できました
このようにAMIを使うと、あるインスタンスに対して行った設定を引き継いで複製することができます
ちなみに今回はchat-spaceというアプリケーションを入れたインスタンスだったので下記のようにそのアプリケーションディレクトリまで複製されてしまっています
今回はこのアプリケーションは使わないので下記コマンドで削除しています
これでchat-spaceのディレクトリは消去されました
あとは好きなアプリをgit cloneするなりしてください
まとめ
パッケージのインストール作業はめんどくさいことが多いですが、1つ作っておけば今回の方法で複製できるのでとても便利です
作成時間も10分くらいでできちゃいますので、同じようなインスタンスを作成する場合はぜひ使ってみてください
間違いなどあれば指摘していただけると嬉しいです