0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SPSS License ManagerをAWS上で冗長構成にしてみた(自動編)

Posted at

目的

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. 事前準備

2. 1号機から2号機への切替Lamdbaの作成

3. 1号機のイベント(EventBridge)の作成

4. 試してみた

5. まとめ

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号機への接続

  • 自分の端末のSPSS Modler 18.5を起動します。
    spss185_use011.png

  • 1号機のLicnense Managerを見るとライセンスが「1 in use」になっていることが分かる。
    lm1_user012.png

4.2 1号機から2号機へ

  • 1号機のインスタンスを停止する。
    instancestop1.png

4.3 SPSS Modelerから2号機への接続

  • 自分の端末のSPSS Modler 18.5を起動します。
    spss185_use011.png

  • 2号機のLicnense Managerを見るとライセンスが「1 in use」になっていることが分かる。
    lm2_user012.png

5.まとめ

今回は、SPSSのLicenseManagerの冗長化について記事を作成しました。この検証環境ではダウンを検知してから切り替わるまで、1分程度で完了しております。但し、この方法だとAWSに詳しい方はお気づきかと思いますが、AZ障害のときは救うことが出来ません。AZ障害対応の冗長化については、NLBを用いたマルチAZ構成が考えられますが、今後機会がありましたら検証して記載したいと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?