とりあえずサーバ利用できる状態までは先にやってみる。
↓前回(アカウントの作成)
今回の目指すところ
①GCEインスタンスを生成しサーバをたてる。
②標準コンソールのGoogle Cloud Shellを使用する。
③ローカルホストからSSH接続できるようにする。
④ローカルホストからGCEインスタンスにHTTP接続できるようにする。
⑤自身のマシン(IP)以外から接続できないようにする。
GCEについて
GCPでは今のところサービス自体には深く踏み込まない予定なので軽く確認。
正式名称は「Google Compute Engine」と言います。
以下は公式サイトからの引用です。
高性能でスケーラブルな仮想マシン
Compute Engine は、高性能ネットワーキング インフラストラクチャおよびブロック ストレージへのアクセス権を持つ Google のデータセンターで実行される構成可能な仮想マシンを提供します。
引用元:Compute Engine | Google Cloud
AWSでいうところのEC2であり、一般的なサーバ機能を提供します。
GCEを利用開始する
GCEインスタンスの生成
性能などは考慮せずに「AlwaysFree」内で使用することを目指した構成にします。
GCPの対象プロジェクトでナビゲーションメニューから「Compute Engine>VMインスタンス」を選択します。
VMインスタンスの画面から作成を選択します。
入力情報は以下のようにしています。
・ディスクイメージの選択
【入力情報】
■名前
自身が認識できる任意の名前
■リージョン
無料枠で利用可能なのは「北バージニア [us-east4] を除く米国リージョン」を選択します。
今回は「us-central1(アイオワ)」を選択。
■マシンの構成
「汎用」を選択。
■シリーズ
無料枠的にどうかかわってくるのかいまいち不明。
デフォルトの「N1」を選択。
■マシンタイプ
無料枠で活用する場合には必ず「f1-micro」を選択。
■ブートディスク
変更を押下して情報を入力する。
・オペレーティング システム
自身が使いやすいものを選択。
今回はCentOSを選択。
なおプレミアムイメージ(RHELなど)は無料枠対象外のようです。
詳しくは以下を参照。
Images | Compute Engine Documentation | Google Cloud
・バージョン
「オペレーティングシステム」と同様。
今回はCentOS7を選択。
・ブートディスクの種類
無料枠は「標準の永続ディスク」を選択します。
また、サイズは30GBまでです。
今回は20GBを選択。
・ID と API へのアクセス
無料枠にどう関わってくるのか不明。
今回はでデフォルトのまま。
・ファイアウォール
無料枠には関係ない。
今回は自身の学習環境などで一旦インターネットからの通信を許可していない。
あとから自身のIPからのみ通信を有効化する予定。
ひとまずインスタンスが生成されたことが確認できればOKです。
ちなみに今回は外部IPを固定していないので、停止起動すると外部IPが変わります。
この辺はAWSと同じで固定させる場合は一つに限り(?)インスタンスを起動していれば無料で使用できるようです。
ブラウザから操作確認する
GCPにはブラウザ上でサーバなどにSSH接続できるGoogle Cloud Shellというツールが備わっています。
まずはブラウザ上から操作できることを確認します。
管理コンソール上の対象インスタンスからSSHを選択します。
特に設定なども不要ですぐにログインできます。
一般ユーザはメールアドレスから自動で作成されるようです。
特に設定もせずに速攻で使用できるのでこれは便利ですね。
外部SSH(teraterm)での接続
GCPのコンソールから接続できることが確認できたので、ホストマシンからteratermで接続できるようにします。
ホストマシンにteratermがインストールされていることを前提としています。
鍵の生成(teraterm@ホストマシン)
ホストマシンのteratermから鍵を生成します。
とりあえず生成を押下します。
コメント欄には接続を行うユーザ名を入力します。
※メアドバレ防止のために新規登録したユーザでログインします。
公開鍵と秘密鍵をそれぞれ任意の場所に保存します。
※以下、あくまで私の環境ではですが注意点、もしかしたら環境によって変わるかもしれません。
・パスフレーズは空欄で生成する。
⇒設定すると接続時に鍵を指定した際にteratermで読み込めなかった。
・bcrypt KDF形式のチェックを付けたままにする
⇒外すと同じく鍵の読み込み時にエラーになった。
GCEインスタンスの設定
ここからは一旦、GCE側の設定になります。
対象のGCEインスタンスを選択して編集ボタンを押下。
編集画面からSSH認証鍵の項目を探します。
先ほど生成した「公開鍵」(id_rsa.pub)をテキストなどで開きコピーして貼り付けて保存を押下します。
保存して登録されてれば大丈夫そう。
teratermからの接続
あとは普段使用している人なら普通に入力するだけです。
ホストにGCEの外部IPアドレスを入力してOK。
接続ユーザのユーザ名とパスワードを入力。
秘密鍵に先ほど生成した秘密鍵(id_rsa)を指定する。
確かに生成したGCEインスタンスに接続できれています。
あとは使用する用途に応じてご自由に。
ファイアウォールの設定
設定は任意です。
前提として、GCEの方にHTTP接続に対して何かしらの返答を行うようにしてある必要があります。
私の場合はDockerをインストールしてNginxのコンテナを80番ポートで起動しました。
別の方法やファイアウォールの設定のみをおこなうでもいいと思います。
GCEのファイアウォール設定
GCEの編集画面からhttp接続を許可します。
インスタンス生成時にも設定できるのでそちらで設定済みの場合には今する必要はありません。
対象インスタンスの編集画面でhttp接続を許可して保存します。
この時点でブラウザから接続ができるようになっていることを確認します。
とりあえずこれで接続ができることはOK。
VPCのファイアウォール設定
なんとなく設定などを見た感じだと別の概念として存在しているというよりはファイアウォール自体の設定はVPCでして、GCEインスタンスにタグを設定してVPCのファイアウォールを適用している感じをうけました。
先ほどのGCEインスタンスでHTTP接続を許可するとVPCのファイアウォールに許可をする設定が追加されます。
このままでよければこれで終了となりますが、接続元が指定されていないのであらゆる送信元からのHTTP接続が許可された状態になっています。
私は自身の学習にしか使用しないので、自分のIPからのみ接続できるように設定しました。
まず自身のIPアドレスを以下のようなサイトで調べます。
その後、対象のファイアウォール(default-allow-http)の編集画面から設定します。
ソースIPの範囲を設定します。
GCP側からの設定例ではCIDR形式の範囲となっていますが、特定のIPアドレスのみを許可する場合にはそのままIPアドレスを入力してあげればOKです。
設定を保存して再度ブラウザから接続して接続が拒否されず表示されればOK。
これは完全に上記の範囲外ですが、私は以下のプロトコル(ポート)についても自身のIPからのみ接続を許可するように設定を変更しておきました。
・https(443)
・icmp
・tcp:3389
・ssh(22)
なお、「default-allow-internal」についてはGCP内部の通信用だと思うのでそのままにしています。
ーーーーーーー
これでサーバ起動は完了。あとは用途に合わせて自由に使いましょう。