InterSystems IRIS デプロイガイド - AWS CloudFormation テンプレート
InterSystems IRIS デプロイガイド - AWS CloudFormation テンプレート
注意: 本ガイド (特に前提条件のセクション) を理解するには、AWS に関する中級から上級レベルの知識が必要になります。 S3 バケット、EC2 インスタンスの IAM ロール、VPC、サブネットを作成する必要があります。 また、InterSystems バイナリへのアクセス (通常は WRC サイトからダウンロード可) および IRIS のライセンスキーも必要になります。
2020 年 8月 12日
Anton Umnikov
テンプレートのソースコードは、こちらから入手していただけます: https://github.com/antonum/AWSIRISDeployment
目次
InterSystems IRIS デプロイガイド – AWS パートナーネットワーク
マルチ AZ 配置による耐障害性を備えたアーキテクチャダイアグラム (優先)
シングルインスタンンス、シングル AZ 配置のアーキテクチャダイアグラム (開発およびテスト)
IRIS Management Portal への安全なアクセス
はじめに
InterSystems は、ユーザーの皆さまに InterSystems と AWS のベストプラクティスに則したかたちで独自の InterSystems IRIS® データプラットフォームをセットアップしていただけるよう CloudFormation テンプレートを提供しております。
本ガイドでは、CloudFormation テンプレートをデプロイするステップを詳しく解説していきます。
本ガイドでは、InterSystems IRIS CloudFormation テンプレートをデプロイする 2 種類の方法をご紹介します。 1 つ目は、複数のアベイラビリティーゾーン (AZ) を使い、プロダクションのワークロードを対象とした可用性の高い方法で、2 つ目は、開発とテストのワークロードを対象に、単一のアベイラビリティーゾーンにデプロイする方法です。
前提条件と要件
このセクションでは、当社のソリューションを実行、操作していただくための前提条件と要件について詳しく説明します。
所要時間
デプロイ自体は 4 分程度で完了しますが、前提条件やテストの時間を入れると、最大 2 時間ほどかかります。
製品ライセンスとバイナリ
InterSystems のお客様には、https://wrc.intersystems.com より InterSystems IRIS のバイナリをご使用いただけます。 WRC の認証情報を使ってログインしてから、リンクに従って Actions -> SW Distributions -> InterSystems IRIS と順に移動してください。 このデプロイガイドは、InterSystems IRIS 2020.1 のビルド 197 の Red Hat プラットフォーム向けに作成されています。 IRIS のバイナリファイル名は、 ISCAgent-2020.1.0.215.0-lnxrhx64.tar.gz および IRISHealth-2020.1.0.217.1-lnxrhx64.tar.gz形式で書かれています。
InterSystems IRIS のライセンスキーは、既存のライセンスキー (iris.key) を使用いただけるはずです。 また、InterSystems IRIS Evaluation Service (https://download.intersystems.com/download/register.csp) より評価キーをリクエストしていただくこともできます。
AWS アカウント
セットアップ済みの AWS アカウントが必要です。 お持ちでない方は、 https://aws.amazon.com/getting-started/ よりセットアップしてください。
IAM エンティティ (ユーザー)
IAM (ユーザーまたはロール) を作成します。 IAM ユーザーは、AWS CloudFormation のアクションを許可するポリシーが必要です。 CloudFormation テンプレートをデプロイするのに、ルートアカウントは使わないでください。 AWS CloudFormation のアクションに加え、スタックを作成または削除する IAM ユーザーは、スタックテンプレートに依拠する別のアクセス権限も必要になります。 このデプロイでは、次のセクションで紹介するすべてのサービスへのアクセス権が必要になります。
参考資料: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html
EC2 の IAM ロール
CloudFormation テンプレートは、EC2 インスタンスが S3 バケットにアクセスし、CloudWatch にログを入力するのを許可する IAM ロールが必要です。 そうようなロールに関連するポリシーの例については、「IAM Policy for EC2 instance」と題した付録をご参照ください。
参考資料: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html
S3 バケット
「my bucket」という名前の S3 バケットを作成し、IRIS のバイナリファイルと iris.key をコピーします。
BUCKET=
aws s3 mb s3://$BUCKET
aws s3 cp ISCAgent-2020.1.0.215.0-lnxrhx64.tar.gz s3://$BUCKET
aws s3 cp IRISHealth-2020.1.0.217.1-lnxrhx64.tar.gz s3://$BUCKET
aws s3 cp iris.key s3://$BUCKET
VPC とサブネット
テンプレートは、IRIS を既存の VPC とサブネットにデプロイするようにデザインされています。 AZ が 3 つ以上あるリージョンでは、3 つの異なる AZ でプライベートサブネットを 3 つ作成することを推奨しています。 Bastion Host は、VPC 内にあるパブリックサブネットのいずれかに配置します。 CloudFormation テンプレート (https://docs.aws.amazon.com/codebuild/latest/userguide/cloudformation-vpc-template.html) を基に VPC とサブネットを作成するには、AWS の例に従ってください。
EC2 キーペア
このテンプレートによってプロビジョンされる EC2 インスタンスにアクセスするには、EC2 キーペアが少なくとも 1 つは必要です。 詳細は、こちらのガイドをご参照ください: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html。
必要な知識
以下の AWS サービスに関する知識が必要になります。
このデプロイを実行するにあたり、アカウント制限の引き上げは必要ありません。
適切なポリシーやアクセス権限の詳細は、こちらでご確認ください
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html。
注意: AWS アソシエイト認定をお持ちのユーザーなら、十分な知識を修得していると思われます。
アーキテクチャ
このセクションでは、考えられる 2 つのパターンのデプロイを対象としたアーキテクチャダイアグラムをご紹介し、アーキテクチャデザインの選択肢についても解説します。
マルチ AZ 配置による耐障害性を備えたアーキテクチャダイアグラム (優先)
優先されるこのオプションでは、高い可用性と耐障害性を確保するために、IRIS のミラー化されたインスタンスが 2 つのアベイラビリティーゾーンでロードバランサーの後に置かれます。 アベイラビリティーゾーンが 3 以上あるリージョンでは、Arbiter ノードが 3 つ目の AZ に置かれます。
データベースノードは、プライベートサブネットに置かれます。 Bastion Host は、同じ VPC 内のパブリックサブネットにあります。
- EBS は暗号化され、AWS Key Management Service (KMS) により管理されるキーを使用します。
- 転送中のデータの暗号化が必要とされる規制ワークロードについては、インスタンスの r5n ファミリーを使用すると、インスタンス間のトラフィックが自動的に暗号化されるので便利です。 IRIS レベルでトラフィックを暗号化することも可能ですが、CloudFormation はこれを有効化していません (本ガイドの「転送中の IRIS データの暗号化」のセクションをご覧ください)。
シングルインスタンンス、シングル AZ 構成アーキテクチャダイアグラム (開発およびテスト)
InterSystems IRIS は、開発や評価を行う目的で、1 つのアベイラビリティーゾーンにデプロイすることもできます。 データフローやアーキテクチャのコンポーネントは、前のセクションで説明したものと同じです。 このソリューションは、高い可用性も、耐障害性も提供しないため、プロダクションでの使用には適していません。
デプロイメント
セキュリティ
このセクションでは、このガイドを実行してデプロイされる InterSystems IRIS のデフォルト設定、ベストプラクティスの概要、AWS でソリューションをセキュリティ保護するオプションについて解説します。
プライベートサブネットのデータ
InterSystems IRIS の EC2 インスタンスは、プライベートサブネットに配置し、それへのアクセスは Bastion Host を経由する場合か、ロードバランサーを経由するアプリケーションに限定する必要があります。
保存されている IRIS データの暗号化
InterSystems IRIS を実行するデータベースインスタンスでは、保存データは基になる (かつ暗号化されている) EBS ボリューム内に格納されます。 この CloudFormation テンプレートは、アカウントのデフォルトの AWS マネージドキーで暗号化される「aws/eb」という名前の EBS ボリュームを作成します。
転送中の IRIS データの暗号化
この CloudFormation では、クライアントとサーバー間の接続と、インスタンス間の接続はセキュリティ保護されません。 転送中のデータを暗号化する必要がある場合は、デプロイが完了してから、以下のリンクに記載されているステップを実行してください。
SuperServer 接続 (JDBC/ODBC の接続) で SSL を有効化するステップ: https://docs.intersystems.com/irislatestj/csp/docbook/Doc.View.cls?KEY=GCAS_ssltls#GCAS_ssltls_superserver
IRIS EC2 インスタンス間では、耐久性を備えたマルチ AZ 構成のトラフィックも暗号化が必要になる場合があります。 これは、ミラー化に対し SSL 暗号化を有効にする (https://docs.intersystems.com/irislatestj/csp/docbook/Doc.View.cls?KEY=GCAS_ssltls#GCAS_ssltls_mirroring) か、インスタンス間のトラフィックを自動的に暗号化する、インスタンスの r5n ファミリーに切り替えることで実現できます。
AWS Certificate Manager (ACM) を使用すれば、Secure Sockets Layer/Transport Layer Security (SSL/TLS) 証明書のプロビジョン、管理、デプロイを簡単に行えます。
IRIS Management Portal への安全なアクセス
デフォルトで、IRIS Management Portal は、Bastion Host 経由でのみアクセスできるようになっています。
ログ / 監査 / モニタリング
InterSystems IRIS は、messages.log ファイルにログ情報を保管します。 CloudFormation では、追加のログ / モニタリングサービスはセットアップされません。 こちらに記載される構造化ログを有効化することを推奨します。
https://docs.intersystems.com/irislatestj/csp/docbook/Doc.View.cls?KEY=ALOG
CloudFormation テンプレートは、InterSystems IRIS と CloudWatch の連携をインストールしません。 InterSystems では、https://github.com/antonum/CloudWatch-IRIS の InterSystems IRIS と CloudWatch の連携を推奨しています。 これにより、IRIS のメトリクスとログが messages.log ファイルから AWS CloudWatch に収集されます。
CloudFormation テンプレートは、AWS CloudTrail のログを有効化しません。 CloudTrail のログを有効化するには、CloudTrail のサービスコンソールに移動し、CloudTrail のログを有効化します。 CloudTrail を使用すると、AWS インフラストラクチャで実行されるアクションに関連するアクティビティは、イベントとして CloudTrail に記録されます。 これにより、AWS アカウントのガバナンス、コンプライアンス、運用、リスクの監査を有効化できます。
参考資料: https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html
InterSystems では、InterSystems IRIS のログとメトリクスのモニタリング、および少なくとも以下のインジケーターに対しアラートを設定することを推奨しています。
上の内容に加え、ユーザーの皆さまには独自のモニタリングメトリクス、アラートメトリクス、アプリケーション固有の KPI を指定することを推奨しています。
サイジング / コスト
このセクションでは、本ガイドの「デプロイアセット」のセクションで説明する AWS のリソースを作成します。 このデプロイの実行中に使用される AWS サービスのコストはお客様の負担となります。 InterSystems IRIS のデプロイに最低限必要な設定をするだけでも、高い可視性とセキュリティが確保されます。
本ガイドのテンプレートでは、InterSystems IRIS の BYOL (Bring Your Own License「ライセンスは各自で用意する」) ライセンスモデルを採用しています。
InterSystems IRIS Marketplace のページでは、Pay Per Hour IRIS Pricing (時間課金制の IRIS 使用料金) についてご説明しています: https://aws.amazon.com/marketplace/pp/B07XRX7G6B?qid=1580742435148&sr=0-3
BYOL モデルの料金に関する詳細は、https://www.intersystems.com/who-we-are/contact-us/ より InterSystems までお問い合わせください。
正常に機能するプラットフォームを提供するには、以下の AWS アセットが必要です。
次のテーブルでは、デプロイ用の CloudFormation テンプレートに組み込まれる EC2 と EBS のキャパシティおよび AWS リソースのコスト (単位: $/月) に関する推奨事項を示しています。
ワークロード | ||||
開発 / テスト | 小規模 | 中規模 | 大規模 | |
EC2 DB* | m5.large | 2 * r5.large | 2 * r5.4xlarge | 2 * r5.8xlarge |
EC2 Arbiter* | t3.small | t3.small | t3.small | t3.small |
EC2 Bastion* | t3.small | t3.small | t3.small | t3.small |
EBS SYS | gp2 20GB | gp2 50GB | io1 512GB 1,000iops | io1 600GB 2,000iops |
EBS DB | gp2 128GB | gp2 128GB | io1 1TB 10,000iops | io1 4TB 10,000iops |
EBS JRN | gp2 64GB | gp2 64GB | io1 256GB 1,000iops | io1 512GB 2,000iops |
計算コスト | 85.51 | 199.71 | 1506.18 | 2981.90 |
EBS ボリュームのコスト | 27.20 | 27.20 | 450.00 | 1286.00 |
EBS IOPS コスト | - | - | 1560.00 | 1820.00 |
サポート (ベーシック) |
- | - | 351.62 | 608.79 |
コスト合計 | 127.94 | 271.34 | 3867.80 | 6696.69 |
計算リンク | 計算 | 計算 | 計算 | 計算 |
*すべての EC2 インスタンスには追加で gp2 の EBS ルートボリュームが 20GB 含まれます。
AWS の推定コストは、バージニア州北部の地域のオンデマンド料金を基に計算されています。 スナップショットとデータ転送のコストは含まれていません。 料金に関する最新情報は、AWS 料金を参照してください。
デプロイアセット
デプロイオプション
InterSystems IRIS CloudFormation テンプレートには、デプロイオプションが 2 つあります。 マルチ AZ 配置オプションは、プロダクションのワークロードに適した、可用性が高く、冗長性を備えたアーキテクチャを提供します。 シングル AZ 配置オプションは、低コストのオプションで、開発やテストのワークロードに適しています。
デプロイアセット (プロダクションでの使用に推奨)
InterSystems IRIS のデプロイメントは、CloudFormation テンプレートを使って実行されます。同テンプレートは、入力パラメータを受け取り、それをネストされた適切なテンプレートに渡します。 それらは、条件や依存関係に従って順番に実行されます。
作成される AWS リソース
CloudFormation テンプレートの入力パラメータ
AWS 全般
S3
ネットワーク
データベース
スタックの作成 マスターテンプレートの出力は、JDBC クライアントを InterSystems IRIS に接続する際に使用できる JDBC エンドポイント、Bastion Host のパブリック IP、および両方の IRIS ノードのプライベート IP、と 4 つの出力があります。
クリーンアップ
デプロイのテスト
正常性チェック
Node 01/02 Management Portal へのリンクをクリックします。 ユーザー名「SuperUser」および CloudFormation テンプレートで選択したパスワードを使ってログインします。
System Administration -> Configuration -> Mirror Settings -> Edit Mirror と順に移動します。 システムに 2 つのファイルオーバーメンバが設定されていることを確認します。
ミラー化されたデータベースが作成され、アクティブであることを確認します。 System Administration -> Configuration -> Local Databases と順に移動します。
「First Look JDBC」と題したドキュメント (https://docs.intersystems.com/irislatestj/csp/docbook/DocBook.UI.Page.cls?KEY=AFL_jdbc) の内容に従って、JDBC が Load Balancer を介して IRIS に接続されていることを確認します。 URL 変数をテンプレートの出力に表示されている値に変更し、パスワードも「SYS」からセットアップの最中に選択したパスワードに変更します。
フェイルオーバーテスト
Node02 で、Management Portal にアクセス (上の「正常性チェック」のセクション参照) し、Configuration->Edit Mirror と順に開きます。 ページの一番下に「このメンバはバックアップです。 プライマリに変更を加える必要があります。」 というメッセージが表示されます。
AWS EC2 マネジメントダッシュボードで Node01 インスタンスを見つけます。 その名前は、MyStackName-Node01-1NGXXXXXX の形式で書かれています。
Node01 インスタンスを再起動します。 これにより、インスタンス / AZ の停止がシミュレートされます。
Node02 の「Edit Mirror」ページを再度読み込みます。 するとステータスは、このメンバはプライマリです。 変更内容は他のメンバに送信されます。 に変わるはずです。
バックアップと回復
バックアップ
CloudFormation をデプロイしても、InterSystems IRIS のバックアップは有効化されません。 当社では、EBS Snapshot (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html) と IRIS Write Daemon Freeze (https://docs.intersystems.com/irislatestj/csp/docbook/Doc.View.cls?KEY=GCDI_backup#GCDI_backup_methods_ext) の両方を使って IRIS EBS ボリュームをバックアップすることを推奨しています。
インスタンスの障害
異常な IRIS インスタンスは、IRIS のミラーリング機能と Load Balancer により検出され、トラフィックは別のミラーノードに移動されます。 回復可能なインスタンスはミラーに再度参加して、通常の操作が続行されます。 異常な状態が続くインスタンスがある場合は、当社のナレッジベースおよび本ガイドの「緊急メンテナンス」のセクションをご覧ください。
アベイラビリティゾーン (AZ) の障害
AZ の障害が発生すると、トラフィックが一時的に中断される場合があります。 インスタンスの障害発生時と同様に、この場合も IRIS のミラーリング機能と Load Balancer がトラフィックを使用可能な別の AZ に切り替えて状況に対処します。
リージョンの障害
本ガイドで紹介するアーキテクチャでは、マルチリージョンオペレーションをサポートする設定はデプロイされません。 IRIS の非同期ミラーリングと AWS Route53 を使用すれば、中断を最小限に抑えながらリージョンの障害に対処できる構成を作成できます。 詳細は、https://community.intersystems.com/post/intersystems-iris-example-reference-architectures-amazon-web-services-aws を参照してください。
RPO/RTO
目標復旧時点 (RPO)
目標復旧時間 (RTO)
ストレージ容量
IRIS ジャーナルとデータベースの EBS ボリュームは、容量が上限に達する場合があります。 InterSystems では、IRIS Dashboard ならびに「df」のような Linux のファイルシステムツールを使い、ジャーナルとデータベースのボリュームの状態をモニタリングすることを推奨しています。
ジャーナルとデータベースのボリュームは、EBS ガイド https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modify-volume.htmlを使えば拡張することができます。 注意: EBS ボリュームの拡張と Linux ファイルシステムの拡張の両方のステップを実行する必要があります。 また、データベースのバックアップを実行した後に、Purge Journalsを実行すれば、ジャーナルが占めていた領域を開放することもできます。
また、インスタンスに対して CloudWatch Agent を有効にして (この CloudFormation テンプレートでは無効)、ディスク領域をモニタリングすることも検討してもよいでしょう (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)。
セキュリティ証明書の期限
AWS Certificate Manager (ACM) を使えば、Secure Sockets Layer/Transport Layer Security (SSL/TLS) 証明書を簡単にプロビジョン、デプロイ、管理し、またその有効期限をモニタリングできます。
証明書の有効期限は把握しておく必要があります。 InterSystems では、証明書の有効期限をモニタリングする統合プロセスは提供していません。 AWS では、アラームのセットアップに便利な CloudFormation テンプレートが提供されています。 詳細は、こちらのリンク https://docs.aws.amazon.com/config/latest/developerguide/acm-certificate-expiration-check.html をご覧ください。
日常的なメンテナンス
ミラー化された構成において IRIS をアップグレードする手順については、https://docs.intersystems.com/irislatestj/csp/docbook/Doc.View.cls?KEY=GCI_upgrade#GCI_upgrade_tasks_mirrorsを参照してください。
継続的なタスクについて、InterSystems では以下を含む AWS と InterSystems のベストプラクティスを実施することを推奨しています。
また、EC2 インスタンスに CloudWatch Agent を追加することを検討しても良いでしょう: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html。
緊急メンテナンス
EC2 インスタンスを使用できる場合は、Bastion Host 経由でインスタンスに接続しましょう。
注意: インスタンスを停止 / 開始した後は、Bastion Host のパブリック IP が変更される場合があります。 これが、IRIS クラスタの可用性や JDBC 接続に影響することはありません。
コマンドラインを使ってアクセスするには、以下のコマンドを使って Bastion Host 経由で IRIS ノードに接続します。
$ chmod 400
$ ssh -J ec2-user@<bastion-public-ip> ec2-user@<node-private-ip> -L 52773:1
上のコマンドを実行したら、インスタンスの Management Portal が http://localhost:52773/csp/sys/%25CSP.Portal.Home.zen にて使用可能になります。ユーザは「SuperUser」、パスワードはスタックの作成時に入力したパスワードを使います。
IRIS のコマンドプロンプトにアクセスするには、以下のコマンドを使います。
$ iris session iris
「InterSystems IRIS Management and Monitoring」ガイドを参照してください: https://docs.intersystems.com/irislatestj/csp/docbook/DocBook.UI.Page.cls?KEY=GCM
InterSystems サポートへの問い合わせ。
EC2 インスタンスが使用またはアクセスできない場合は、AWS サポートまでお問い合わせください。
注意: マルチ AZ 配置のデプロイで発生する AZ やインスタンスの障害は、自動的に処理されます。
サポート
トラブルシューティング
CloudFormation で「Create Stack」(スタックを作成) を実行できません 「Create Stack」を実行できる適切な権限を持っていることをご確認ください。 AWS アカウントの管理者にアクセス権限をお求めください。また、問題が解決しない場合は AWS サポートまでお問い合わせください
スタックは作成されますが、IRIS にアクセスできません EC2 インスタンスのステータスが「CEATE COMPLETED」に変わってから、IRIS の使用準備が完全に整うまでは、およそ 2 分程度かかります。 SSH で EC2 Node のインスタンスと通信し、IRIS が稼働していることをご確認ください。
$iris list
アクティブな IRIS インスタンスが見当たらない場合や、“iris: command not found” というメッセージが表示される場合は、IRIS のインストールが失敗したことを意味します。 インスタンスを最初に開始するときに、インスタンスの $cat /var/log/cloud-init-output.log をチェックして、インストールに問題がなかったどうかを確認します。
IRIS は稼働していますが、Management Portal にアクセスすることも、[Java] アプリケーションから接続することもできません CloudFormation が作成した Security Group に、お使いのソース IP アドレスが許可されている IP アドレスとして表示されていることをご確認ください。
InterSystems サポートへの問い合わせ
InterSystems Worldwide Response Center (WRC) では、専門家によるテクニカルサポートを提供しています。
InterSystems IRIS のサポートは、常に IRIS へのサブスクリプションに含まれています。
電話、メール、オンラインでのサポートは、24 時間、年中無休でご利用いただけます。 世界 15 か国にサポートアドバイザーを配置。英語、スペイン語、ポルトガル語、イタリア語、ウェールズ語、アラビア語、ヒンディー語、中国語、タイ語、スウェーデン語、韓国語、日本語、フィンランド語、ロシア語、フランス語、ドイツ語、ヘブライ語およびハンガリー語での対応が可能です。 お客様の成功を大切にする、経験、知識ともに豊富なサポートスペシャリストが、すべてのお客様を素早くサポートいたします。
すぐにサポートが必要な場合
電話サポート: +1-617-621-0700 (US) +44 (0) 844 854 2917 (UK) 0800615658 (NZ フリーダイヤル) 1800 628 181 (AUS フリーダイヤル)
メールサポート: support@intersystems.com
オンラインサポート: WRC ダイレクト support@intersystems.com までログイン情報をお求めください。
付録
IAM Policy for EC2 instance
以下の IAM ポリシーを使うことで、EC2 インスタンスは S3 バケット ‘my-bucket’ からオブジェクトを読み取り、CloudWatch にログを書き込むことができます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3BucketReadOnly",
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::my-bucket/"
},
{
"Sid": "CloudWatchWriteLogs",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": "arn:aws:logs:::"
}
]
}