NoSQL クライアント サーバーは、次の 2 つの Compute Engine インスタンスを構成して作成します。
- サーバー - MongoDB を実行する
- クライアント - MongoDB と対話するカスタム Go アプリケーションを実行し、MongoDB からデータを消費する API を公開する
スタートガイド
Cloud Shell でソースコードのコピーへの次のリンクをクリックします。その後、1 つのコマンドでプロジェクト内のアプリケーションの作業コピーがスピンアップされます。
NoSQL クライアント サーバー コンポーネント
NoSQL クライアント サーバー アーキテクチャでは、1 つの主要プロダクトを使用します。以下に、関連動画、プロダクト ドキュメント、インタラクティブ チュートリアルへのリンクを含めた、プロダクトの詳細を示します。動画 | ドキュメント | チュートリアル | |||
---|---|---|---|---|---|
Compute Engine | Compute Engine は Google Cloud の仮想技術です。VM のさまざまな構成を起動して、どのようなコンピューティング ニーズにも対応できます。 |
スクリプト
インストール スクリプトでは、go
と Terraform CLI ツールで記述された実行ファイルを使用して、空のプロジェクトを作成し、そこにアプリケーションをインストールします。出力は、機能するアプリケーションとロード バランシング IP アドレスの URL になります。
./main.tf
サービスを有効化する
Google Cloud サービスは、デフォルトではプロジェクトで無効になっています。ソリューションを使用するには、以下を有効にする必要があります。
- Compute Engine — 仮想マシンとネットワーク
variable "gcp_service_list" {
description = "The list of apis necessary for the project"
type = list(string)
default = [
"compute.googleapis.com",
]
}
resource "google_project_service" "all" {
for_each = toset(var.gcp_service_list)
project = var.project_number
service = each.key
disable_dependent_services = false
disable_on_destroy = false
}
ファイアウォール ルールを作成する
ファイアウォールでポート 80 を開くルールを作成し、http-server
というラベルが付いたすべてのマシンに適用します
resource "google_compute_firewall" "default-allow-http" {
name = "deploystack-allow-http"
project = var.project_number
network = "projects/${var.project_id}/global/networks/default"
allow {
protocol = "tcp"
ports = ["80"]
}
source_ranges = ["0.0.0.0/0"]
target_tags = ["http-server"]
}
サーバー インスタンスを作成する
サーバーとして機能する VM を起動し、MongoDB を提供する
# Create Instances
resource "google_compute_instance" "server" {
name = "server"
zone = var.zone
project = var.project_id
machine_type = "e2-standard-2"
tags = ["http-server"]
boot_disk {
auto_delete = true
device_name = "server"
initialize_params {
image = "family/ubuntu-1804-lts"
size = 10
type = "pd-standard"
}
}
network_interface {
network = "default"
access_config {
// Ephemeral public IP
}
}
metadata_startup_script = <<SCRIPT
apt-get update
apt-get install -y mongodb
service mongodb stop
sed -i 's/bind_ip = 127.0.0.1/bind_ip = 0.0.0.0/' /etc/mongodb.conf
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 27017
service mongodb start
SCRIPT
depends_on = [google_project_service.all]
}
クライアント インスタンスを作成する
クライアントとして機能する VM を起動し、MongoDB のデータを消費する
resource "google_compute_instance" "client" {
name = "client"
zone = var.zone
project = var.project_id
machine_type = "e2-standard-2"
tags = ["http-server", "https-server"]
boot_disk {
auto_delete = true
device_name = "client"
initialize_params {
image = "family/ubuntu-1804-lts"
size = 10
type = "pd-standard"
}
}
network_interface {
network = "default"
access_config {
// Ephemeral public IP
}
}
metadata_startup_script = <<SCRIPT
add-apt-repository ppa:longsleep/golang-backports -y && \
apt update -y && \
apt install golang-go -y
mkdir /modcache
mkdir /go
mkdir /app && cd /app
curl https://raw.githubusercontent.com/GoogleCloudPlatform/golang-samples/main/compute/quickstart/compute_quickstart_sample.go --output main.go
go mod init exec
GOPATH=/go GOMODCACHE=/modcache GOCACHE=/modcache go mod tidy
GOPATH=/go GOMODCACHE=/modcache GOCACHE=/modcache go get -u
sed -i 's/mongoport = "80"/mongoport = "27017"/' /app/main.go
echo "GOPATH=/go GOMODCACHE=/modcache GOCACHE=/modcache HOST=${google_compute_instance.server.network_interface.0.network_ip} go run main.go"
GOPATH=/go GOMODCACHE=/modcache GOCACHE=/modcache HOST=${google_compute_instance.server.network_interface.0.network_ip} go run main.go &
SCRIPT
depends_on = [google_project_service.all]
}
まとめ
実行すると、2 つの Compute Engine インスタンスで MongoDB を使用して実行されるクライアント サーバー API が作成されます。さらに、環境に合わせてソリューションを変更または拡張するためのコードもすべて用意されています。