SREチームの八代です。Connectなどのサービスを利用し、ハイブリッドクラウド環境での運用を改善する取り組みを続けてきています。NEGという新しい技術が発表され、GCLBがオンプレミス環境あるいは他のパブリッククラウドに拡張することができるようになりました。NEGという技術を取り入れ、オンプレミス上に構築したアプリケーションをGCLBで公開できるようにしたので、それについて記事を書こうと思います。Serviceの指定その他のリソース注意点おわりにはじめにこの記事は、以下のような人に向けて書きます。NEGリソースをTerraformで管理したいGCLBを利用してアプリケーションを公開することで、以下のような機能が利用できるようになります。Armorを利用したIPベースのアクセス制限やWAFの適用、IAPでの社内システムの公開などをよく行なっているのですが、非常に便利に使わせてもらっています。今回、オンプレのアプリケーションでも同様の仕組みが利用できるようになったことで、運用コストの削減が実現できると感じているので、興味がある方はぜひ読んでみてください。GCLBのアーキテクチャGCPの公式ドキュメントに記載されている、GCLBのアーキテクチャは以下のようになっています。serviceに紐づけるbackendにNON_GCP_PRIVATE_IP_PORTのエンドポイントを指定できるようになっています。詳しいアーキテクチャや、gcloudを利用したGCLBの構築手順などは、以下のブログ記事で詳しく記載されているので、参考にしてみてください。NEGおよびGCLBを構築するための内容を記載していきます。今回は、以下の要件を満たすGCLBを構築しました。NEGは3ゾーンで冗長化するマネージドSSL証明書を利用するGCLBのアーキテクチャ図からも読み取れますが、GCLBを構成するために必要なGCPリソースの数が多く、ベタ書きだとかなり冗長になるため、moduleに切り出して作成していくこととします。GCLBの作成にあたり必要な以下のリソースは本筋と離れるため、作成済みであるものとします。Armorによるセキュリティポリシーmoduleの呼び出しまず、全体像のイメージを持っていただくため、moduleの呼び出し側を記載します。中がMapになっており、各バックエンドサービスへの接続情報を持った構造体が並んでいるところがポイントです。この中で、ループを回すような処理を行い、実際のリソースを作成していきます。今回は、GCPのリソース種によっては、最大3つの要素をループで回す必要が出てきます。NEGに実際のエンドポイントを追加するためのリソース(google_compute_network_endpoint)を追加するには、以下の3要素でループを回す必要があります。ポートterraformでは、for_eachを利用した多重ループは単純にはできないので、今回はflatten関数を利用し、多重ループ相当の処理を行いました。flatten関数を利用すると、複数の配列でループを回し、ループ中の要素を取り出して新しい構造体のMapを得ることができます。詳しくは公式ドキュメントを参照してみてください。www.terraform.io今回は、ループを回すために3つのlocal変数を定義しました。]])}上記の定義をすることで、リソース作成の記述で多重ループを実現することができます。NEGの作成は以下のように記述します。バックエンドサービスごとにNEGを作成することができます。NON_GCP_PRIVATE_IP_PORTを指定しています。google-betaを指定しています)negの要素には、each.value以下でアクセスすることができます。negの部分については、次の項で説明します。次に、先ほど作成したNEGにエンドポイントを追加する記述を記載します。each.value.backend_endpoint}先ほど作成したNEGのリソースの指定の仕方がポイントで、neg["${each.value.service.name}.${each.value.zone.displayName}"]のようにアクセスしています。これは、前項で記述したfor_each部分で、リソースにアクセスするためのキーをこのように指定しているためです。}以上で、NEGの作成が完了したので、実際にGCLBで利用できるよう記述していきます。Serviceは以下のように記述しました。NEGを作成し、GCLBで利用する記述を記載しました。NEGに関わる部分だけを記載しましたが、他にも多くリソースを作成しているので、モジュールの中身を一式記載しておきますので、作成を考えている方は参考にしてみてください。NEGをTerraformで作成する場合は、リソースを作成するProjectと同じVPCネットワークを指定する必要があります。gcloudコマンドを利用して作成すると良いと思います。弊社でも共有VPCを別プロジェクトに作成している場合があるので、時間があるときにPRを投げたいなとは思っています。moduleを実装する手順を説明しました。NEGの登場によって、オンプレのアプリケーションでもGCPと同様のセキュリティ対策や運用改善ができるようになり、非常に助かるアップデートだと感じました。個人的には、Terraformで多重ループが発生するなどやや複雑な処理をやってみて、学びがありました。SaaS事業部のSREチームでは、GCP・オンプレミス・AWSなど複数のプラットフォームを利用して、さまざまなプロダクトを運用しているので、このようなハイブリッドクラウド環境の運用改善に携わる機会が多くあります。以下からエントリーをお待ちしております。reserved.引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。