仮想ネットワークに参加した Worker ロールの Java アプリに ILB 経由で通信する
前回記載した Eclipse を利用して Worker ロールの Java アプリを仮想ネットワークに参加させる - 割と普通なブログ
の記事では Worker ロールの Java アプリを仮想ネットワークに配置したが、疎通自体はクラウドサービスの FQDN(xxxx.cloudapp.net)でアクセスするため「閉域」での疎通ではなかった。
今回は前回の記事を一歩進めて、閉域での通信をする Azure 内部負荷分散 (ILB) を利用する方法を紹介する。
設定ファイルの編集
Worker ロール(はもちろん Web ロールを含むクラウドサービス)を仮想マシンに参加させ、ILB の設定をする場合は ServiceConfiguration.cscfg と ServiceDefinition.csdef の作成が必要になる。記載例は以下になる。
- ServiceConfiguration.cscfg
<?xml version="1.0" encoding="UTF-8"?> <ServiceConfiguration xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" serviceName="AzureDeploymentProject"> <Role name="WorkerRole1"> <Instances count="2" /> <ConfigurationSettings> </ConfigurationSettings> <Certificates> </Certificates> </Role> <NetworkConfiguration> <VirtualNetworkSite name="java-vnet" /> <AddressAssignments> <InstanceAddress roleName="WorkerRole1"> <Subnets> <Subnet name="Subnet-Tomcat" /> </Subnets> </InstanceAddress> </AddressAssignments> <LoadBalancers> <LoadBalancer name="Tomcat-ILB"> <FrontendIPConfiguration staticVirtualNetworkIPAddress="10.0.0.200" subnet="Subnet-Tomcat" type="private" /> </LoadBalancer> </LoadBalancers> </NetworkConfiguration> </ServiceConfiguration>
LoadBalancer タグ内で、ロードバランサ-を定義していることが分かると思う。
- ServiceDefinition.csdef
<?xml version="1.0" encoding="utf-8" standalone="no"?> <ServiceDefinition xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" name="AzureDeploymentProject"> <WorkerRole name="WorkerRole1" vmsize="Small"> <Startup> <!-- Sample startup task calling startup.cmd from the role's approot folder --> <Task commandLine="util/.start.cmd .startup.cmd" executionContext="elevated" taskType="simple"/> </Startup> <Runtime executionContext="elevated"> <EntryPoint> <!-- Sample entry point calling run.cmd from the role's approot folder --> <ProgramEntryPoint commandLine="run.cmd" setReadyOnProcessStart="true"/> </EntryPoint> </Runtime> <Imports> </Imports> <Endpoints> <!-- <InputEndpoint localPort="8080" name="http" port="8080" protocol="tcp"/> --> <InputEndpoint loadBalancer="Tomcat-ILB" localPort="8080" name="internal-http" port="8080" protocol="tcp"/> </Endpoints> </WorkerRole> </ServiceDefinition>
こちらでは、InputEndpoint タグのに ServiceConfiguration.cscfg で定義したロードバランサを割り当てている。
Microsoft Azure(Worker ロール)上にデプロイ
仮想ネットワーク上に Windows Server 2012 R2 のインスタンスを配置し、ILB に対して疎通を確認する。以下の画面が表示されれば対応は完了だ。