チュートリアル: Amazon EC2 での Windows HPC クラスターのセットアップ
スケーラブルな Windows ハイパフォーマンスコンピューティング (HPC) クラスターは、Amazon EC2 インスタンスを使用して起動できます。Windows HPC クラスターには、Active Directory ドメインコントローラーと DNS サーバー、ヘッドノード、1 つまたは複数のコンピュートノードが必要です。
Amazon EC2 で Windows HPC クラスターをセットアップするには、次のタスクを実行します。
ハイパフォーマンスコンピューティングの詳細については、「AWS でのハイパフォーマンスコンピューティング (HPC)
前提条件
VPC でインスタンスを起動する必要があります。デフォルト VPC を使用する、またはデフォルト以外の VPC を作成することができます。詳細については、『Amazon VPC ユーザーガイド』の「開始方法」を参照してください。
ステップ 1: セキュリティグループを作成する
Tools for Windows PowerShell を使用して、ドメインコントローラー、ドメインメンバーおよび HPC クラスター用のセキュリティグループを作成します。
セキュリティグループを作成するには
-
New-EC2SecurityGroup cmdlet を使用して、ドメインコントローラのセキュリティグループを作成します。出力で、セキュリティグループ ID をメモしておきます。
PS C:\>
New-EC2SecurityGroup -VpcIdvpc-id
-GroupName "SG - Domain Controller" -Description "Active Directory Domain Controller" -
New-EC2SecurityGroup cmdlet を使用して、ドメインメンバーのセキュリティグループを作成します。出力で、セキュリティグループ ID をメモしておきます。
PS C:\>
New-EC2SecurityGroup -VpcIdvpc-id
-GroupName "SG - Domain Member" -Description "Active Directory Domain Member" -
New-EC2SecurityGroup cmdlet を使用して HPC クラスタのセキュリティグループを作成します。出力で、セキュリティグループ ID をメモしておきます。
PS C:\>
New-EC2SecurityGroup -VpcIdvpc-id
-GroupName "SG - Windows HPC Cluster" -Description "Windows HPC Cluster Nodes"
セキュリティグループにルールを追加するには
-
次のルールを作成して、ドメインコントローラセキュリティグループに追加します。プレースホルダのセキュリティグループ ID をドメインメンバーのセキュリティグループの ID で置き換え、プレースホルダの CIDR ブロックをネットワークの CIDR ブロックで置き換えます。
PS C:\>
$sg_dm = New-Object Amazon.EC2.Model.UserIdGroupPairPS C:\>
$sg_dm.GroupId = "sg-12345678
PS C:\>
$r1 = @{ IpProtocol="UDP"; FromPort="123"; ToPort="123"; UserIdGroupPairs=$sg_dm }PS C:\>
$r2 = @{ IpProtocol="TCP"; FromPort="135"; ToPort="135"; UserIdGroupPairs=$sg_dm }PS C:\>
$r3 = @{ IpProtocol="UDP"; FromPort="138"; ToPort="138"; UserIdGroupPairs=$sg_dm }PS C:\>
$r4 = @{ IpProtocol="TCP"; FromPort="49152"; ToPort="65535"; UserIdGroupPairs=$sg_dm }PS C:\>
$r5 = @{ IpProtocol="TCP"; FromPort="389"; ToPort="389"; UserIdGroupPairs=$sg_dm }PS C:\>
$r6 = @{ IpProtocol="UDP"; FromPort="389"; ToPort="389"; UserIdGroupPairs=$sg_dm }PS C:\>
$r7 = @{ IpProtocol="TCP"; FromPort="636"; ToPort="636"; UserIdGroupPairs=$sg_dm }PS C:\>
$r8 = @{ IpProtocol="TCP"; FromPort="3268"; ToPort="3269"; UserIdGroupPairs=$sg_dm }PS C:\>
$r9 = @{ IpProtocol="TCP"; FromPort="53"; ToPort="53"; UserIdGroupPairs=$sg_dm }PS C:\>
$r10 = @{ IpProtocol="UDP"; FromPort="53"; ToPort="53"; UserIdGroupPairs=$sg_dm }PS C:\>
$r11 = @{ IpProtocol="TCP"; FromPort="88"; ToPort="88"; UserIdGroupPairs=$sg_dm }PS C:\>
$r12 = @{ IpProtocol="UDP"; FromPort="88"; ToPort="88"; UserIdGroupPairs=$sg_dm }PS C:\>
$r13 = @{ IpProtocol="TCP"; FromPort="445"; ToPort="445"; UserIdGroupPairs=$sg_dm }PS C:\>
$r14 = @{ IpProtocol="UDP"; FromPort="445"; ToPort="445"; UserIdGroupPairs=$sg_dm }PS C:\>
$r15 = @{ IpProtocol="ICMP"; FromPort="-1"; ToPort="-1"; UserIdGroupPairs=$sg_dm }PS C:\>
$r16 = @{ IpProtocol="UDP"; FromPort="53"; ToPort="53"; IpRanges="203.0.113.25/32
" }PS C:\>
$r17 = @{ IpProtocol="TCP"; FromPort="3389"; ToPort="3389"; IpRanges="203.0.113.25/32
" } -
Grant-EC2SecurityGroupIngress cmdlet を使用して、ドメインコントローラ-のセキュリティグループにルールを追加します。
PS C:\>
Grant-EC2SecurityGroupIngress -GroupId sg-1a2b3c4d
-IpPermission @( $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11, $r12, $r13, $r14, $r15, $r16, $r17 )これらのセキュリティグループのルールの詳細については、Microsoft の記事、「How to configure a firewall for domains and trusts
(ドメインおよび信頼にファイアウォールを構成する方法)」を参照してください。 -
次のルールを作成して、ドメインメンバーのセキュリティグループに追加します。プレースホルダのセキュリティグループ ID をドメインコントローラのセキュリティグループ ID に置き換えます。
PS C:\>
$sg_dc = New-Object Amazon.EC2.Model.UserIdGroupPairPS C:\>
$sg_dc.GroupId = "sg-1a2b3c4d
PS C:\>
$r1 = @{ IpProtocol="TCP"; FromPort="49152"; ToPort="65535"; UserIdGroupPairs=$sg_dc }PS C:\>
$r2 = @{ IpProtocol="UDP"; FromPort="49152"; ToPort="65535"; UserIdGroupPairs=$sg_dc }PS C:\>
$r3 = @{ IpProtocol="TCP"; FromPort="53"; ToPort="53"; UserIdGroupPairs=$sg_dc }PS C:\>
$r4 = @{ IpProtocol="UDP"; FromPort="53"; ToPort="53"; UserIdGroupPairs=$sg_dc } -
Grant-EC2SecurityGroupIngress cmdlet を使用して、ドメインメンバーのセキュリティグループにルールを追加します。
PS C:\>
Grant-EC2SecurityGroupIngress -GroupId sg-12345678
-IpPermission @( $r1, $r2, $r3, $r4 ) -
HPC クラスタのセキュリティグループに追加する次のルールを作成します。プレースホルダのセキュリティグループ ID を HPC クラスタのセキュリティグループの ID で置き換え、プレースホルダの CIDR ブロックをネットワークの CIDR ブロックで置き換えます。
$sg_hpc = New-Object Amazon.EC2.Model.UserIdGroupPair
PS C:\>
$sg_hpc.GroupId = "sg-87654321
PS C:\>
$r1 = @{ IpProtocol="TCP"; FromPort="80"; ToPort="80"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r2 = @{ IpProtocol="TCP"; FromPort="443"; ToPort="443"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r3 = @{ IpProtocol="TCP"; FromPort="1856"; ToPort="1856"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r4 = @{ IpProtocol="TCP"; FromPort="5800"; ToPort="5800"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r5 = @{ IpProtocol="TCP"; FromPort="5801"; ToPort="5801"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r6 = @{ IpProtocol="TCP"; FromPort="5969"; ToPort="5969"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r7 = @{ IpProtocol="TCP"; FromPort="5970"; ToPort="5970"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r8 = @{ IpProtocol="TCP"; FromPort="5974"; ToPort="5974"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r9 = @{ IpProtocol="TCP"; FromPort="5999"; ToPort="5999"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r10 = @{ IpProtocol="TCP"; FromPort="6729"; ToPort="6730"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r11 = @{ IpProtocol="TCP"; FromPort="7997"; ToPort="7997"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r12 = @{ IpProtocol="TCP"; FromPort="8677"; ToPort="8677"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r13 = @{ IpProtocol="TCP"; FromPort="9087"; ToPort="9087"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r14 = @{ IpProtocol="TCP"; FromPort="9090"; ToPort="9092"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r15 = @{ IpProtocol="TCP"; FromPort="9100"; ToPort="9163"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r16 = @{ IpProtocol="TCP"; FromPort="9200"; ToPort="9263"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r17 = @{ IpProtocol="TCP"; FromPort="9794"; ToPort="9794"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r18 = @{ IpProtocol="TCP"; FromPort="9892"; ToPort="9893"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r19 = @{ IpProtocol="UDP"; FromPort="9893"; ToPort="9893"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r20 = @{ IpProtocol="TCP"; FromPort="6498"; ToPort="6498"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r21 = @{ IpProtocol="TCP"; FromPort="7998"; ToPort="7998"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r22 = @{ IpProtocol="TCP"; FromPort="8050"; ToPort="8050"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r23 = @{ IpProtocol="TCP"; FromPort="5051"; ToPort="5051"; UserIdGroupPairs=$sg_hpc }PS C:\>
$r24 = @{ IpProtocol="TCP"; FromPort="3389"; ToPort="3389"; IpRanges="203.0.113.25/32
" } -
Grant-EC2SecurityGroupIngress cmdlet を使用して、HPC クラスタのセキュリティグループにルールを追加します。
PS C:\>
Grant-EC2SecurityGroupIngress -GroupId sg-87654321
-IpPermission @( $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11, $r12, $r13, $r14, $r15, $r16, $r17, $r18, $r19, $r20, $r21, $r22, $r23, $r24 )これらのセキュリティグループのルールの詳細については、Microsoft の記事、「HPC Cluster Networking: Windows ファイアウォールconfiguration
(HPC クラスタネットワーク: Windows ファイアウォール構成)」をご覧ください。 Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで、[Security Groups] を選択します。3 つのセキュリティグループすべてがリストに表示されており、必要なルールがあることを確認します。
ステップ 2: Active Directory ドメインコントローラーをセットアップする
Active Directory ドメインコントローラーは、HPC 環境で認証とリソース中央管理を行うもので、インストールに必要です。Active Directory を設定するには、HPC クラスターのドメインコントローラーとして機能するインスタンスを作成し、設定します。
HPC クラスタのドメインコントローラを立ち上げるには
-
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
コンソールダッシュボードで、[Launch Instance] を選択します。
-
[Choose an AMI] ページで、Windows Server の AMI を選択し、[Select] を選択します。
-
ウィザードの次のページで、インスタンスタイプを選択し、[Next: Configure Instance Details] を選択します。
-
[Configure Instance Details] ページで、[Network] から VPC を選択し、[Subnet] からサブネットを選択します。ウィザードの次のページで、インスタンスに追加のストレージを指定できます。
-
[Add Tags] ページで、インスタンスの
Domain Controller
タグの値としてName
と入力し、[Next: Configure Security Group] を選択します。 -
[Configure Security Group] ページで、[Select an existing security group] を選択し、
SG - Domain Controller
セキュリティグループを選択して、[Review and Launch] を選択します。 -
[Launch] を選択します。
-
ナビゲーションペインで [Elastic IP] を選択します。
-
[Allocate new address] を選択します。[Allocate] を選択します。[閉じる] を選択します。
-
作成した Elastic IP アドレスを選択し、[Actions]、[Associate address] の順に選択します。[Instance] で、ドメインコントローラのインスタンスを選択します。[Associate] を選択します。
作成したインスタンスに接続し、そのインスタンスを HPC クラスターのドメインコントローラーとして設定します。
インスタンスをドメインコントローラーとして設定するには
-
Domain Controller
インスタンスに接続します。詳細については、「Windows インスタンスに接続する」を参照してください。 -
[Server Manager] を開き、Active Directory ドメインサービスの役割を追加します。
-
[Server Manager] を使用するか、または DCPromo.exe を実行して、サーバーをドメインコントローラーに昇格させます。
-
新しいフォレスト内に新しいドメインを作成します。
-
完全修飾ドメイン名 (FQDN) として
hpc.local
を入力します。 -
Forest Functional Level として [Windows Server 2008 R2] を選択します。
-
[DNS Server] オプションが選択されていることを確認し、[Next] を選択します。
-
[はい、このコンピュータは DHCP サーバーによって自動的に割り当てられた IP アドレスを使用します (非推奨)] を選択します。
-
プロンプトが表示されたら、[Yes] を選択して続行します。
-
ウィザードを完了して[”Reboot on Completion”]を選択します。
-
インスタンスに
hpc.local\administrator
として接続します。 -
ドメインユーザー
hpc.local\hpcuser
を作成します。
ステップ 3: ヘッドノードを設定する
HPC クライアントはヘッドノードに接続します。ヘッドノードは、スケジュールされたジョブを実行できるようにします。インスタンスを作成し、HPC Pack をインストールし、クラスターを設定することで、ヘッドノードを設定します。
インスタンスを起動し、必要なユーザーアカウントを持つ hpc.local
ドメインのメンバーとして設定します。
インスタンスをヘッドノードとして設定するには
-
インスタンスを起動し、
HPC-Head
という名前を付けます。インスタンスを起動するときは、セキュリティグループ [SG - Windows HPC Cluster] および [SG - Domain Member] の両方を選択します。 -
インスタンスに接続し、次のコマンドを使用して既存の DNS サーバーアドレスを取得します。
IPConfig /all
-
[
HPC-Head
] NIC の TCP/IPv4 プロパティを、プライマリ DNS としてDomain Controller
インスタンスの Elastic IP アドレスを含めるように更新し、前の手順の追加の DNS IP アドレスを指定します。 -
hpc.local
(ドメイン管理者アカウント) の認証情報を使って、コンピュータをhpc.local\administrator
ドメインに参加させます。 -
hpc.local\hpcuser
をローカル管理者として追加します。証明書を求められたら、hpc.local\administrator
を使用してインスタンスを再起動します。 -
HPC-Head に
hpc.local\hpcuser
として接続します。
HPC Pack をインストールするには
-
hpc.local\hpcuser
アカウントを使って HPC-Head インスタンスに接続します。 -
[Server Manager] を使って、Administrators の Internet Explorer セキュリティ強化の構成 (IE ESC) をオフにします。
-
[Server Manager] の [Security Information] で、[Configure IE ESC] を選択します。
-
Administrators の IE ESC をオフにします。
-
-
HPC-Head に HPC Pack をインストールします。
-
HPC-Head
Microsoft Download Center から HPC Pack をにダウンロードします。 HPC-Head
で Windows Server のバージョンに合った HPC Pack を選択します。 -
フォルダにファイルを抽出し、フォルダを開いて、[setup.exe] をダブルクリックします。
-
インストールのページで [Create a new HPC cluster by creating a head node] を選択し、[Next] を選択します。
-
デフォルト設定のままですべてのデータベースをヘッドノードにインストールし、[Next] を選択します。
-
ウィザードを終了します。
-
HPC クラスターにヘッドノードを設定するには
-
[HPC Cluster Manager] を開始します。
-
[”Deployment To-Do List”]内で、[”Configure your network”]を選択します。
-
ウィザードでデフォルトオプション (5) を選択し、[”Next”]を選択します。
-
すべての画面でデフォルト値を受け入れ、サーバーの更新方法とカスタマーフィードバックへの参加方法を選択して、ウィザードを終了します。
-
[Configure] を選択します。
-
[Provide Network Credentials] を選択し、
hpc.local\hpcuser
認証情報を提供します。[Configure the naming of new nodes] を選択し、[OK] を選択します。
[Create a node template]を選択します。
[Compute node template] を選択し、[Next] を選択します。
[Without operating system] を選択し、デフォルト設定のまま続行します。
[作成] を選択します。
ステップ 4: コンピュートノードをセットアップする
インスタンスを作成し、HPC Pack をインストールし、クラスターにノードを追加することで、コンピュートノードを設定します。
まずインスタンスを作成し、必要なユーザーアカウントを持つ hpc.local
ドメインのメンバーとして設定します。
コンピュートノード用のインスタンスを設定するには
-
インスタンスを起動し、
HPC-Compute
という名前を付けます。インスタンスを起動するときは、セキュリティグループ [SG - Windows HPC Cluster] および [SG - Domain Member] を選択します。 -
インスタンスにログインし、次のコマンドを使用して、HPC-Compute から既存の DNS サーバーアドレスを取得します。
IPConfig /all
-
HPC-Compute
NIC の TCP/IPv4 プロパティを、プライマリ DNS としてDomain Controller
インスタンスの Elastic IP アドレスが含まれるように更新します。前の手順から追加 DNS IP アドレスを指定します。 -
hpc.local
(ドメイン管理者アカウント) の認証情報を使って、コンピュータをhpc.local\administrator
ドメインに参加させます。 -
hpc.local\hpcuser
をローカル管理者として追加します。認証情報を求められたら、hpc.local\administrator
を指定し、再起動します。 -
HPC-Compute
にhpc.local\hpcuser
として接続します。
コンピュートノードに HPC Pack をインストールするには
-
HPC-Compute
アカウントを使ってhpc.local\hpcuser
インスタンスに接続します。 -
[Server Manager] を使って、Administrators の Internet Explorer セキュリティ強化の構成 (IE ESC) をオフにします。
-
[Server Manager] の [Security Information] で、[Configure IE ESC] を選択します。
-
Administrators の IE ESC をオフにします。
-
-
HPC-Compute
に HPC Pack をインストールします。-
HPC-Compute
Microsoft Download Center から HPC Pack をにダウンロードします。 HPC-Compute
で Windows Server のバージョンに合った HPC Pack を選択します。 -
フォルダにファイルを抽出し、フォルダを開いて、[setup.exe] をダブルクリックします。
-
[Installation] ページで、[Join an existing HPC cluster by creating a new compute node] を選択し、[Next] を選択します。
-
HPC-Head
インスタンスの完全修飾名を指定し、デフォルトを選択します。 -
ウィザードを終了します。
-
クラスター設定を完了するために、ヘッドノードから、コンピュートノードをクラスターに追加します。
クラスターにコンピュートノードを追加するには
-
HPC-Head
インスタンスにhpc.local\hpcuser
として接続します。 -
[HPC Cluster Manager] を開きます。
-
[Node Management] を選択します。
-
[Unapproved] バケット内にコンピュートノードが表示されたら、リストされているノードを右クリックして [Add Node] を選択します。
-
[Add compute nodes or broker nodes that have already been configured] (すでに構成されているコンピュートノードまたはブローカーノードを追加する) を選択します。
-
ノードの横にあるチェックボックスを選択して、[Add] を選択します。
-
-
ノードを右クリックして [Bring Online] を選択します。
ステップ 5: HPC コンピュートノードを拡張する (オプション)
コンピュートノードをスケーリングするには
HPC-Compute
インスタンスにhpc.local\hpcuser
として接続します。HP Pack インストールパッケージからローカルにダウンロードしたファイルをすべて削除します (すでにセットアップを実行してイメージ上にこれらのファイルが作成されているため、AMI 用にクローンを保持する必要はありません)。
[
C:\Program Files\Amazon\Ec2ConfigService
] で、[sysprep2008.xml
] のファイルを開きます。<settings pass="specialize">
の下部に、次のセクションを追加します。必ず、環境に合わせて hpc.local、password、hpcuser を置き換えてください。<component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Identification> <UnsecureJoin>false</UnsecureJoin> <Credentials> <Domain>
hpc.local
</Domain> <Password>password
</Password> <Username>hpcuser
</Username> </Credentials> <JoinDomain>hpc.local
</JoinDomain> </Identification> </component>-
sysprep2008.xml
を保存します。 -
[スタート]、[すべてのプログラム]、[EC2ConfigService Settings] の順に選択します。
[General] タブを選択し、[Set Computer Name] チェックボックスをオフにします。
[Bundle] タブを選択し、[Run Sysprep and Shutdown Now] を選択します。
Amazon EC2 コンソールを開きます。
ナビゲーションペインで、[インスタンス] を選択します。
インスタンスのステータスが [Stopped] になるまで待ちます。
インスタンスを選択し、[Actions]、[Image and templates]、[Create image] の順に選択します。
-
イメージ名とイメージの説明を入力し、[Create image] を選択すると、インスタンスから AMI が作成されます。
-
シャットダウンされた元の [
HPC-Compute
] インスタンスを開始します。 -
hpc.local\hpcuser
アカウントを使ってヘッドノードに接続します。 -
[HPC Cluster Manager] から、エラー状態で表示されるようになった古いノードを削除します。
-
Amazon EC2 コンソールのナビゲーションペインで、[AMI] を選択します。
-
作成した AMI を使ってクラスターに追加のノードを作成します。
作成した AMI から追加のコンピュートノードを起動できます。これらのノードは自動的にドメインに追加されますが、クラスターへの追加は手動で行う必要があります。ヘッドノードを使って [HPC Cluster Manager] から設定済みノードとして追加した後、オンラインにします。