Amazon Web Services ブログ
AWS CloudFormation を使用して Amazon Redshift クラスターの作成を自動化する
この投稿では、AWS アカウントで Amazon Redshift クラスターのデプロイを自動化する方法について説明します。セキュリティと高可用性に関する AWS のベストプラクティスに基づいてクラスターの設定を促進することで、AWS CloudFormation を使った設定を速やかに行うことができるようになります。 必要に応じてカスタマイズできる CloudFormation の一連のサンプルテンプレートを見ていきます。
Amazon Redshift は、高速かつスケーラブルで完全マネージド型の ACID と ANSI SQL に準拠したクラウドデータウェアハウスサービスです。新しいデータウェアハウスの設定とデプロイをほんの数分で行い、Amazon Redshift に保存されているペタバイト規模の構造化データに対してもクエリを実行できます。Amazon Redshift Spectrum を使用すると、データウェアハウジング機能が Amazon S3 に構築したデータレイクに拡張されます。Redshift Spectrum では、データをロードすることなく、エクサバイトの構造化および半構造化データをネイティブ形式でクエリできます。Amazon Redshift は、機械学習、巨大な並列クエリ実行、高性能ディスクのカラムナストレージを使用することで、他のデータウェアハウスデータベースよりも高速なパフォーマンスを実現します。Amazon Redshift を設定すれば、数分でスケールの拡大縮小が行えるだけでなく、コンピューティング能力を自動的に拡張して、無制限の同時実行を確実に行うことができます。
Amazon Redshift から開始し、AWS Well-Architected フレームワークの推奨ベストプラクティスに基づいて AWS リソースを設定する場合には、こちらで提供する CloudFormation テンプレートを使用できます。モジュラーアプローチでは、AWS インフラストラクチャをゼロから構築するか、既存の仮想プライベートクラウド (VPC) に Amazon Redshift をデプロイするかのいずれかを選択できます。
CloudFormation テンプレートを使用する利点
AWS CloudFormation テンプレートを使用すれば、何百にもおよぶ手動での手順を、テキストファイルにある少しの手順にまとめることが可能です。ファイル内の宣言コードは、作成するリソースの意図した状態をキャプチャし、数百の AWS リソースの作成を自動化します。このテンプレートは、インフラストラクチャの信頼できる唯一の情報源となります。
CloudFormation テンプレートはアクセラレーターとして機能します。このテンプレートで、複数のリージョンと複数のアカウントにまたがり、最小限の労力と時間で、安全で繰り返し可能な方法でテクノロジーとインフラストラクチャのデプロイを自動化できるようになります。
アーキテクチャの概要
次のアーキテクチャ図と概要は、この投稿で使用するソリューションを解説しています。
ササンプルの CloudFormation テンプレートは、ネットワークインフラストラクチャとアーキテクチャの図に示されているすべてのコンポーネントをプロビジョニングします。
CloudFormation テンプレートを次の 3 つのスタックに分割しました。
- VPC、サブネット、ルートテーブル、インターネットゲートウェイ、NAT ゲートウェイ、Amazon S3 ゲートウェイエンドポイント、その他のネットワークコンポーネントをセットアップする CloudFormation テンプレート。
- Amazon Redshift クラスターに接続するために Auto Scaling グループで Amazon Linux Bastion ホストを設定する CloudFormation テンプレート。
- Amazon Redshift クラスター、CloudWatch アラーム、AWS Glue データカタログ、Amazon Redshift Spectrum と ETL ジョブ用の Amazon Redshift IAM ロールをセットアップする CloudFormation テンプレート。
エクスポートされた出力値を使って、スタックを統合しています。1 つのネストされたスタックの代わりに 3 つの異なる CloudFormation スタックを使用することで、ある程度の柔軟性が得られます。たたとえば、AWS リージョンで VPC と Bastion ホストの CloudFormation スタックを 1 回デプロイし、Amazon Redshift クラスターの CloudFormation スタックを複数回デプロイする、などができるようになります。
ベストプラクティス
これらの CloudFormation テンプレートで構築したアーキテクチャは、高可用性とセキュリティのための AWS のベストプラクティスをサポートしています。
VPC の CloudFormation テンプレートは、以下をサポートしています。
- 高可用性と災害対策のために 3 つのアベイラビリティーゾーンを設定します。自然災害が発生した場合に最適な分離と安定性を得られるよう、リージョン内のゾーンを地理的に分散します。
- 各ゾーンに 1 つのパブリックサブネットと 1 つのプライベートサブネットをプロビジョニングします。データ漏洩のリスクを軽減するため、外部と接するリソースにはパブリックサブネットを、内部リソースにはプライベートサブネットを使用することをお勧めします。
- ネットワーク ACL を作成し、デフォルトのルールでプライベートおよびパブリックのサブネットに関連付けます。AWS は、サブネットレベルでインバウンドトラフィックおよびアウトバウンドトラフィックを制御するために、ファイアウォールとしてネットワーク ACL を使用することを推奨しています。これらのネットワーク ACL は、防御の第 2 層としてカスタマイズできる個別の制御を提供します。
- それぞれのプライベートサブネットに対して独立したルーティングテーブルを作成して関連付けます。これらを設定することで、VPC 内外のトラフィックのフローを制御することができます。パブリックサブネットは、単一のルーティングテーブルを共有します。これは、すべてがインターネットと通信するための唯一の経路として、同じインターネットゲートウェイを使用するからです。
- 高可用性を得るため、3 つのパブリックサブネットのそれぞれに NAT ゲートウェイを作成します。NAT ゲートウェイは、デプロイメント、可用性、メンテナンスに関して、NAT インスタンスよりも優れた利点を発揮します。NAT ゲートウェイを使用すると、プライベートサブネット内のインスタンスはインターネットまたは他の AWS のサービスに接続できますが、インターネットはそれらのインスタンスとの接続を開始することはできません。
- Amazon S3 用の VPC エンドポイントを作成します。VPC のプライベートサブネットで実行される Amazon Redshift およびその他の AWS リソースは、プライベートで接続して S3 バケットにアクセスできます。たとえば、S3 からのデータのロードや S3 へのデータのアンロードは、プライベートでセキュアな、かつ信頼性の高い接続を介して行われます。
Amazon Linux Bastion ホストの CloudFormation テンプレートは、以下をサポートしています。
- VPC CloudFormation テンプレートで設定した 3 つのパブリックサブネットにまたがって、Auto Scaling グループを作成します。Auto Scaling グループは、Amazon Linux Bastion ホストが 3 つのアベイラビリティーゾーンのうちの 1 つにおいて常に利用可能です。
- Elastic IP アドレスを設定し、Amazon Linux Bastion ホストに関連付けます。Elastic IP アドレスを使用すると、これらの IP アドレスが覚えやすくなり、オンプレミスのファイアウォールでの許可が簡単になります。システムがインスタンスを終了し、Auto Scaling グループが代わりに新しいインスタンスを起動すると、既存の Elastic IP アドレスが新しいインスタンスに自動的にもう一度関連付けられます。このため、常に同じ信頼できる Elastic IP アドレスを使用できます。
- Amazon EC2 セキュリティグループを設定し、Amazon Linux Bastion ホストに関連付けます。これで、Bastion ホストへのアクセスをロックダウンし、既知の CIDR スコープとポートからのインバウンドトラフィックのみを許可できるようになります。
- Amazon CloudWatch Logs ロググループを作成して、Amazon Linux Bastion ホストのシェル履歴ログを保持し、SSH コマンドカウントを追跡する CloudWatch メトリクスを設定します。これで、Bastion ホストにいつ誰がアクセスするかを確認できるため、セキュリティの監査に役立ちます。
- CloudWatch アラームを作成して、Bastion ホストの CPU をモニタリングし、アラームがトリガーされたときに Amazon SNS 通知を送信します。
Amazon Redshift クラスターテンプレートは、次の処理を行います。
- 複数のアベイラビリティーゾーンにまたがる Amazon Redshift クラスターサブネットグループを作成します。これにより、異なるクラスターを異なるゾーンに作成することで、1 つのゾーンでの障害の影響を最小限に抑えることができます。
- データベース監査を設定し、監査ログを S3 バケットに保存します。さらに、Amazon Redshift のログサービスへのアクセスを制限して、ライフサイクルルールを設定し、14 日以上経過したログを Amazon S3 Glacier にアーカイブします。
- IAM ロールを作成し、このロールの Amazon Redshift Spectrum を使用するのに必要な最小限のアクセス許可 を付与するポリシーで、S3、CloudWatch Logs、AWS Glue、Amazon Athena にアクセスします。その後、この IAM ロールを Amazon Redshift に関連付けます。
- EC2 セキュリティグループを作成し、Amazon Redshift クラスターに関連付けます。これで、Amazon Redshift クラスターへのアクセスを既知の CIDR スコープとポートにロックダウンできるようになります。
- 以下の設定で Amazon Redshift クラスターパラメータグループを作成し、それを Amazon Redshift クラスターに関連付けます。これらのパラメータは一般的なガイドにすぎません。確認して、ニーズに合うようにカスタマイズする必要があります。
パラメータ |
値 | 説明 |
enable_user_activity_logging | TRUE | これで、ユーザーアクティビティログが有効になります。詳細については、「データベース監査ログ作成」をご参照ください。 |
require_ssl | TRUE | これで、Amazon Redshift クラスターへの SSL 接続が有効になります。 |
wlm_json_configuration | [ { "query_group" : [ ], "query_group_wild_card" : 0, "user_group" : [ ], "user_group_wild_card" : 0, "concurrency_scaling" : "auto", "rules" : [ { "rule_name" : "DiskSpilling", "predicate" : [ { "metric_name" : "query_temp_blocks_to_disk", "operator" : ">", "value" : 100000 } ], "action" : "log", "value" : "" }, { "rule_name" : "RowJoining", "predicate" : [ { "metric_name" : "join_row_count", "operator" : ">", "value" : 1000000000 } ], "action" : "log", "value" : "" } ], "auto_wlm" : true }, { "short_query_queue" : true } ] |
これで、次の設定でカスタムワークロード管理キュー (WLM) が作成されます。 Auto WLM: Amazon Redshift は、ワークロードごとにクエリの同時実行とメモリ割り当てを自動的に管理します。 Enable Short Query Acceleration (SQA): Amazon Redshift は専用のスペースで短時間実行されるクエリを実行するため、SQA クエリは長いクエリの背後にあるキューで強制的に待機することはありません。 この WLM キューにルーティングされたクエリの有効化 同時実行スケーリング Creates two WLM QMR Rules: 中間結果の書き込みに使用される一時ディスク領域が 100 GB を超えた場合、クエリをログに記録します。 結合ステップで処理された行数が 10 億行を超えた場合、クエリをログに記録します。 ニーズに基づいていろんなルールを作成し、さまざまなアクション (中止またはホップまたはログ) を選択することも可能です。 |
max_concurrency_scaling_clusters | 1 (あるいは選択した数字) | 並行スケーリングが有効な場合、許可する同時実行スケーリングクラスターの最大数を設定します。 |
auto_analyze | TRUE | TRUE の場合、Amazon Redshift はデータベースを継続的にモニタリングし、バックグラウンドで分析操作を自動的に実行します。 |
statement_timeout | 43200000 | 指定したミリ秒数を超えるステートメントを終了します。statement_timeout 値は、Amazon Redshift がクエリを終了する前にクエリを実行できる最大時間です。 |
- セキュリティのベストプラクティスに従って、Amazon Redshift クラスターを設定し、デフォルト以外の Amazon Redshift ポートでリッスンするようにします。
- AWS セキュリティのベストプラクティスに従って、プライベートサブネットに Amazon Redshift クラスターを作成します。Amazon Redshift クラスターにアクセスするには、Linux Bastion ホストの CloudFormation テンプレートが設定する Amazon Linux Bastion ホストを使用します。
- 入力パラメータ NumberOfNodes に対して 1 を選択しない限り、最小 2 ノードのクラスターを作成します。AWSは、本番環境ではクラスターごとに少なくとも 2 つのノードを使用することを推奨しています。詳細については、「Amazon Redshift よくある質問」の可用性と耐久性のセクションをご覧ください。
- Amazon Redshift が管理する KMS キーまたはユーザーが指定する KMS キーを使用して、Amazon Redshift クラスターの encrypt at-rest を有効にします。ユーザーが指定する KMS キーを使うには、まだ作成していない場合は、最初に KMS キーを作成します。詳細については、「 キーの作成」をご参照ください。
- 本番環境では Amazon EBS スナップショットの保持を 35 日間、非本番環境では 8 日間に設定します。これにより、非本番データベースの場合、本番データベースを過去 35 日間または過去 8 日間の任意の時点に復元できます。
- [Delete stack option] を使用して Amazon Redshift クラスターを削除すると、Amazon Redshift データベースの最終スナップショットを自動的に取り込みます。これは、CloudFormation スタックを誤って削除することによるデータ損失を防ぐものです。
- AWS データレイクのメタデータストアとして、AWS Glue データカタログを作成します。
- PercentageDiskSpaceUsed などのキー CloudWatch メトリクスの CloudWatch アラーム、および Amazon Redshift クラスターの CPUUtilization を設定し、これらの条件のいずれかがアラームをトリガーすると SNS 通知を送信するようにします。
- Amazon Redshift クラスターを復元するオプションを、以前に取得したスナップショットから選べるようにします。
- Amazon Redshift クラスターとその他のリソースに、common tags を添付します。AWS は、クラウドインフラストラクチャリソースにタグを割り当てて、リソースのアクセスコントロール、コストの追跡、自動化、組織化を管理することを推奨しています。
前提条件
CloudFormation スタックを設定する前に、以下の前提条件に注意してください。
- AWS のマネジメントコンソールと、前述のアーキテクチャの概要セクションに記載されているサービスとやり取りするための十分なアクセス許可を持つ AWS アカウントと IAM ユーザーが必要です。IAM アクセス許可には、AWS CloudFormationテンプレートが作成した IAM ロールおよびポリシーを作成するアクセス権も含まれている必要があります。
- VPC CloudFormation スタックには、パブリックとプライベートのサブネットを設定するための 3 つのアベイラビリティーゾーンが必要です。必ず、少なくとも 3 つのアベイラビリティーゾーンがある AWS リージョンを選択します。
- CloudFormation スタックを設定する予定の AWS リージョンで、EC2 コンソールの EC2 キーペアを作成します。保存できるのはこの時だけなので、プライベートキーを必ず保存してください。Amazon Linux Bastion ホスト CloudFormation スタックを設定するときに、この EC2 キーペアを入力パラメータとして使用します。
AWS CloudFormation を使用してリソースを設定する
これらの CloudFormation テンプレートは、一般的なガイドとして提供されています。確認して、ニーズに合うようにカスタマイズする必要があります。これらのスタックがデプロイしたリソースの一部では、使用を終了しない限り、料金が発生します。
VPC、サブネット、その他のネットワークコンポーネントを設定する
この CloudFormation テンプレートは、VPC、サブネット、ルートテーブル、インターネットゲートウェイ、NAT ゲートウェイ、Amazon S3 ゲートウェイエンドポイント、およびその他のネットワークコンポーネントを作成します。以下の手順に従って、AWS アカウントにこれらのリソースを作成します。
- AWS マネジメントコンソールにログインします。
- 上部にあるナビゲーションリボンで、スタックを作成する AWS リージョンを選択し、[Next] をクリックします。CloudFormation スタックには、パブリックサブネットとプライベートサブネットを設定するための 3 つのアベイラビリティーゾーンが必要です。少なくとも 3 つのアベイラビリティーゾーンがある AWS リージョンを選択します。
- 次の [Launch Stack] ボタンをクリックします。このボタンはお使いの AWS アカウントで、テンプレートを使って自動的に AWS CloudFormation サービスを開始できるようにするものです。必要に応じて、サインインするように求められます。必要に応じて、コンソール内から CloudFormation テンプレートを表示できます。
- 次のスクリーンショットに示すように、CloudFormation スタックにはいくつかのパラメータが必要です。
- Stack name: rsVPC などのスタックの分かりやすい名前を入力します。
- ClassB 2nd Octet: VPC 用の IPv4 CIDR ブロックの 2 番目のオクテット (10.XXX.0.0/16) を指定します。0〜255 までの任意の数を指定できます。たとえば、33 を指定すると、IPv4 CIDR ブロック 10.33.0.0/16 で VPC を作成できます。IPv4 用の VPC とサブネットのサイズ設定の詳細については、「IPv4 用の VPC とサブネットのサイズ設定」をご覧ください。
- すべてのパラメータ値を入力した後、[Next] をクリックします。
- 次の画面で、必要なタグ、IAM ロール、または詳細オプションを入力して、[Next] をクリックします。
- 最終画面で詳細を確認し、[Create] をクリックします。
スタックの作成には数分かかります。AWS CloudFormation のリソースセクションを確認して、このスタックが設定したさまざまなコンポーネントの物理 ID を確認します。
その後、Amazon Redshift クラスターへのログインに使用する Amazon Linux Bastion ホストを設定する必要があります。
Amazon Linux Bastion ホストを設定する
この CloudFormation テンプレートで、Auto Scaling グループに Amazon Linux Bastion ホストを作成します。以下の手順に従って、VPC に Bastion ホストを作成します。
- 上部にあるナビゲーションリボンで、スタックを作成する AWS リージョンを選択し、[Next] をクリックします。
- 次の [Launch Stack] ボタンをクリックします。このボタンはお使いの AWS アカウントで、起動するテンプレートを使って自動的に AWS CloudFormation サービスを開始できるようにするものです。
- 次のスクリーンショットに示すように、CloudFormation スタックにはいくつかのパラメータが必要です。
- Stack name: rsBastion などのスタックの分かりやすい名前を入力します。
- Parent VPC Stack: 前の手順で設定した VPC スタックの CloudFormation スタック名を入力します。CloudFormation コンソールでこの値を検索します (たとえば、rsVPC)。
- Allowed Bastion External Access CIDR: Bastion ホストへの外部 SSH アクセス用に許可された CIDR ブロックを x.x.x.x/x 形式で入力します。
- Key Pair Name: 前提条件セクションで設定したキーペアの名前を選択します。
- Bastion Instance Type: Bastion インスタンスの Amazon EC2 インスタンスタイプを選択します。
- LogsRetentionInDays: Bastion ホストの CloudWatch ログイベントを保持する日数を指定します。
- SNS Notification Email: CloudWatch アラーム通知を送信する SNS トピックを設定するのに使用される E メール通知リストを入力します。
- Bastion Tenancy: Bastion ホストを起動した VPC テナンシーを選択します。
- Enable Banner: SSH を介して Bastion に接続するときにバナーを表示する場合に選択します。
- Bastion Banner: デフォルトを使用する、またはログイン時に表示されるバナーテキストを含むファイルの S3 の場所を指定します。
- Enable TCP Forwarding: True にすると、TCP 転送を有効/無効にするかどうかを選択できます。この値を true に設定すると、TCP 転送 (SSH トンネリング) が有効になります。これは便利ですが、セキュリティ上のリスクもあるため、必要な場合を除いてデフォルトの無効の設定にすることを推奨します。
- Enable X11 Forwarding: X11 転送を有効/無効にするかどうかを選択します。この値を true に設定すると、SSH を介した X Windows が有効になります。X11 転送は便利ですが、セキュリティ上のリスクもあるため、必要な場合を除いてデフォルト (無効) の設定にすることを推奨します。
- Custom Bootstrap Script: オプション。Bastion ホストの設定中に実行するカスタムブートストラップスクリプト S3 の場所を指定します。
- AMI override: オプション。インスタンスに使用する AWS リージョン固有のイメージを指定します。
- すべてのパラメータ値を入力した後、[Next] をクリックします。
- 次の画面で、必要なタグ、IAM ロール、または詳細オプションを入力して、[Next] をクリックします。
- 最終画面で詳細を確認し、以下を選択 ([I acknowledge that AWS CloudFormation might create IAM resources]) してから、[Create] をクリックします。
スタックの作成には数分かかります。AWS CloudFormation のリソースセクションを確認して、このスタックが設定したさまざまなコンポーネントの物理 ID を確認します。
これで、Amazon Redshift クラスターを設定する準備ができました。
Amazon Redshift クラスターを設定する
この CloudFormation テンプレートで、Amazon Redshift クラスター、CloudWatch アラーム、AWS Glue データカタログ、Amazon Redshift IAM ロールなど、必要な設定をセットアップします。以下の手順に従って、VPC でこれらのリソースを作成します。
- 画画面の右上でスタックを作成する AWS リージョンを選択してから、[Next] をクリックします。
- 次の [Launch Stack] ボタンをクリックします。このボタンはお使いの AWS アカウントで、テンプレートを使って自動的に AWS CloudFormation サービスを開始できるようにするものです。
- 次のスクリーンショットに示すように、CloudFormation スタックにはいくつかのパラメータが必要です。
- Stack name: rsdb などのスタックの分かりやすい名前を入力します。
- Environment: Amazon Redshift クラスターの環境ステージ (Development、Test、Pre-prod、Production) を選択します。このパラメータで Production オプションを指定すると、スナップショットの保持期間が 35 日間に、そして enable_user_activity_logging パラメータが true に設定されます。また、CPU 使用率とディスクスペース使用量が高い場合には、CloudWatch アラームが作成されます。このパラメータで Development、Test、Pre-prod を設定すると、スナップショットの保持が 8 日間に、そして enable_user_activity_logging パラメータが false に設定されます。また、ディスクスペース使用量が高い場合にのみ、CloudWatch アラームを作成します。
- Parent VPC stack: 親 VPC スタックのスタック名を指定します。 CloudFormation コンソールでこの値を検索してください。
- Parent bastion stack (オプション): 親 Amazon Linux Bastion ホストスタックのスタック名を指定します。CloudFormation コンソールでこの値を検索してください。
- Node type for Redshift cluster: dc2.large などの Amazon Redshift クラスターのノードのタイプを入力します。
- Number of nodes in Redshift cluster: 2 などの Amazon Redshift クラスターの計算ノードの数を入力します。
- Redshift cluster port: Amazon Redshift クラスターの TCP/IP ポート (8200 など) を入力します。
- Redshift database name: rsdev01 などのデータベース名を入力します。
- Redshift master user name: rsadmin などのデータベースマスターユーザー名を入力します。
- Redshift master user password: マスターユーザーの英数字パスワードを入力します。パスワードには、/、“、\”、\、@ を除く 8〜64 文字の印刷可能な ASCII 文字が含まれている必要があります。1 つの大文字、1 つの小文字、1 つの数字が含まれている必要があります。たとえば、Welcome123 などです 。
- Enable Redshift logging to S3: このパラメータで true を選択すると、スタックは新しく作成した S3 バケットのデータベースのモニタリングを有効にします。
- Max. number of concurrent clusters: 同時実行でスケーリングを行うため、1〜10 の任意の数値を入力します。10 個を超える設定を行うには、Amazon Redshift Limit Increase Form で制限を増やすリクエストを行う必要があります。
- Encryption at rest: このパラメータで true を選択すると、データベースはデータをKMSキーで暗号化します。
- KMS キー ID: 空白のままにしておくと、クラスターはデフォルトの Amazon Redshift KMS を使用して、Amazon Redshift データベースを暗号化します。ユーザーが作成した KMS キーを入力すると、クラスターはユーザーが定義した KMS キーを使用して、Amazon Redshift データベースを暗号化します。
- Redshift snapshot identifier: スナップショットから復元するときだけ、スナップショット識別子を入力してください。新しいクラスターの場合は、空白のままにします。
- AWS account ID of the Redshift snapshot: スナップショットを作成した AWS アカウント番号を入力します。スナップショットが現在の AWS アカウントからのものである場合、または以前に撮影したスナップショットから復元したくない場合は、空白のままにします。
- Redshift maintenance window: Amazon Redshift クラスターのメンテナンスウィンドウを開きます。詳細については、「Amazon Redshift メンテナンスウィンドウ」をご参照ください。たとえば、sat:05:00-sat:05:30。
- S3 bucket for Redshift IAM role: 既存の S3 バケットを入力します。スタックは IAM ロールを自動的に作成し、このバケットへの GET および LIST アクセスで Amazon Redshift クラスターに関連付けます。
- AWS Glue Data Catalog database name: AWS Glue データカタログを作成しない場合は、このフィールドを空白のままにします。関連付けられた AWS Glue データカタログデータベースが必要な場合は、たとえば dev-catalog-01 などの名前を入力します。AWS Glue が利用可能な AWS リージョンのリストについては、「リージョン表」をご確認ください。
- Email address for SNS notification: CloudWatch アラームを送信する SNS トピックを設定するために使用したメール通知リストを入力します。SNS はサブスクリプションの確認メールを受信者に送信します。受信者はこのメールの [Confirm subscription] リンクをクリックして、通知を設定する必要があります。
- Unique friendly name: このタグで一意の分かりやすい名前を指定し、このスタックが管理するすべての AWS リソースに [NAME] タグとして追加します。
- Designate business owner’s email: このタグで、特定の AWS リソースに関連付けられたビジネス所有者の E メールアドレスを指定します。スタックは停止またはメンテナンス通知を、このアドレスに送信します。
- Functional tier: このタグで、アプリケーションの特定のバージョンを指定します。
- Project cost center: このタグで、特定の AWS リソースのプロジェクトに関連付けられたコストセンターを指定します。
- Confidentiality classifier: このタグで、リソースに関連付けられたデータの機密性の分類を指定します。
- Compliance classifier: このタグで、AWS リソースのコンプライアンスレベルを指定します。
- パラメータ値を入力したら、[Next] をクリックします。
- 次の画面で、必要なタグ、IAM ロール、または詳細オプションを入力して、[Next] をクリックします。
- 最終画面で詳細を確認し、以下を選択 ([I acknowledge that AWS CloudFormation might create IAM resources]) して、[Create] をクリックします。
スタックの作成には数分かかります。AWS CloudFormation のリソース セクションを確認して、これらのスタックが設定したさまざまなコンポーネントの物理 ID を確認します。
設定が完了したら、Amazon Redshift クラスターにログインし、いくつかの基本的なコマンドを実行してテストを行います。
Amazon Linux Bastion ホストを使用して、Amazon Redshift クラスターにログインする
以下の手順では、Linux コンピュータを使用し、SSH クライアントを使って Bastion ホストに接続していることを前提としています。さまざまなクライアントを使用した接続方法の詳細については、「Linux インスタンスへの接続」をご参照ください。
- (前提条件セクションで保存した) EC2 キーペアのプライベートキーを、SSH クライアントの Amazon Linux Bastion ホストに接続している場所に移動させます。
- 次のコマンドを使用してプライベートキーのアクセス許可を変更し、公開が行われないようにします。
chmod 400 <private key file name, e.g., bastion-key.pem >
- CloudFormation コンソールで、Amazon Linux Bastion ホストスタックを選択します。[Outputs] を選択し、SSH を Amazon Linux Bastion ホストに適用するために使用する SSHCommand パラメータ値を書き留めておきます。
- SSH クライアントで、ディレクトリを EC2 プライベートキーを保存した場所に変更してから、前の手順の SSHCommand 値をコピーして貼り付けます。
- CloudFormation ダッシュボードで、Amazon Redshift クラスタースタックを選択します。[Outputs] を選択し、PSQLCommandLine パラメータ値を書き留めておきます。これは、psql client を使用して Amazon Redshift データベースにログインするときに使用します。
- EC2 Auto Scaling の起動設定では、Amazon Linux Bastion ホストに PostgreSQL バイナリが既に設定されています。Bastion ホストのコマンドプロンプトで、PSQLCommandLine 値をコピーして貼り付けます。
psql -h ClusterEndpointAddress -p AmazonRedshiftClusterPort -U Username -d DatabaseName
プロンプトが表示されたら、データベースユーザーのパスワードを入力します。
- 次のスクリーンショットに示すように、いくつかの基本的なコマンドを実行してみましょう。
select current_database();
select current_user;
次のステップ
Amazon Redshift クラスターを使用してアプリケーション関連のデータベースオブジェクトを設定する前に、以下を作成することを検討してください。
- アプリケーションスキーマ
- アプリケーションスキーマ内のオブジェクトを作成および変更するためのフルアクセスを持つユーザー
- アプリケーションスキーマへの読み書きアクセス許可を持つユーザー
- アプリケーションスキーマへの読み込み専用アクセス許可を持つユーザー
Amazon Redshift クラスターで設定したマスターユーザーは、Amazon Redshift クラスターの管理にのみ使用してください。アプリケーション関連のデータベースオブジェクトを作成および変更するには、アプリケーションスキーマへのフルアクセスを持つユーザーを使用します。アプリケーションでは、データの保存、更新、削除、取得に読み書きできるユーザーを使用する必要があります。レポート作成アプリケーションまたは読み込み専用アプリケーションでは、読み込み専用のユーザーを使用する必要があります。操作の実行に必要な最小限の権限を付与することは、データベースセキュリティのために推奨されます。
AWS セキュリティのベストプラクティスに従って、AWS CloudTrail、AWS Config、Amazon GuardDuty を確認し、それらを AWS アカウント用に設定します。これらのサービスを組み合わせることで、AWSアカウントのアクティビティをモニタリングできます。たとえば、AWS リソースの設定の評価、監査、評価、悪意のあるまたは不正な動作のモニタリング、リソースに対するセキュリティの脅威の検出を行うことができます。
CloudFormation スタックを削除する
この投稿の CloudFormation スタックがデプロイした AWS リソースの一部では、使用を終了しない限り料金が発生します。
CloudFormation スタックを削除することで、スタックが作成したすべての AWS リソースを削除できます。スタックをすべてクリーンアップするには、CloudFormation コンソールを使用して、作成済みの 3 つのスタックを逆の順序で削除します。
スタックを削除するには:
- CloudFormation コンソールの Stacks ページで、削除するスタックを選択します。スタックは、現在実行中である必要があります。
- スタックの詳細ペインで、[Delete] をクリックします。
- プロンプトが表示されたら、[Delete stack] をクリックします。
スタックの削除が開始された後には、停止することはできません。スタックが DELETE_IN_PROGRESS 状態に進みます。スタックの削除が完了すると、スタックは DELETE_COMPLETE 状態に変わります。AWS CloudFormation コンソールは、デフォルトでは DELETE_COMPLETE 状態のスタックを表示しません。削除されたスタックを表示するには、「削除済みのスタックを AWS CloudFormation コンソールで確認する」で説明されているように、スタックビューフィルターを変更する必要があります。
削除が失敗すると、スタックは DELETE_FAILED 状態になります。ソリューションについては、「スタックの削除の失敗」をご参照ください。
まとめ
この投稿では、Amazon Redshift クラスターの作成を自動化する方法をご紹介しました。また、AWS CloudFormation を使用した AWS セキュリティと高可用性のベストプラクティスに基づく AWS インフラストラクチャが必要であることも説明しました。サンプルの CloudFormation テンプレートをお客様のビジネスニーズに合わせて変更し、せひ活用してください。
このブログ記事にご意見や質問がある場合は、コメント欄をご利用ください。
著者について
Sudhir Gupta はアマゾン ウェブ サービスのパートナーソリューションアーキテクトです。 AWS コンサルティングおよびテクノロジーパートナーと協力して、データウェアハウスやデータレイクプロジェクトに関する指導と技術的支援を行い、AWS を使用している場合のソリューションの価値の向上を目指しています。