🔗

プライベート GCE インスタンスへの接続

2023/11/02に公開

はじめに

この記事は、
 Connecting to private GCE instances
という動画を参考に、『実際にやってみた』という記事になります。

この記事で実施する事

  • GCP内のマーケットプレイスを利用して、
    wikiのサンプルページをデプロイする。
  • wikiのサンプルページを非公開にして、
    公共のインターネットからアクセスできないようにする。
  • サーバレスVPCコネクタをデプロイする。
  • 非公開のwikiのサンプルページへリクエストを送る。

以下はその必要となる大まかな構成になります。
image.png

マーケットプレイスを利用して、サンプルwikiをデプロイする。

GCPコンソールからマーケットプレイス を経由して、
スクショ内の Media Wiki packaged by Bitnami を選択。

marketprace-search.png

marketprace-wiki.png

『使ってみる』を実行して、公共のサービスとしてデプロイしてください。
marketprace-used.png

途中、Agreements(協定)画面が表示されますが、
そのまま、利用規約へ同意してください。

料金プランについては、デプロイの画面で概算を確認することができます。
marketprace-agreements.png

『利用規約に同意しました』と表示されるので続けてデプロイを実行。
marketprace-agreements-decision.png

Wikiのデプロイに必要なAPIを有効化してください。
marketprace-api-check.png

wikiのデプロイ構成は、下記を参照。

Deployment Name:mediawiki-private または 任意の名前
Zone:asia-northeast2-b
を入力および選択。

その他はデフォルトのまま、デプロイを続けてください。marketprace-deploy.png

デプロイが完了すると、警告が表示されますが、
これはBeta版のリソースを使用しているが問題ないかという
確認の警告となる為、ここでは気にしないで大丈夫です。
marketprace-beta.png

Site address をクリックして、サンプルwikiのページが開けば、デプロイは完了。
marketprace-site-address.png

wikiのサンプルページ
marketprace-deploy-wiki.png

wikiのサンプルページへ公共のインターネットから接続できないようにする。

GCPコンソールを開いて、ナビゲーションメニューから Compute Engine をクリック。
wikiがデプロイされているVMインスタンスから編集画面へ移動。

ネットワークインターフェースの編集から、
外部IPv4アドレスを『なし』に設定を変えて、保存を実行してください。

computeengine_network.png

外部IPアドレスの表示が消え、内部IPアドレスからもwikiのページへ
飛ぶことができなければ、Wikiのインスタンスは存在しますが、
外部の公共のインターネットからは切り離されている状態になっています。

computeengine_private_network.png

サーバレスVPCコネクタをデプロイする。

GCPコンソールのナビゲーションメニューから
VPCネットワークサーバレスVPCアクセス へ移動。

computeengine_vpc.png

下記の条件でサーバレスVPCコネクタをデプロイしてください。

名前:connector
リージョン:asia-northeast2
ネットワーク:default
サブネット:カスタムIP範囲10.8.0.0/28
を入力および選択して、その他はデフォルトで『作成』を実行してください。

computeengine_vpc_create.png

非公開のwikiのサンプルページへリクエストを送る。

ここでは、非公開となり公共のインターネットから
アクセスができなくなったwikiのサンプルページに対して、
簡単なリクエストを飛ばす為の実装を書きます。

非公開となったCompute Engineのリソースに対して、
リクエストを送るには、サーバレスVPCコネクタ を経由する必要があります。

リクエストを送る方法は、Cloud Functions を選択します。
cloudfunction_used.png

下記の条件でCloud Functionsをデプロイしてください。

関数名:function-private
リージョン:asia-northeast2
トリガータイプ:HTTP
認証:未認証の呼び出しを許可
を入力および選択。

cloudfunction_create_1.png

なお、動作確認が目的ですので、
今回は、IAMでの権限管理を行いません。

詳細セクションをさらに開いて、『接続』タブへ移動して、
先程、作成した サーバレスVPCコネクタ を選択してください。

cloudfunction_create_2.png

これで 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)

cloudfunction_code_deploy.png

最後に、CloudFunctionsからサーバレスVPCコネクタを経由して、
MediaWikiサーバーのREST APIを呼び出せるか確認します。

Cloud Function トリガーを実行。
cloudfunction_trigger.png

wikiのREST APIを呼び出す事ができれば成功。
cloudfunction_rest_api.png

終わりに

今回の記事は、動画を視聴しまして、
実際に『手を動かしてみた』という内容でまとめました。

非公開となり、公共のインターネットからの接続が切られた
リソースに対して、アクセスするには、どのようなアーキテクトが
必要であるのか、学んでみたい方は、参考にしていただけると幸いです。

あとで『じっくり読みたい』、『繰り返し読みたい』と
思ってくれましたら、『ストック』へ登録、
この記事が読まれている方にとって、
参考になる記事となりましたら、『いいね』を
付けていただけますと、励みになりますので、
よろしくお願いします。

Discussion