目的
IBM SPSS StatisticsやIBM SPSS Modelerの同時接続ユーザライセンスを購入した場合、Licnese Managerを導入する必要があります。業務上の理由で冗長構成を選択する場合、製品として推奨している構成は、3台のActiveーActive構成のため、ダウンタイムが全く許容できない場合は、この構成が必要です。この構成の問題点としては、3台のサーバをacitve-activeで運用しなければならないため、運用コストが増大することです。仮に数分から10分程度のダウンタイムが許容できるならば、AWSのサービスをうまく組み合わせて、Acitve-Standby構成を構築することで、管理の省力化と運用コストの削減を行うことが出来ます。
対象読者
- インフラ構築担当者
- SPSS Modelerを利用しているが、運用コストが高いと考えている人
- AWS EC2 ,EventBridge ,Lamdbaについて基本的なことを理解している人
前提条件
- 冗長構成は同じAZ内で2台のEC2を作成しております。
- SPSSのクライアントからLicenseManagerに接続するときはPublicIPを使用しています。
- 1号機と2号機は同じサブネットに所属している。
目次
1.事前準備
この記事の内容は前回からの続編になります。まずは
SPSS License ManagerをAWS上で冗長構成にしてみた(手動編)を参照ください。
2. 1号機から2号機への切替Lamdbaの作成
Lambdaを新規に開いて以下のコードを記述下さい。
全体のコードになります。
import boto3
from time import sleep
region = 'ap-northeast-1'
instances = ['i-xxxxxxxxxxx2']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
#dinamic get attachment id
response = ec2.describe_network_interfaces(NetworkInterfaceIds=['eni-xxxxxxxxxxxxxxxx'],)
#get attachment id
res_attachid = response['NetworkInterfaces'][0]['Attachment']['AttachmentId']
# excecute detach
response = ec2.detach_network_interface(AttachmentId=res_attachid)
#execute attach
response = ec2.attach_network_interface(DeviceIndex=1,InstanceId='i-xxxxxxxxxxx',NetworkInterfaceId='eni-xxxxxxxxxxxxxxxxf')
#instance start
ec2.start_instances(InstanceIds=instances)
print('started your instances: ' + str(instances))
インスタンスID:i-xxxxxxxxxxx2、ネットワークインターフェースID:eni-xxxxxxxxxxxxxxxxfは各自の環境で置き換えてください。
以下のコードで動的にアタッチメントIDを取得しております(アタッチメントIDは動的に割当てられるため)
#get attachment id
res_attachid = response['NetworkInterfaces'][0]['Attachment']['AttachmentId']
で動的に取得しております。次に以下のコードで1号機のインスタンスからデタッチをしております。
response = ec2.detach_network_interface(AttachmentId=res_attachid)
次に2号機のインスタンスにアタッチしております。
response = ec2.attach_network_interface(DeviceIndex=1,InstanceId='i-xxxxxxxxxxx',NetworkInterfaceId='eni-xxxxxxxxxxxxxxxxf')
最後に2号機のインスタンスを起動しております。
ec2.start_instances(InstanceIds=instances)
Lambdaの名前を「StartEC2-lm-redundant1」にして保存します。
3. 1号機のイベント(EventBridge)の作成
3.1 Amazon EventBridgeのルールの作成
- Amazon EventBridgeサービスを選択して「ルール」→「ルールの作成」を選択する。
- ルールの名前「rule-ec2-lm-redundant1」で「次へ」を選択する。
- イベントパターンのところで以下のコードを貼り付けて「次へ」を選択する。
{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["stopped"],
"instance-id": ["i-xxxxxxxxxxx1", ""]
}
}
インスタンスIDは各自のお客様環境に併せて変更してください。今回はイベントパターンをEC2インスタンスの状態が停止済み("stopped")と致します。
ターゲットを選択する画面になりますので「AWSのサービス」を選択して、ターゲットタイプを「Lambda関数」を選択します。次に「関数」の欄が表示されますので、先ほど作成した「StartEC2-lm-redundant1」を選択して「次へ」を選択します。
Tagの画面になりますので、必要に応じてタグ名を作成し、「次へ」を選択し、「ルールを作成」を選択します(タグ名がよくわからない方は設定しなくても大丈夫です)
3.2 Lambda上で先ほど作成したEventBridgeのルールをトリガー条件にする。
- Lambdaを選択して、先ほど選作成した「StartEC2-lm-redundant1」を選択して「設定」タブを開きます。
- 「トリガーの追加」を選択して、トリガーの設定で「EventBridge」を選択して「rule-ec2-lm-redundant1」を選択して「追加」を選択します。
4 試してみた
4.1 SPSS Modelerから1号機への接続
4.2 1号機から2号機へ
4.3 SPSS Modelerから2号機への接続
5.まとめ
今回は、SPSSのLicenseManagerの冗長化について記事を作成しました。この検証環境ではダウンを検知してから切り替わるまで、1分程度で完了しております。但し、この方法だとAWSに詳しい方はお気づきかと思いますが、AZ障害のときは救うことが出来ません。AZ障害対応の冗長化については、NLBを用いたマルチAZ構成が考えられますが、今後機会がありましたら検証して記載したいと思います。




