プライベート GCE インスタンスへの接続
はじめに
この記事は、
Connecting to private GCE instances
という動画を参考に、『実際にやってみた』という記事になります。
この記事で実施する事
- GCP内のマーケットプレイスを利用して、
wikiのサンプルページをデプロイする。 - wikiのサンプルページを非公開にして、
公共のインターネットからアクセスできないようにする。 - サーバレスVPCコネクタをデプロイする。
- 非公開のwikiのサンプルページへリクエストを送る。
以下はその必要となる大まかな構成になります。
マーケットプレイスを利用して、サンプルwikiをデプロイする。
GCPコンソールからマーケットプレイス
を経由して、
スクショ内の Media Wiki packaged by Bitnami
を選択。
『使ってみる』を実行して、公共のサービスとしてデプロイしてください。
途中、Agreements(協定)画面が表示されますが、
そのまま、利用規約へ同意してください。
料金プランについては、デプロイの画面で概算を確認することができます。
『利用規約に同意しました』と表示されるので続けてデプロイを実行。
Wikiのデプロイに必要なAPIを有効化してください。
wikiのデプロイ構成は、下記を参照。
Deployment Name:mediawiki-private
または 任意の名前
Zone:asia-northeast2-b
を入力および選択。
その他はデフォルトのまま、デプロイを続けてください。
デプロイが完了すると、警告が表示されますが、
これはBeta版のリソースを使用しているが問題ないかという
確認の警告となる為、ここでは気にしないで大丈夫です。
Site address
をクリックして、サンプルwikiのページが開けば、デプロイは完了。
wikiのサンプルページ
wikiのサンプルページへ公共のインターネットから接続できないようにする。
GCPコンソールを開いて、ナビゲーションメニューから Compute Engine
をクリック。
wikiがデプロイされているVMインスタンスから編集画面へ移動。
ネットワークインターフェースの編集から、
外部IPv4アドレスを『なし
』に設定を変えて、保存を実行してください。
外部IPアドレスの表示が消え、内部IPアドレスからもwikiのページへ
飛ぶことができなければ、Wikiのインスタンスは存在しますが、
外部の公共のインターネットからは切り離されている状態になっています。
サーバレスVPCコネクタをデプロイする。
GCPコンソールのナビゲーションメニューから
VPCネットワーク
→ サーバレスVPCアクセス
へ移動。
下記の条件でサーバレスVPCコネクタ
をデプロイしてください。
名前:connector
リージョン:asia-northeast2
ネットワーク:default
サブネット:カスタムIP範囲
(10.8.0.0/28
)
を入力および選択して、その他はデフォルトで『作成』を実行してください。
非公開のwikiのサンプルページへリクエストを送る。
ここでは、非公開となり公共のインターネットから
アクセスができなくなったwikiのサンプルページに対して、
簡単なリクエストを飛ばす為の実装を書きます。
非公開となったCompute Engine
のリソースに対して、
リクエストを送るには、サーバレスVPCコネクタ
を経由する必要があります。
リクエストを送る方法は、Cloud Functions
を選択します。
下記の条件でCloud Functions
をデプロイしてください。
関数名:function-private
リージョン:asia-northeast2
トリガータイプ:HTTP
認証:未認証の呼び出しを許可
を入力および選択。
なお、動作確認が目的ですので、
今回は、IAMでの権限管理を行いません。
詳細セクションをさらに開いて、『接続
』タブへ移動して、
先程、作成した サーバレスVPCコネクタ
を選択してください。
これで Cloud Functions
からのすべてのトラフィックが、
先程、設定したサーバレスVPCコネクタ
を経由して、
Compute Engine
の プライベートIPアドレスにアクセスします。
そのプライベートIPアドレスは、Cloud Functions
の構成中の
コードデプロイのステップで記述します。
下記は、そのコードデプロイのサンプルになります。
ランタイム:Python3.8
エントリポイント:get_mediawiki
import urllib
def get_mediawiki(request):
try:
url = "http://[プライベートアドレス]/rest.php/v1/page/Main_Page/history"
req = urllib.request.Request(url)
response = urllib.request.urlopen(req)
return response.read()
except Exception as e:
print(e)
return str(e)
最後に、CloudFunctions
からサーバレスVPCコネクタ
を経由して、
MediaWikiサーバーのREST API
を呼び出せるか確認します。
Cloud Function
トリガーを実行。
wikiのREST API
を呼び出す事ができれば成功。
終わりに
今回の記事は、動画を視聴しまして、
実際に『手を動かしてみた』という内容でまとめました。
非公開となり、公共のインターネットからの接続が切られた
リソースに対して、アクセスするには、どのようなアーキテクトが
必要であるのか、学んでみたい方は、参考にしていただけると幸いです。
あとで『じっくり読みたい』、『繰り返し読みたい』と
思ってくれましたら、『ストック
』へ登録、
この記事が読まれている方にとって、
参考になる記事となりましたら、『いいね
』を
付けていただけますと、励みになりますので、
よろしくお願いします。
Discussion