なるべくお金をかけずにお手軽運用でサーバを扱う(検証、テスト用)
なるべくお金をかけずにお手軽運用でサーバを扱う(検証、テスト用)1,2年前にまとめていたけど、
下書きで残しっぱなしだったので、今更載せておきます。
前ふり
AWS等クラウドでサーバを立てる時に気になるお金。
なるべく課金を減らすために必要なときだけ立てて、
いらなければ落とすなんてことをしますよね。
でも落とした後に起動するとやっかいなのがIPアドレスの変更。
毎回毎回アドレスが変わってしまうとssh config等の設定を変えないといけなかったりして面倒なんですよね。
かといってElasticなIPを使うとそれでもお金がかかってしまうので嫌だ。。。
というわけで、なるべくお金をかけずにかつ設定をなるべく変えないでサーバを扱う方法を自分なりに試行錯誤してみたやつです。
※今回の例はあくまで検証や遊びでサーバを立てて使う人用の方法です。本番システムでの利用は推奨しません。
やること
- VPCを作成
- パブリックサブネットとプライベートサブネットを立てる
- インターネットからパブリックサブネットにアクセスさせる設定
- パブリックサブネットに踏み台サーバを立てる
- プライベートサブネットに検証サーバを立てる
- ssh configで踏み台経由でサーバにアクセスする設定を行う
- ssh <設定名>でいつでもアクセスできる やっていることのほとんどはAWSEC2のデザインパターンとかでよくみるやつです。
VPCの作成
まずは、VPCを作成します。
AWSのユーザーコンソールからVPCに移動
設定項目 | 設定値 |
---|---|
名前タグ | 適当な名前で |
IPv4 CIDRブロック | なんでもいいけどVPCにいっぱいサーバを立てるなら10.0.0.0/16が順当かと |
IPv6 CIDRブロック | ブロックはなしで |
テナンシー | デフォルトでOK |
パブリックサブネットとプライベートサブネットを立てる
続いてサブネットを作ります。
ユーザーコンソールからVPC -> サブネットに移動。
サブネットではインターネット経由でアクセスできるパブリックサブネットとプライベートサブネットを設定します。
- パブリックサブネット側
設定項目 | 設定値 |
---|---|
名前タグ | 適当な名前で |
VPC | さっき作成したVPC名を指定 |
アベイラビリティーゾーン | 今回は特に指定なしでOK |
IPv4 CIDRブロック | VPCで設定したブロック内で範囲を指定。今回は10.0.1.0/24としておく。 |
- プライベートサブネット側
設定項目 | 設定値 |
---|---|
名前タグ | 適当な名前で |
VPC | さっき作成したVPC名を指定 |
アベイラビリティーゾーン | 今回は特に指定なしでOK |
IPv4 CIDRブロック | VPCで設定したブロック内で範囲を指定。今回は10.0.2.0/24としておく。 |
インターネットからパブリックサブネットにアクセスさせる設定
ここは大事なところ。
2つサブネットを作成した後に、パブリックサブネットのみ選択して、サブネットのアクション-> 自動割り当てIPの設定変更 に飛ぶ
そこで、 パブリックIPv4アドレスの自動割り当てを有効にする にチェック。
これをやっとかないと踏み台サーバ立てても外部からサーバにアクセスするための外部IPを発行してくれません。
次にやるのはインターネットとパブリックサブネットをつなぐゲートウェイ(窓口みたいなもの)の設定
- VPC -> インターネットゲートウェイに移動
- インターネットゲートウェイの作成を押して文字通り作成(名前は適当に)
- さっき作ったゲートウェイを選択して、 アクション->VPCのアタッチを選択
- VPCでさっき作ったVPCを選択してアタッチ
- VPC -> ルートテーブルに移動
- 作ったVPCに紐づくルートテーブルを選択。
- 下部にあるルートタブを選択して編集。
- 別のルートを追加を選択。以下のように設定
送信先 | ターゲット |
---|---|
0.0.0.0/0 | さっき作ったゲートウェイの名前 |
これでできました。
パブリックサブネットに踏み台サーバを立てる
ここから踏み台サーバを立てます。
サーバの立て方は基本的な方法と同じなので割愛。
一般的な立て方と違うのは以下の点。
- インスタンスのタイプはt2.nano(踏み台用途なので and 24時間稼働を想定してなるべくお金がかからないように)
- インスタンスの詳細の設定にて
- ネットワーク -> 作ったVPCの名前
- サブネット -> パブリックサブネットの名前
プライベートサブネットに検証サーバを立てる
今度はプライベート側に実際に使用するサーバを立てます。
こちらも基本的な立て方は同じ。
変更点は以下の点
- インスタンスの詳細の設定にて
- ネットワーク -> 作ったVPCの名前
- サブネット -> プライベートサブネットの名前
- セキュリティグループは基本的に全開放でも問題ないが、気にされる方は必要なポートをパブリックサブネットのIPに指定するとよし。
ssh configで踏み台経由でサーバにアクセスする設定を行う
サーバが立てられたので、sshでつなぐ設定をします。 今回はmacを想定し、macの.ssh/configに設定をします。
# ~/.ssh/config Host humidai HostName <踏み台サーバのパブリックIP> User ubuntu #サーバによって変化 Port 22 #sshポート GatewayPorts yes IdentityFile ローカルマシン内で踏み台サーバの公開鍵が置いてある場所 Host server HostName <10.0.2.xxとなるIP> User ec2-user #サーバによって変化 Port 22 GatewayPorts yes ProxyCommand ssh -CW %h:%p humidai #humidaiは上記設定したHostの名前を指定 IdentityFile ローカルマシン内で検証サーバの公開鍵が置いてある場所 # ProxtCommandが踏み台サーバ経由でsshサクセスさせるためのコマンド
この設定をした後、
ssh server
とコマンドを入力すると、踏み台経由でアクセスできます。
しかも、検証サーバを一旦落として再度あげてもプライベートIPは変わらないので、そのままsshコマンドで入れます。
また、ポートフォワーディングしたい場合は、
# ~/.ssh/config #踏み台側 LocalForward 5432 localhost:5432 LocalForward 8080 localhost:8080 #サーバ側 LocalForward 5432 <サーバのプライベートIP>:5432 LocalForward 8080 <サーバーのプライベートIP>:8080
と設定すればOK
懸念事項
1 この構成にすると、サーバ側からインターネットにつなぐことができないので、wgetとかでファイルを落としたりすることはできません。
これについては別途NATインスタンスとかNATゲートウェイが必要になるのですが、いずれにしてもお金がかかる。。。。
なので、しょっちゅうインターネットにアクセスしないのであれば、ローカルマシンに対象ファイルを落としてscpコマンドで移動がよいかなと。
実際scpコマンドで移動させる場合でも
scp <移動させるファイル> server:/home/ec2-user
みたいな感じで簡単に移動できます。
2 この構成は踏み台サーバは常時稼働を想定しています。踏み台サーバはt2.nanoの最小構成なので、
$0.0058 /1 時間 -> 500円くらい/1ヶ月
が必要経費になります。
ただ、毎回毎回IPアドレスを変える手間とか、めんどくさくてサーバをずっと起動させることによる課金等を考えると決して高い値段ではないかなと。
終わりに
今回は最近良くやるAWSでの検証サーバ構築用のシステムを紹介しました。
上述したように、この構成は本番構成でもやるような部分も含まれていますので、特にAWS初心者の方はぜひチャレンジしてみるといいかもしれません。
ホントの最後に
間違いとか、わからないとこがあればコメントとかしていただければ!!