技術ブログ株式会社エーピーコミュニケーションズの技術ブログです。エーピーコミュニケーションズの技術ブログです。>はじめにこんにちは、IaC技術推進部の山路と申します。Cloudを利用する場合のユースケースの一つについて紹介します。CloudとAzureをVPNで接続する環境を、Terraformを用いて構築する例も紹介します。Cloudは、アリババグループの運営しているクラウドプロバイダーサービスです。アリババグループではEコマースを中心とした多数の企業が含まれており、日本でもなじみのあるものといえばAliPayがまず挙げられるかと思います。Groupで利用・開発された巨大なインフラストラクチャサービスを利用することができます。Cloudには以下に記載するように様々な特徴が見られます。AWS、Azureに続いて世界第3位のシェアを持つIaaSプロバイダーです。アジア太平洋地域(APAC)では第1位のシェアとなります。Shellからコマンドを実行すると、以下のように出力されます。上記の特徴を眺めたとき、真っ先に浮かぶユースケースとしては中国国内へのビジネス展開を行う際に利用する場合が挙げられるかと思います。中国向けにビジネスを展開する場合、障壁となる要素がいくつか存在します。Provider)と呼ばれる中国特有のライセンスを取得する必要があります。このライセンスを取得するには中国国内企業が発行することのできる許可証が必要となり、現地法人や中国企業との提携を結ぶ必要があります。日中間でのネットワークが不安定であるため、日中間で専用線を設置することを検討する必要もあります。中国向けWebサイトの基礎知識1ICPライセンスって何?このような障壁も影響し、多くのクラウドベンダーでは中国向けビジネスを展開することが難しくなってしまいます。代表的な障壁としては以下のようなものが挙げられます。サーバー:多くのベンダーは中国国内で利用できるリージョンが存在しません(香港は除く)。中国国内にリージョンを所有するベンダーは、中国企業と提携することでサービスを提供しており、中国専用のアカウントや管理コンソール画面から操作する必要があります。ネットワーク:中国国内外での通信は基本的にインターネット経由となります。中国リージョンと日本リージョンとの仮想ネットワーク間通信を行う場合、仮想ネットワーク間でのピアリング接続は利用することができません。専用線を利用する場合も、利用できる専用線サービスに制限がある場合があります。法律:ICPライセンスの申請に対するサポートは多くのベンダーでは実施しておらず、利用者が別途申請する必要があります。Cloudを利用することで、上記障害の多くを克服することが可能になります。サーバー:中国国内に多くのリージョンを所有しています。中国国内・国外のリージョンを共通のアカウントで利用することができます。Cloudのネットワークインフラを利用して実現することができます。Connectという専用線サービスも利用することができます。CloudにはICPライセンスの登録をサポートするサービスが存在します。Cloudは有効な選択肢の一つとなりそうです。Cloudとを組み合わせて利用したいというケースが多いと予想されます。このように複数のクラウド環境を利用する、いわゆるマルチクラウドを扱う上では、単一のクラウド環境を利用する場合と比べ、様々な問題が発生します。これには各クラウドの仕様の把握やクラウド間ネットワークの設計に加え、システムの構成管理に対しても考慮が必要となります。システムの構成管理については、管理対象のクラウドが複数になることで運用が煩雑になります。新しいリソースを作成する際に管理ポータル画面から処理を行うと、2つ以上のWebブラウザ画面を行き来しながら作業するため、作業ミスの発生リスクも高まります。考慮漏れや作業ミスが発生する可能性も上昇します。後者に関してはマルチクラウドに限らない問題ですが、複数のクラウドが管理対象となれば、設計漏れや作業ミスなどが発生する可能性が高くなることは容易に想像できます。Cloudを含むマルチクラウド環境の構築を試してみました。マルチクラウド環境におけるパートナーとシナリオの選択TerraformとはTerraformはHashiCorp社が開発しているインフラストラクチャの構成管理・リソース作成ツールです。Terraformではtfファイルに記載された内容に基づいて、クラウドリソースやアプリケーション環境などの管理を行うことができます。Code)を実現する助けにもなります。マルチクラウドの構成管理にTerraformを利用することで得られるメリットの一つは、複数のクラウドにまたがるインフラの定義をTerraformに集約することができる点です。Terraformは現時点でも100以上のクラウドベンダーやサービスに対応しており、これらをtfファイル上で同じようなリソースとして扱うことができます。これにより、複数のクラウドを構築・管理するうえでの相互運用性に役立つことが期待できます。TerraformのようなIaCツールを利用することで得られるメリットの一つに、メンバー間の技術習熟度の差を埋めることに役立つ点があります。Terraformでは基本的にtfファイルで定義したものしかリソースが作成されないため、tfファイルの定義が正しければ想定通りのシステムが構成されることが期待できます。レビューの際も、レビューの対象となるものは基本的にtfファイルの内容に絞られるので、設計・構築の考慮漏れやミスの発生する確率を軽減することができます。applyという共通のコマンドを実行するだけなので、構築時の作業ミスが発生する余地はないと言えます。Cloudにも対応しています。GUIという機能が備わっています。CloudのWebコンソール画面からTerraformを操作し、作成するリソースを定義することができる機能になります。Cloudリソースを管理するうえでTerraformが利用できることが期待できます。Cloudを含むマルチクラウド環境を管理することを考えた場合、Terraformを利用することは有力な選択肢の一つになるのではないかと考えています。Cloudを含むマルチクラウド環境の構築について紹介します。Cloudを利用した環境の構築例です。ここではシンプルに、以下のリソースを含むような環境を構築します。デプロイ作業それでは実際の構築手順になります。今回は以下のようなtfファイルを用いてリソースの作成を行います。applyコマンドを実行して作成を開始します。今回はoutputとしてECSインスタンスに付与されたパブリックIPアドレスを指定し、リソースの作成完了後に表示されるアドレスを指定してSSH接続を行えるかの確認を行いました。47.74.39.220上記のようにリソース柵瀬宇井が完了したので、Outputs:に出力されたIPアドレスにSSH接続を行います。CoreECSへのSSHによるアクセスが確認できたので、作成したリソースを削除します。Cloudに加えてAzureの環境を用意する場合を紹介します。Gatewayを双方の環境に用意し、接続するような構成とします。最終的には各クラウド上の仮想マシンから対向へのPing疎通が確認できることをゴールとします。Groupで設定する各ルール。仮想ネットワークのアドレスを分割して利用。パブリックIPアドレス。今回は以下の3つのtfファイルを利用して、上記リソースの作成を行います。少々長いのでファイルの内容は折りたたんでおります。applyコマンドを実行することで、リソースの作成が行われます。上記tfファイルを利用した場合、1点注意したい点があります。applyコマンドを2回実行する必要があります。これについては後述いたします。今回もoutputには仮想マシンに付与されたパブリックIPアドレスを指定しており、リソースの作成完了後に各仮想マシンにSSH接続を行います。対向の仮想マシンの持つプライベートIPアドレス宛にPingコマンドを実行し、Ping応答が返ってくるかを確認しました。Cloud・Azureの仮想マシンにSSHでログインし、それぞれ対向の仮想マシンに対してPing疎通ができるかを確認します。~]$上記のようにPing疎通できることが確認できました。最後にリソースを削除して終了します。applyコマンド実行時に以下のようなエラーが発生するからです。GatewayのパブリックIPアドレスがうまく渡せていないために発生しています。IPリソースは作成されております。IPが付与されていることが確認できます。applyコマンドを実行すると、今度は処理が最後まで実行されます。52.185.130.132上記エラーに関連する情報として、AzureのパブリックIPアドレスはallocated_methodがdynamicの場合、それらがデバイスにアタッチされるまではIPアドレスが割り振られないという仕様があります。これを回避するためにTerraform公式ドキュメントのこちらの情報をもとに、以下の2つの方法を試しましたが、現時点では解決できておりません。このエラーについての原因は現在調査中で、原因と対応が分かった際は更新いたします。applyコマンドを再実行する形で良しとしました。本番環境を管理する場合は当然色々と考えなければなりません。Gatewayとその周辺リソースは別のtfファイルで管理して個別に実行する、といった形で運用を行うのも一つの方法かと思います。Cloudの環境構築をTerraformで実行することをメインに、さらにマルチクラウド環境をTerraformで作成することを紹介しました。最後に検証を行う中での気づきなどを記しておきます。マルチクラウドを扱う難しさ私は今回初めてTerraformで複数のクラウドプロバイダーを対象にリソースを作成することを試したのですが、その中でいくつか難しいと感じる場面に遭遇しました。クラウドプロバイダー間の仕様の違いこれは当然のことなのですが、クラウドプロバイダーにはそれぞれ特有の仕様があり、同じ機能を実装する際に異なるリソースを用意する必要も多々あります。CloudとAzureでは、仮想マシンを1台動かせる環境を用意するのに作成が必要なリソースは、以下のように異なります。仮想ネットワークのアドレスを分割して利用。パブリックIPアドレス。仮想マシンこのような違いは、ベンダー間の仕様が異なることだけでなく、それに関連するTerraformのリソース定義の仕方にも影響します。これらの仕様の違いを把握することは、マルチクラウド環境を管理するためには当たり前のように必要となる知識ですが、扱うクラウドプロバイダーの数が増えることにより習得する範囲も増えるため、すぐに習得するのは難しいだろうと思います。各プロバイダーの仕様の違いを抑えるだけでなく、それらを組み合わせて利用したときにもトラブルが発生しました。Gatewayに関連するエラーが最も代表的な例ですが、他のリソースが所持するデータを参照して作成されるリソースの場合、参照元のリソースが作成されていないタイミングでリソースの作成を開始してしまい、エラーが発生する場合があります。このエラーは、作成するリソース間での作成完了のタイミングが異なることが影響します。Gatewayは作成完了までにおよそ45分ほどかかり、他のリソースと作成完了のタイミングが合いません。それに加えて、Terraformが返すリソース作成完了のタイミングと、実際のクラウドプロバイダー側でのリソース作成完了との間にギャップがある場合もあります。このようなリソース間での作成タイミングの問題を防ぐため、対象のリソース定義にdepends_onパラメータを与えることで、依存関係にあるリソースを明示的に指定することができます。Terraformのフォルダ構成をどうする?今回マルチクラウド環境を用意する際、本記事内に載せたtfファイルのほかに、各リソースをモジュールとして別フォルダに分け、ひとつのtfファイルからそれらモジュールを呼び出す形で各リソースを作成する構成も試していました。以下にフォルダ構成の概要図を記載します。複数のファイルやフォルダに分ける理由として、Terraformの各リソースをモジュールとしていくつかの塊に分けることで、tfファイルの可読性の向上や学習コストを抑制することが望めます。してインフラ環境やそれらを定義するコードの管理コストを抑える効果を期待できます。これまでTerraformのフォルダ構成については、Terraformの公式ドキュメントをはじめ、様々な形で資料として公開されています。マルチクラウドに関する記載はまだそれほど多くなく、実際設計をする段階でどのようにフォルダを分けるべきかは検討が必要になります。今回はクラウドプロバイダー毎にフォルダを分け、さらにその中でいくつかのモジュールに分けてみましたが、例えば本番環境と検証環境はどのように分けて管理するか(フォルダを分けるのか、Workspace機能を利用するのか)、変更が頻繁に走るリソースとそれ以外のリソースは同じフォルダ階層に置くべきなのか、など、まだまだ検討しなければならない要素はありそうです。Engineeringの導入支援、データ&AI基盤に関連するサービスを提供しています。わたしたちは「エンジニアとお客様を笑顔にする」というVisionを掲げ、インフラエンジニアの未来を創るNeoSIerとして工夫と挑戦を行い続けます。読者になるこのブログについて引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。