normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

仮想ネットワークに参加した 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 に対して疎通を確認する。以下の画面が表示されれば対応は完了だ。
f:id:waritohutsu:20150716160840p:plain