2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 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

終わりに

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

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

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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?