Amazon Web Services ブログ

Amazon Redshiftクエリーモニタリングルールでクエリーワークロードを管理する

データウェアハウスのワークロードは多様性で知られています。これは、季節性や、往々にして高コストになりがちな探索的クエリー、SQL開発者のスキルレベルのばらつきなどによるものです。

Amazon Redshiftワークロード管理機能(WLM)を用いて優先度やリソース使用量を柔軟に管理することで、極めて多様なワークロード環境でも高い性能を得ることが可能となります。WLMによって、短時間で完了するクエリーが長時間実行されるクエリーのせいでキューに滞留するような状況を避けることができます。にも拘わらず、あるクエリーが不釣り合いな量のリソースを独占し、システム内のその他のクエリーを圧迫することが依然として起こり得ます。こうしたクエリーは、一般にrogue queryやrunaway queryと呼ばれます(訳者註:rogueはならず者、面倒を起こすといった意味、runawayは暴走の意で、ここでは一方的にリソースを占有し他のクエリーに影響を及ぼすクエリーを指します)

WLMは、メモリー使用量を制限し、タイムアウトを用いてクエリーを別のキューに移動させる機能を持ちますが、ずっと粒度の細かいコントロールができることが望ましいことは論を俟ちません。クエリーモニタリングルールを用いて、リソース使用量のルールを作成し、クエリーのリソース使用量を監視し、それらがルールを犯した時のアクションを決めることが可能になりました。

ワークロード管理における同時並列性とクエリーモニタリングルール

Amazon Redshift環境では、単一クラスターに対し最大500まで同時接続することができます。性能指標であるスループットは一般に一時間あたりのクエリー数として表現されますが、MySQLのような行指向データベースであれば、同時接続数を増やすことによってスケールします。Amazon Redshift環境では、ワークロード管理(WLM)によって、同時接続数とは異なる方法でスループットを最大化します。WLMは二つの部分があります。キューと同時並列性です。キューはユーザーグループまたはクエリーグループのレベルでのメモリー割り当てを可能にします。同時並列性(またはメモリースロット)は、この割り当てをさらにどのように分割し、個々のクエリーにメモリーを割り当てるかを制御します。

例えば、同時並列性10の1つのキューがある(メモリー割り当て100%)と仮定しましょう。これは、個々のクエリーは最大10%のメモリーの割り当てを受けることを意味します。もしクエリーの大半が20%メモリーを必要とした場合、これらのクエリーはディスクにスワップアウトし、スループットの劣化をもたらします。しかし、もし同時並列性を5に下げた場合、個々のクエリーは20%のメモリー割り当てを受けることができるため、トータルのスループットは高くなり、SQLクライアントへのレスポンスも全体的に高速になります。高い同時並列性がよりよいパフォーマンスに繋がると考えてしまうことは、行指向のデータベースを列指向に切り替える時に陥りがちな典型的な落とし穴の一つです。

同時並列性について理解したところで、クエリーモニタリングルールについて掘り下げていきましょう。リソース使用量に基づくルールと、それに違反した場合に取るアクションを定義します。当該クエリーによるCPU使用量、クエリー実行時間、スキャンされた行数、返された行数、ネステッドループ(Nested loop)結合など、12の異なるリソース使用量メトリクスを利用できます。

それぞれのルールは最大3つの条件(述語)と、一つのアクションを持ちます。

述語は、メトリック、比較演算子(=、<または>)、値で構成されます。あるルール内の全ての述語がマッチすると、そのルールのアクションがトリガーされます。ルールアクションには、ログ(記録)、ホップ(次のキューへの移動)、アボート(終了)があります。

これにより、はた迷惑なクエリーを、より深刻な問題が出来する前に捕捉することが可能になります。ルールはアクションをトリガーしてキューを解放し、スループットと応答性を改善します。

例えば、短時間実行クエリー専用のキューのために、60秒を超えて実行し続けるクエリーをアボートするルールを作ることができます。設計のよくないクエリーを追跡するために、ネステッドループを含むクエリーを記録する別のルールを作ることもできます。Amazon Redshiftコンソールには、簡単に始められるよういくつかのテンプレートが事前定義されています。

シナリオ

クエリーモニタリングルールを使って、単純なロギングからクエリーのアボートまで、幅広いクエリーレベルアクションを行うことができます。また、全てのアクションはSTL_WLM_RULE_ACTIONテーブルに記録されます。

それでは、以下の三つのシナリオを用いて、クエリーモニタリングルールをどのように使うかを見ていきましょう。

シナリオ1:アドホッククエリーに潜む非効率なクエリーを制御するには?

二つの大きなテーブルを結合するようなクエリーは、何十億、あるいはそれ以上の行を返す可能性があります。十億行を超える行を返すクエリーをアボートさせるルールを設定することで、アドホッククエリーの安全性を担保することができます。このルールは、論理的には以下のようになります。

IF return_row_count > 1B rows then ABORT

以下のスクリーンショットの設定では、十億行を超える行を返すBI_USERグループ内のクエリーはすべてアボートします。

シナリオ 2: 非効率で、CPUインテンシブなクエリーを制御するには?

CPUスパイクをもたらすクエリーが、必ずしも問題というわけではありません。しかし、高いCPU使用量と長いクエリー実行時間を併せ持ったクエリーは、実行中の他のクエリーのレイテンシーを悪化させます。例えば、高いCPU使用率を示し続ける非効率なクエリーが長時間実行されている場合、それは誤ったネステッドループ結合のせいかも知れません。

こうしたケースでは、10分間にわたって80%以上のCPU使用率を示しているクエリーをアボートさせるルールを作成することで、クラスターのスループットと応答性を上げることができます。このルールは、論理的には以下のようになります。

IF cpu_usage > 80% AND query_exec_time > 10m then ABORT

以下のスクリーンショットの設定では、10分間にわたってCPU使用率が80%を超えているクエリーはすべてアボートします。

80%以上のCPU使用率を5分以上続けるクエリーを記録し、10分以上続いた場合はアボートするよう、ルールを拡張することもできます。このルールは、論理的には以下のようになります。

IF cpu_usage > 80% AND query_exec_time > 5m then LOG and IF cpu_usage > 80% AND query_exec_time > 10m then ABORT

以下のスクリーンショットの設定では、5分間にわたってCPU使用率が80%を超えているクエリーは記録され、10分間にわたってCPU使用率が80%を超えているクエリーはすべてアボートします。

シナリオ 3:

進捗していないクエリーを監視し、記録するには?

例えば、ミックスワークロード環境では、ETLジョブがS3から大量のデータを抽出し、Amazon Redshiftにロードしているケースがあります。データ抽出中、キューでスタックして、全く進捗していないように見えるCOPYコマンドが見つかるかも知れません。このようなクエリーはデータ抽出を遅延させ、ビジネス上のSLAに悪影響を与える可能性もあります。

クエリーを追跡し記録するルールを作ることで、こうしたクエリーを捕捉することができます。低いCPU使用率のまま長時間実行されているクエリーを見つけ出すルール、例えば1%のCPU使用率で10分間動作しているようなクエリーを記録するルールを作成します。このルールは、論理的には以下のようになります。

IF cpu_usage < 1% AND query_exec_time > 10m then LOG

以下のスクリーンショットの設定では、10分間にわたってCPU使用率が1%未満であるクエリーが記録されます。

まとめ

Amazon Redshiftは強力かつフルマネージドなデータウェアハウスであり、高いパフォーマンスと低いコストの双方をクラウド上でご提供します。しかしながら、クラスターリソースを独り占めするクエリー(rogue queries)はユーザーエクスペリエンスに悪影響を及ぼします。

このポストでは、クエリーモニタリングルールがこの種のクエリーにどのように対処可能かを見てきました。これらの内容は、ミックスワークロード環境でのクラスター性能とスループットを最大化し、円滑なビジネス遂行を実現する上で役立つはずです。

ご質問やご提案がありましたら、以下にコメントを残していただけますと幸いです。

(翻訳はAWS Japanプロフェッショナルサービス仲谷が担当しました。原文はこちら

DynamoDB Accelerator (DAX) が正式にサービス開始しました

今年の初め頃 Amazon DynamoDB AcceleratorDAX)について紹介をしました。DAXはフルマネージドのキャッシュサービスでDynamoDBテーブルの前段(論理的に)に置かれます。DAXはキャッシュされたデータに対するリクエストをマイクロ秒単位で返すため、読み込みワークロードに最適です。DAXはアプリケーションコード内ではDynamoDB APIと互換性を保つ様にサポートしており、シームレスで使いやすいようにデザインしています。管理することはDAXクラスタを作成して既存の読み取りと書き込みのターゲットとして使用するだけです。パッチ適用、クラスタメンテナンス、キャッシュデータの複製、または障害管理について心配する必要はありません。

本日から利用可能
今日DAXが正式に利用可能になったことをお知らせします。DAXが利用可能なAWSリージョンを追加拡張し、プレビューの期間にパフォーマンスと可用性をチューニングしました。

5つのリージョンで利用可能 – 現在 DAXはUS East (Northern Virginia)、EU (Ireland)、US West (Oregon)、Asia Pacific (Tokyo)、US West (Northern California) の5つの地域で利用可能です。

In Production – プレビュー期間内にDAXを本番で使用しているユーザーもおり、DAXをアプリケーションに追加するのが楽で今ではアプリケーションの速度が10倍速くなってたという声を頂いています。

Getting Started with DAX
以前の記事(翻訳版はこちら)で紹介したように、DAXを使用して既存のDynamoDBアプリケーションを高速化するのは簡単です。必要なリージョンにDAXクラスタを作成し、 DAX SDK for Javaを利用するようにアプリケーションを更新します(コード内の呼び出し方は同じですが、ライブラリの置き換えを行う事です)。SDKを構成してクラスタにエンドポイントを使用するようにします。リードスルー/ライトスルーキャッシュとして、DAXはすべてのDynamoDB読み取り/書き込みAPIをシームレスに処理します。

私たちは他の言語のSDKのサポートも取り組んでおり、利用可能になった時点で追加情報を共有します。

価格について

US East (Northern Virginia) と US West (Oregon) の各地域で、時間あたり$ 0.269から始まる料金
でクラスター内の各ノード(詳細については、 DynamoDBの価格を参照)を1時間単位でお支払いいただきます。DAXでは、クラスタ内の各ノードが高可用性のための読み取りターゲットおよびフェールオーバーターゲットとして機能します。DAX SDKはクラスタを認識しており、クラスタ内のすべてのノードに対してラウンドロビンで要求を発行し、クラスタのキャッシュリソースを最大限に活用できるようにします。

DAXは読み取りトラフィックの急激な急上昇を容易に処理できるため、テーブルのプロビジョニングされたスループットの量を減らすことができ、結果としてマイクロ秒で結果を返しながら全体のコストを削減できます。

最後にAmazon.comのCTOであるWerner Vogelsが書いたブログを紹介させて頂きます。

Amazon DynamoDB Accelerator (DAX): Speed Up DynamoDB Response Times from Milliseconds to Microseconds without Application Rewrite.

Tinder、Careem、そしてCanon INC. の事例についてもご紹介していますので、ぜひご覧ください。

Jeff;

(翻訳はSA成田が行いました。原文はこちら

新機能 – Amazon WorkSpaces 用のマネージド型デバイスの認証

Amazon WorkSpaces では、ウェブおよびさまざまなデスクトップおよびモバイルデバイスから、クラウド上の仮想デスクトップにアクセスできます。この柔軟性により、WorkSpaces はユーザーが自己所有しているデバイス (BYOD または Bring Your Own Device とも呼ばれます) を使用できる環境に最適です。このような環境では、組織は WorkSpaces にアクセスできるデバイスを管理する機能を必要とする場合があります。たとえば、コンプライアンスまたはセキュリティポリシー要件を満たすため、クライアントデバイスのオペレーティングシステム、バージョン、またはパッチレベルに基づいてアクセスの制御が必要になる場合があります。

マネージド型デバイスの認証
本日、WorkSpaces 用のデバイス認証の提供を開始します。これにより、デジタル証明書を使用して、Apple OSX および Microsoft Windows からのクライアントアクセスを管理できるようになりました。また、iOS、Android、Chrome OS、ウェブ、およびゼロクライアントデバイスからのアクセスを許可またはブロックする選択もできます。ポリシーを実装して、許可するデバイスタイプとブロックするデバイスタイプを、パッチレベルまで管理できます。アクセスポリシーは、各 WorkSpaces ディレクトリに対して設定されます。ポリシーの設定後、クライアントデバイスから WorkSpaces への接続リクエストが評価され、ブロックまたは許可されます。この機能を利用するには、Microsoft System Center Configuration Manager またはモバイルデバイス管理 (MDM) ツールを使用して証明書をクライアントデバイスに配布する必要があります。WorkSpaces コンソールからアクセスコントロールオプションを設定する方法を次に示します。

クライアントが接続を許可されていない場合は、次のようになります。

 

今すぐ利用可能
この機能は、WorkSpaces が利用できるすべてのリージョンで利用できます。

Jeff;

AWS Mobile Hub で JavaScript 開発を改善する

はじめに

JavaScript エコシステムが成長していくなかで、私達はモバイルおよびハイブリットアプリを構築するお客様を支援する取り組みを続けています。本日、 AWS Mobile Hub に Hosting and Streaming 機能をリリースしました。この機能は、Amazon S3 と Amazon CloudFront を使用するモバイル Web サイトのテスト及びプロダクション環境へのデプロイを自動化します。また、標準設定ファイルと SDK を使用する際の設定ワークフローを簡略化します。

この新しい機能によって、 JavaScript 開発者は事前設定された AWS アーキテクチャを起動したり、 Mobile Hub プロジェクトをビルドできます。また、集中管理された設定と事前ダウンロードされた SDK を使用して、ワンクリックでグローバル Web サイトを作成できます。

(more…)

7 月の AWS Black Belt オンラインセミナーのご案内

こんにちは。ソリューションアーキテクトの岡本です。AWS Black Belt オンラインセミナー 7 月の配信についてご案内させて頂きます。今月はAmazon Connect, AWS Shield, AWS Step Functions と Black Belt 初開催となるサービスの紹介が多く予定されておりますので、是非とも最新情報の習得にお役立ていただければと思います。またその他にも AWS Lambda, AWSの運用監視といった実用的な技術情報をお届けいたします。

サービスカット
7/5(水) 18:00-19:00 Amazon Connect
7/18(火) 12:00-13:00 AWS Shield   ※ 通常の開催日時と異なりますのでご注意ください
7/19(水) 18:00-19:00 AWS Lambda
7/26(水) 18:00-19:00 AWS Step Functions

ソリューションカット
7/25(火) 12:00-13:00 Monitoring on AWS -AWS運用監視-

お申し込みは、それぞれ上記のリンクより行って頂けます。キャンセルの際も連絡不要ですので是非お早めにご登録ください。Speaker、Staff 一同みなさまのご参加をお待ちしております。

Amazon EC2 スポットインスタンスを利用した Amazon ECSクラスターの起動

この記事は気前よく次の方から寄贈されました。

Chad Schmutzer, Solutions Architect Shawn O'Conner, Enterprise Solutions Architect
Chad Schmutzer
Solutions Architect
Shawn O’Connor
Solutions Architect

 

本日、Amazon EC2 Container Service(Amazon ECS)が、ECSコンソール上から直接 Amazon EC2 Spot Instances上に ECSクラスターを起動させる機能をサポートする事を発表しました。

スポットインスタンスを利用すると、Amazon EC2の余剰コンピュートキャパシティに入札することが出来ます。スポットインスタンスは通常、オンデマンドインスタンスよりも50-90%安い価格です。スポットインスタンス上でECSクラスターを起動することで、既存のコンテナ化されたワークロードの実行コストを削減したり、同じ予算を維持しながら、コンピュートキャパシティを2倍から10倍に増やすことが可能です。もしくは、その両方を実現することもできます!

スポットインスタンスを利用する場合、インスタンス時間あたりに支払う価格を指定します。現在のスポットプライスを上回る価格で入札している間、スポットインスタンスは起動します。スポットプライスの上昇によりインスタンスが回収された場合、インスタンスが実行された分の時間は請求されません。

ECSコンソールはスポットインスタンスをデプロイするために、 Spot Fleetを利用します。Spot Fleetは、利用者にとって最も良い価格となる様にスポットインスタンスを起動し、コンテナ化したアプリケーションの為にリクエストしたターゲットキャパシティ(インスタンスやvCPUの数で表現される)をデプロイしようします。スポットプライスや、空き容量の変化によってスポットインスタンスが回収された場合、Spot Fleetはターゲットキャパシティを維持しようとします。

コンテナはSpot Fleetが大きくなる多様なリソースプールに適してします。Spot Fleetを利用すると複数のスポットインスタンスプール(インスタンスタイプとアベイラビリティゾーンの組み合わせ)に渡ってキャパシティをプロビジョニング出来き、アプリケーションの可用性を向上させ、時間経過と共に運用コストを削減できます。ECSが提供する拡張性と柔軟性を備えたコンテナ配置システムとSpot Fleetとの組み合わせはコンテナ化されたワークロードを効率的にデプロイし、わずかなコストであらゆる規模のクラスタを容易に管理できます。

従来は、スポットインスタン上へのECSクラスタのデプロイは手動で行われてました。この記事では、ECSコンソール上からのSpot Fleetとの新しいインテグレーションによって、高い可用性とスケーラビリティをどの様に実現し、コンテナ化したワークロードをどの様にコストを削減するのかを紹介します。また、AWS CloudFormationを利用し、スポットインスタンス上にECSクラスターを構築する方法も紹介します。

 

スポットインスタンスで実行するECSクラスタの作成

AWS マネージメントコンソールを利用してECSクラスタを作成することが可能です。

  1. Amazon ECSコンソールを開きます。 https://console.aws.amazon.com/ecs/
  2. ナビゲーションパネル上でClustersを選択します。
  3. Clustersページでは、Create Clusterを選択します。
  4. Cluster nameに名前を入力します。
  5. インスタンス設定では、プロビジョニングモデルとしてSpotを選択します。

ECS Create Cluster - Spot Fleet

配置戦略の選択

2つの利用可能なSpet Fleet配置戦略はDiversified戦略かLower price戦略です。

ECS Spot Allocation Strategies

Spot Fleetで選択した配置戦略は、利用可能なスポットインスタンスプールからSpot Fleetをどの様に満たすかを決定します。diversified戦略を使用すると、スポットインスタンスは全てのプールにわたって分散されます。lowest price戦略を選択した場合、リクエストで指定された最低価格のプールから取得されます。

各インスタンスタイプ(各インスタンスファミリ内のインスタンスサイズ、例えばc4.4xlarge)、各アベイラビリティゾーン、各リージョンで、キャパシティで別れたプールであり、別々のスポットマーケットであることに注意してください。可能な限り異なったインスタンスタイプとアベイラビリティゾーンにまたがって多様にすることで、fleetの可用性を向上することができます。また、時間の経過とともにスポットプライスが上昇することに対しての反応を低くすることができます。

Spot Fleet Market

Spot Fleetに利用するインスタンスタイプを6種類まで選択可能です。この例では、m3,m4,c3,c4,r3,そしてr4のxlargeを選択しています。

Spot Instance Selection

インスタンスの為に入札価格を入力する必要があります。一般的には、オンデマンドインスタンス価格かそれに近い価格で入札するが良い出発点です。そのスポットプールのインスタンスタイプに支払うつもりがある最大価格が入札価格になります。スポット価格が入札価格と同じ、または下回っている間、スポット価格を支払います。低い価格での入札はコストを低減させ、高い価格での入札はインスタンスの中断の確率を下げます。

クラスターに所属するインスタンスの数を設定します。Spot Fleetはリクエストで特定されたターゲットキャパシティを満たす様にスポットインスタンスを起動しようとします。

最新のECS最適化AMIがSpot Fleetがインスタンス時に使用されます。

ストレージとネットワークの設定を行います。多様性と高可用性を実現する為に、複数のアベイラビリティゾーンとなる様にsubnetを選択する様にします。singleのSpot Fleetでは、同じアベイラビリティゾーンにある複数のサブネットを選択する事はできません。

ECSコンテナエージェントがECSのAPIをコールします。エージェントが実行されるコンテナインスタンスはに、エージェントの所有者を知るためにecsInstanceRole IAMポリシーとロールが必要です。

Spot Fleetを利用するマネージドコンピュート環境を作成した場合、入札、起動、インスタンスの終了するためのSpot Fleet権限を付与したロールを作成しなくてはなりません。このロールはECSコンソールから作成できます。

ECSコンソールでの作用はこれだけです!Spot Instance上で稼働するるECSクラスターを起動する為に作成を選択してください。

スポットインスタンス上で稼働するECSクラスターのデプロイにAWS CloudFormationを利用する

リファレンスアーキテクチャとなるAWS CloudFormationテンプレートを公開しています。このテンプレートはCloudFormationスタックの起動や、スポットインスタンス上でのECSクラスタのデプロイがどれくらい簡単をデモンストレーションします。

CloudFormationテンプレートには 以前投稿したSpotインスタンスの終了通知スクリプトだけではなく、いくつかの追加のロギングやその他のサンプル機能が含まれています。Amazon EC2 Spot Instance GitHub上のレポジトリからCloudFormationテンプレートを見つけることができます。

環境に応じてカスタマイズを実施して試してみてください!

Spot Fleet Architecture

終了のハンドリング

スポットインスタンスでは、指定した価格以上を支払う必要はありません。もしスポット価格があるインスタンスで入札を上回った場合、そのインスタンスは自動的に終了されます。

スポットインスタンスの終了を防ぐための最も良い方法は、コンテナ化されたアプリケーションをフォールトトレラントなアーキテクチャにすることです。加えて、スポットインスタンスの終了通知機能を利用することもできます。それはEC2がスポットインスタンスを終了する前に2分間の警告を提供します。

この警告は、インスタンスメタデータ内の項目を使用して、スポットインスタンス上のアプリケーションで使用可能になります。コンソールを利用してスポットインスタンス上にECSクラスターをデプロイした場合、AWSはインスタンス終了通知を5秒毎に確認するスクリプトをインストールします。通知を検知した場合、スクリプトはコンテナインスタンスの状態をDRAININGにただちにに更新します。

簡略したバージョンのスポットインスタンス終了通知は次の様になります。

#!/bin/bash

while sleep 5; do
  if [ -z $(curl -Isf http://169.254.169.254/latest/meta-data/spot/termination-time) ]; then
    /bin/false
  else
    ECS_CLUSTER=$(curl -s http://localhost:51678/v1/metadata | jq .Cluster | tr -d \")
    CONTAINER_INSTANCE=$(curl -s http://localhost:51678/v1/metadata \
      | jq .ContainerInstanceArn | tr -d \")
    aws ecs update-container-instances-state --cluster $ECS_CLUSTER \
      --container-instances $CONTAINER_INSTANCE --status DRAINING
  fi
done

コンテナインスタンスをDRAININGにセットすると、ECSによって、新しいタスクのコンテナインスタンスへの配置がスケジュールされなくなります。リソースが利用可能な場合、代替サービスタスクはクラスター内の別のコンテナインスタンスで開始されます。コンテナインスタンスのドレイニングにより、クラスタ内のタスクに影響を与えない様にクラスターからコンテナインスタンスを削除することができます。PENDING状態にあるコンテナインスタンス上のサービスタスクは直ちに停止します。

コンテナインスタンス上でRUNNING状態にあるサービスタスクは停止し、サービスデプロイ設定パラメータであるminimumHealthyPercentとmaximumPercentに従い、再配置されます。

実際のスポットインスタンス上のECS

どの様にお客様がスポットインスタンス上でECSクラスターをすでに起動しているか知りたいですか?Mapboxにいる友人はこの様にしています。

Mapboxはカスタムマップをデザインし、公開するためのプラットフォームです。同社はマップを作成する為に1日に1億マイルを超えるセンサーデータの収集と実行するバッチプロセッシングアーキテクチャー全体の実行にECSを利用しています。彼らはスポットインスタンスを使用したECSを利用することでバッチプロセッシングアーキテクチャを最適化しています。

Mapboxプラットフォームは5000を超えるアプリケーションを起動し、各月で2億ユーザ以上に達しようとしています。それらのバックエンドはECS上で動いていて、1日あたり13億リクエスト以上を処理しています。Mapbox社の最近のECSへのマイグレーションについてより学びたい場合は、同社のブログである、We Switched to Amazon ECS, and You Won’t Believe What Happened Next. を読んでください。そして、フォローアップ記事である、 Caches to Cashでは、EC2のコストを50-90%節約しながら、同社がスポットインスタンス上でどの様にプラットフォーム全体を動かしているのかを学んでください。

結論

スポットインスタンスを利用してスケールし、コスト効率よくコンテナ化したアプリケーションを動かす事について、私たちと同じ様に読者の方も興奮している事を願います。さらなる情報については、次のページを確認してください。

コメントや提案があるかたは下記よりコメントをください。

原文:Powering your Amazon ECS Cluster with Amazon EC2 Spot Instances(翻訳:SA浅野)
 

【開催報告】CTO Night 2017 Spring @ AWS Summit Tokyo

こんにちは。ソリューションアーキテクトの篠原英治(@shinodogg)です。

Amazon.comのCTOであるWerner Vogels(@werner)の3年振りの来日に伴いまして、AWS Summit Tokyoの期間中に、日本の著名なCTOの皆さまにお集まりいただき、 CTO Night 2017 Spring (#CTONight) を開催しました。
CTO Night 2017 Spring with Amazon CTO

 

 

■ CTOs Round Table

 

少人数の日本のCTOの皆さまをお招きし、AmazonのCTOとしてAmazonのイノベーションをリードするWernerとラウンドテーブル形式で最新の技術動向についてディスカッションを行いました。

CTOs Round Table w/ Werner

 

Wernerから、AmazonがAWSというクラウドビジネスを始めたことで、1テクノロジー企業から、テクノロジープロバイダーとなり、CTOとしてどのように全社のテクノロジーをドライブしてきたか?といったトピックからはじまり、Wernerのブログ(Working Backwards – All Things Distributed)でも詳細に解説されている、新しくサービス/プロダクト/機能を開発する際にAmazon社内で取られている方法論など、白熱した議論が展開されました。

 

ビジネスやサービスが多岐に渡るようになるにつれ、技術的なキャッチアップが困難になり、CTOとしてどのようにそれに取り組むべきか?というトピックに関しては、Werner自身は週4-6時間はメールやミーティングなどを一切シャットアウトして集中してハンズオンで新しい技術を習得しており、そこで得たものをコードレビューやプロダクトチームとのディスカッションに活かしている、とのことでした。CTOが社内で取り扱う全ての技術分野の専門家になることは厳しい部分があるものの、エンジニアチームを、進化する同じ船に乗せるといった意味で開発者と会話をする際の姿勢などについて、日本のCTOの皆さまのエピソードもご紹介いただきました。

CTO Round Table

 

プログラミング言語を選定する上での考え方や、サーバーのroot権限をCTO自らが持つべきか?など様々なトピックに関するディスカッションはあっという間に時間が経過し、Werner自身も非常に有意義だったと申しておりました。ご参加いただいたCTOの皆さまありがとうございました!

Japanese CTOs w/ Werner

 

 

■ Startup CTO Night with Amazon CTO – Werner Vogelsによる公開技術レビュー

 

2014 年 7 月にシークレットイベントとして開催され大盛況だったWernerによる 『Startup CTO Night with Amazon CTO』を3 年ぶりにAWS Dev Day Tokyoにて行いました。

Startup CTO Night

 

 

– CHIKAKU CTO Kenta Kuwata

IoTサービスである、まごチャンネルを支えるアーキテクチャについて、技術選定基準なども含めて詳細にご紹介いただきました。

CHIKAKU CTO

 

Wernerからはその技術のみならず、ビジネスモデルや収益構造に関する質問があがり、そのような点についても納得感のあるご回答をしてくださいました。

Werner vs Kuwata CTO

 

 

– AXELSPACE CDO Naoki Miyashita

宇宙というフィールドでビジネスを展開し、そこで収集される膨大な量の画像データをどのように取り扱って、どのように活かしていくか?そのためにどのような観点でどのような技術を選定しているか?といったところをご紹介いただきました。

AxelSpace Miyata CTO

 

Wernerからは収集したデータのみならず、衛星そのものに関する質問もあがりましたが、宇宙システムの専門家である宮下様はその全ての質問に対して詳細にご回答くださいました。

Werner vs Miyata CTO

 

 

– REPRO CTO Tomohiro Hashidate

TechCrunch Tokyo CTO Night 2016 powered by AWS』で  “CTO of the Year” に輝いたRepro CTOの橋立様からは、AWS Lambda, Amazon ECS, EC2 Spot Instancesといったサービスをフル活用した非常に実践的なアーキテクチャをご紹介いただきました。

Repro Hashidate CTO

 

Wernerからは技術選定に関する質問などが上がり、技術者同士のハイレベルで且つ実務的なディスカッションが展開されました。

Werner vs Hashidate CTO

 

ご登壇いただいたCTOの皆さまとWernerの集合写真です。

CTO Night with Amazon CTO

 

 

■ Amazon CTOが考えるCTOとは?

 

以前よりInfinity Ventures Summit様と共催させていただいている”IVS CTO Night and Day”の目玉コンテンツであるアンカンファレンスではCTOに関する議論を続けており、その中で Patterns of CTO Things といったアウトプットにも取り組んでおりますが、今回はその輪にAmazon CTOのWernerが加わる形で、SHINAGAWA GOOSにて、約100名のCTOの皆さまにお集まりいただき、CTOの役割やあるべき姿についてディスカッションを行いました。

CTO Night with Werner

 

一つ一つのトピックに関して、会場からも多くのご意見やご質問などをいただき、大変盛り上がりました。

CTO Night @masuidrive

 

ディスカッションの様子はTwitterの #CTONight ハッシュタグでも追うことができますので、是非ご覧になっていただければと思います。

#CTONight Tweet

 

Wernerが3年前と変わらず包み隠すことなく真摯に物事を語る姿勢は多くのCTOの皆さまが感銘を受けたところだと思いますが、私自身もこのような場をモデレートできることに感謝をしていて、次回Wernerが来日する際も、このCTO Nightをデリバーさせていただきたいと思っています。

#CTONight

 

 

■ CTO Night Party

 

Wernerが乾杯の音頭をとり、CTOの皆さまと盛り上がりました!

kampai by werner

 

ご参加いただきました皆さまありがとうございました!

#CTONight

#CTONight

#CTONight

 

 

■ 最後に

AWSのStartupチームは今後も一丸となってお客様のお力になれるように活動していきますので、引き続きよろしくお願い致します!

#CTONight staff

AWS が 7 年連続でガートナーのサービスとしてのインフラストラクチャ (IaaS) に関するマジッククアドラントでリーダーとして認定される

AWS での各製品計画セッションはお客様を中心に進められています。当社は最善を尽くしてお客様の声に耳を傾け、それに基づいて将来の開発のロードマップを構築しています。ロードマップの項目の約 90% はお客様のリクエストに基づくものであり、お客様から寄せられた特定のニーズや要件を満たすよう設計されています。

このお客様主導のイノベーションにより、7 年連続でガートナーのサービスとしてのインフラストラクチャ (IaaS) に関するマジッククアドラントで当社が「リーダー」クアドラントで最上位の地位を確保し、最も高い実行力と先見性のあるビジョンを持っていると評価されたものと確信しています。

詳細については、レポートの全文をお読みください。このレポートには多くの詳細が含まれており、お客様がクラウドプロバイダーを選ぶときに確認する機能や要素がよくまとめられています。

Jeff;

新機能 – Auto Scaling for Amazon DynamoDBについて

Amazon DynamoDBには幅広い業界やユースケースを含む10万人以上の多くのお客様がいます。 お客様は世界中の16の地域で、DynamoDBの一貫性のあるパフォーマンスを利用する事が出来ます。 最近の傾向は、DynamoDBを使用してサーバレスアプリケーションと組み合わせるお客様です。 この使い方は非常にマッチします:DynamoDBでは、サーバーのプロビジョニング、OSとデータベースのソフトウェアパッチ適用、または高可用性を確保するためのAZゾーン間のレプリケーションの設定などを考える必要はありません。テーブルを作成してデータを追加するだけでDynamoDBが処理するようにします。

DynamoDBにはプロビジョニングキャパシティーユニットモデルが用意されており、アプリケーションで必要とされる読み書き容量を設定できます。 これによりサーバの考え方から解放され、簡単なAPIコールまたはAWS Management Consoleのボタンをクリックしてテーブルのプロビジョニングを変更できるようになりましたが、多くのお客様はDynamoDBの容量をさらに簡単に管理できるように望んでいました。

本日、DynamoDBのAuto Scalingを導入して、テーブルとグローバルセカンダリインデックス(GSI)の容量管理を自動化できるようになりました。 維持をしたい使用率を指定し、読み書き容量の上限と下限を指定するだけです。 DynamoDBは、Amazon CloudWatchアラームを使用して消費量を監視し、必要に応じてプロビジョニングされた容量を調整します。 Auto Scalingは、すべての新しいテーブルとインデックスに対してデフォルトでオンに出来ます(但しIAM権限の事前準備が必要です)。また、既存のテーブルやインデックスに対しても設定できます。

あなたが常にマネジメントコンソールに張り付いていなくても、DynamoDB Auto Scalingはテーブルとインデックスを監視して、アプリケーショントラフィックの変化に応じて自動的にスループットを調整します。 これによりDynamoDBデータの管理が容易になり、アプリケーションの可用性を最大化しDynamoDBのコストを削減するのに役立ちます。

どのような機能か早速御覧ください。

Using Auto Scaling

新しいテーブルを作成するときに、DynamoDB Consoleにデフォルトパラメータセットが提示されるようになりました。 あなたはそのまま利用する事も、「Use default settings」のチェックを外して独自のパラメータを入力することもできます

独自にパラメータを設定する方法は以下の通りです。

Target utilizationは、消費容量とプロビジョニングされた容量の比率で表されます。 上記のパラメータは、読み取りまたは書き込み要求が増えた時でも消費される容量の2倍になるように十分な空き容量を確保します(DynamoDBの読み書き操作とプロビジョニングされた容量の関係の詳細については容量単位の計算を参照してください)。 プロビジョニングされた容量の変更は、バックグラウンドで行われます。

Auto Scaling in Action

この重要な新機能が実際に動作するのを見るために、「Getting Started Guide」の指示に従いました。 私は、新しくEC2インスタンス起動し、AWS SDK for Pythonを設定(sudo pip install boto3)を実行し利用するための設定(aws configure)を行いました。 次に、PythonとDynamoDBのコードを使用していくつかのデータを含むテーブルを作成し、読み込みと書き込みの各容量を5ずつ手動で設定しました。

CloudWatchメトリクスで綺麗な直線を得るために私は急いで休憩を取ったので、AutoScalingの効果を示すことができました。 負荷を適用する前のメトリクスは次のとおりです。

私はステップ3のコードを変更して、1920年から2007年の範囲でランダムにクエリを発行し、1〜2分後に読み取りメトリクスを確認しました。

消費された容量はプロビジョニングされた容量よりも多く、その結果多くの読み込みリクエストに対してスロットルが発生します。 AutoScalingが実行される!

私はコンソールに戻ってテーブルのCapacityタブをクリックした。 Read capacityをクリックし、デフォルト値を受け入れ、Saveをクリックしました

DynamoDBは新しいIAMロール(DynamoDBAutoscaleRole)とCloudWatchアラームのペアを作成して、読み取り容量のAuto Scalingを設定しました。

DynamoDB Auto Scalingはアラームのしきい値を管理し、スケーリングプロセスの一部としてアラームのしきい値を上下に調整します。 最初のアラームがトリガーされ追加の読み取り容量がプロビジョニングされている間にテーブルの状態が[Updating]に変更されました。

この変更は、数分で読み取りメトリクスに表示されました。

私は変更されたクエリスクリプトをいくつか実行し、追加の容量がプロビジョニングされているのを見てみました。

私はすべてのスクリプトを停止しスケールダウンアラームが発生するのを待ちました。:

翌朝Scaling activitiesを確認し、アラームが夜の間に何度かトリガされたことを確認しました:

これはメトリクスにも表示されていました。

これまでは、あなたが期待した使用量についてプロビジョンキャパシティユニットを十分に設定し、余裕を持たせる設定(青い線と赤い線の間のスペース)を行うことで、このような状況に備えることができました。若しくはプロビジョンキャパシティユニットを少なくしすぎ、監視するのを忘れてトラフィックが増えた時に容量が使い果たされる可能性がありました。 Auto Scalingを使用すると、リクエストが増加し必要な場合は自動的に増やし、もう不要な時は自動的に下げる事が可能です。

Things to Know

DynamoDB Auto Scalingは、ある程度予測可能である程度定期的に変化する要求レートに対応するように設計されています。予期せぬバーストした読み取りアクティビティに対応する必要がある場合は、Auto ScalingをDAXと組み合わせて使用​​する必要があります(詳細は、Amazon DynamoDB Accelerator(DAX) – Read heavyなワークロード向けインメモリ型キャッシュクラスタを参照してください)。また、AWS SDKを利用したアプリケーションは、スロットリングされた読み込み要求と書き込み要求を検出し、適切な遅延の後に再試行します。

(補足:Auto Scaling実行され実際に使える容量が増えるまでにはどうしても時間が掛かります。その為瞬間的なリクエスト増加に対応するのは難しいケースがあります。その為、瞬間的なリクエスト増加に対応するにはDAXなどのソリューションと組み合わせる事や、瞬間的にスロットリングが発生してもリトライで処理を継続させる事により影響を最小限にする処理が必要です。)

 

私はDynamoDBAutoscaleRoleを先に述べました。このロールは、テーブルとインデックスのスケールを上下させるために必要な権限をAuto Scalingに提供します。このロールと権限の詳細については、「Grant User Permissions for DynamoDB Auto Scaling」を参照してください。

Auto ScalingにはAuto Scalingポリシーを有効または無効にする機能を含むCLIとAPIの完全なサポートがあります。トラフィックに予測可能な時間的なスパイクがある場合(ゲームなどであれば決まった時間に発生するイベントなど)は、プログラムによって自動スケーリングポリシーを無効にし、一定期間高いスループットをプロビジョニングしてから、後でAuto Scalingを再度有効にすることができます。

DynamoDBの制限ページに記載されているように、プロビジョニングされた容量は、必要に応じて必要なだけ増やすことができます(アカウントごとに設定されている上限内にて)。各テーブルまたはグローバルセカンダリインデックスごとに1日に最大9回まで容量を減らすことができます。(その為、あまり頻繁に容量を下げる設定にしてしまうとこの回数を使い切ってしまいその後下げる事が一時的に出来なくなる可能性があります。)

実際に実行された容量は通常のDynamoDBの価格が掛かります。さらに節約するためにDynamoDBのリザーブドキャパシティユニットを購入することもできます。

今すぐ利用可能
この機能は現在すべての地域で利用可能で、今すぐ使用することができます!

Jeff;

(この記事はSA 成田が翻訳しました。原文はこちら

 

 

 

EC2 Run Command を使用した、SSH アクセスなしでの大規模なインスタンスの管理

Ananth Vaidyanathan (EC2 Systems Manager のシニア製品マネージャー) および Rich Urmston (Pegasystems のクラウドアーキテクチャのシニアディレクター) によって書かれた次のゲスト投稿は、EC2 Run Command を使用して、SSH を用いることなく EC2 インスタンスの大量のコレクションを管理する方法を示しています。

Jeff;


多くの場合、エンタープライズは管理対象環境および数千の Amazon EC2 インスタンスを持っています。Secure Shell (SSH) について悩むことなく、システムをセキュアに管理することが重要です。Amazon EC2 Systems Manager の一部である Run Command では、制御され管理可能な方法で、インスタンス (またはタグを使用してインスタンスのグループ) でリモートコマンドを実行できます。これは、Run Command サービスに毎日依存する Pega Cloud オペレーションにとって、生産性を向上するための優れた追加機能です。標準の IAM ロールとポリシーを通じた Run Command の制御、ドキュメントの定義による入力パラメーターの使用、コマンド出力を返すために使用される S3 バケットの制御が可能です。また、他の AWS アカウントや一般ユーザーとドキュメントを共有することもできます。全体として、Run コマンドは優れた一連のリモート管理機能を提供します。

SSH よりも優れる
Run Command が SSH よりも優れたオプションであり、Pegasystems がこれを主要なリモート管理ツールとして採用した理由を示します。Run Command にかかる時間が短い – インスタンスへのセキュアな接続では、接続するジャンプボックス、ホワイトリストに登録する IP アドレスなど、いくつかのステップが必要です。Run Command では、クラウド Ops エンジニアはノートパソコンから直接コマンドを呼び出すことができ、キーやインスタンス ID を探す必要はありません。代わりに、システムセキュリティは AWS 認証、IAM ロールとポリシーに依存します。Run Command オペレーションは完全に監査される – SSH では、実行できる操作に実質的な制御はなく、監査証跡もありません。Run Command では、呼び出された各オペレーションは CloudTrail で監査されます。これには、呼び出し元のユーザーの情報、コマンドが実行されたインスタンス、パラメーター、およびオペレーションのステータスが含まれます。お客様は完全なコントロールを持ち、システムでエンジニアが実行できる機能を制限することができます。Run Command には管理する SSH キーがない – Run Command は標準の AWS 認証情報、API キー、および IAM ポリシーを利用します。エンジニアは、企業認証システムとの統合を通じて、企業の認証情報と ID に基づいてシステムとやり取りします。Run Command は同時に複数のシステムを管理できる – Linux サービスのステータスの確認や、マネージドインスタンスのフリート全体のログファイルの取得などの簡単なタスクでも、SSH を使用すると手間がかかります。Run Command では、ID またはタグでインスタンスのリストを指定し、指定したフリート全体に対して並行してコマンドを呼び出すことができます。これにより、最小の Pega クラスターよりも多くをトラブルシューティングまたは管理する場合に、高い利用価値が得られます。Run Command により複雑なタスクの自動化が簡単に – 操作タスクの標準化では、正確なコマンドを記述する詳細な手順のドキュメントやスクリプトが必要です。フリート全体でこうしたスクリプトを管理またはデプロイするのは面倒です。Run Command ドキュメントにより、複雑な関数をカプセル化し、ドキュメント管理とアクセスコントロールに対応するための簡単な方法が得られます。ドキュメントは、AWS Lambda と組み合わせると、複雑なタスクを処理するための強力なオートメーションプラットフォームを提供します。

例 – Docker コンテナの再起動
Docker コンテナの再起動に使用されるシンプルなドキュメントの例を示します。これには 1 つのパラメーター (再起動する Docker コンテナの名前) があります。ドキュメントは AWS-RunShellScript メソッドを使用してコマンドを呼び出します。出力はサービスにより自動的に収集され、呼び出し元に返されます。最新のドキュメントスキーマの例については、「Systems Manager ドキュメントの作成」を参照してください。

{
  "schemaVersion":"1.2",
  "description":"指定された Docker コンテナを再起動します。",
  "parameters":{
    "param":{
      "type":"String",
      "description":"(必須) 再起動するコンテナの名前。",
      "maxChars":1024
    }
  },
  "runtimeConfig":{
    "aws:runShellScript":{
      "properties":[
        {
          "id":"0.aws:runShellScript",
          "runCommand":[
            "docker restart {{param}}"
          ]
        }
      ]
    }
  }
}

 

Pegasystems での Run Command の実行
Pegasystems プロビジョニングシステムは、Pega Cloud リソースのデプロイと更新に使用される、AWS CloudFormation 上にあります。この最上位にあるのは Pega Provisioning エンジンです。これは CloudFormation テンプレートおよび Ansible 戦略のライブラリを管理する、サーバーレスで Lambda ベースのサービスです。設定管理データベース (CMDB) は各デプロイおよび更新のすべての設定詳細と履歴を追跡し、階層ディレクトリの命名規則を使用してデータをレイアウトします。次の図は、さまざまなシステムの統合方法を示しています。

クラウドシステム管理の場合、Pega オペレーションでは、 cuttysh と呼ばれるコマンドラインバージョンと、Pega Operations Portal と呼ばれる Pega 7 プラットフォームに基づくグラフィカルバージョンを使用します。両方のツールとも、Run Command を通じて、デプロイされた環境の CMDB の参照、設定の表示、デプロイされた EC2 インスタンスの操作が可能です。

CLI のウォークスルー
お客様のデプロイを調べ、Run Command を使用してインスタンスを操作する CLI のウォークスルーを示します。 cuttysh ツールを起動すると、CMDB のルートに移動し、プロビジョニングされたお客様のリストを表示できます。

% cuttysh
d CUSTA
d CUSTB
d CUSTC
d CUSTD

CMDB は、標準 Linux シェルコマンド ( cdlscat、および grep などを使用して操作できます。s という接頭辞が付く項目は、表示可能なプロパティを持つサービスです。d という接頭辞が付く項目は、CMDB 階層でナビゲート可能なサブディレクトリです。この例では、ディレクトリを CMDB 階層の顧客の CUSTB 部分に変更し、さらに Dev ネットワークの env1 というプロビジョニングされた Pega 環境に変更します。このツールは、その環境用にプロビジョニングされたアーティファクトを表示します。これらのエントリはプロビジョニングされた CloudFormation テンプレートにマッピングされます。

> cd CUSTB
/ROOT/CUSTB/us-east-1 > cd DEV/env1

ls –l コマンドは、プロビジョニングされたリソースのバージョンを表示します。これらのバージョン番号は、Pega Cloud のバージョンを構成する CloudFormation、Ansible、その他のコンポーネントのソース管理により管理されたアーティファクトにマッピングされます。

/ROOT/CUSTB/us-east-1/DEV/env1 > ls -l
s 1.2.5 RDSDatabase 
s 1.2.5 PegaAppTier 
s 7.2.1 Pega7 

ここで、Run Command を使用して、デプロイされた環境とやり取りします。これを行うには、attach コマンドを使用して、やり取りするサービスを指定します。次の例では、Pega ウェブ層にアタッチします。CLI は、CMDB およびインスタンスタグの情報を使用して、対応する EC2 インスタンスを見つけ、それに関するいくつかの基本情報を表示します。このデプロイには 3 つのインスタンスがあります。

/ROOT/CUSTB/us-east-1/DEV/env1 > attach PegaWebTier
 # ID         State  Public Ip    Private Ip  Launch Time
 0 i-0cf0e84 running 52.63.216.42 10.96.15.70 2017-01-16 
 1 i-0043c1d running 53.47.191.22 10.96.15.43 2017-01-16 
 2 i-09b879e running 55.93.118.27 10.96.15.19 2017-01-16 

ここから、 run コマンドを使用して Run Command ドキュメントを呼び出すことができます。次の例では、 docker-ps ドキュメントをインスタンス 0 (リストの最初のインスタンス) に対して実行できます。EC2 はコマンドを実行し、出力を CLI に返します。CLI はその出力を表示します。

/ROOT/CUSTB/us-east-1/DEV/env1 > run 0 docker-ps
. . 
CONTAINER ID IMAGE             CREATED      STATUS        NAMES
2f187cc38c1  pega-7.2         10 weeks ago  Up 8 weeks    pega-web

同じコマンドおよび定義されたその他のドキュメントの一部を使用して、Docker コンテナを再起動するか、ファイルのコンテンツをローカルシステムに戻すこともできます。ファイルを取得すると、Run Command は同僚にリンクを渡す場合に備えて、コピーを S3 バケット内に残します。

/ROOT/CUSTB/us-east-1/DEV/env1 > run 0 docker-restart pega-web
..
pega-web

/ROOT/CUSTB/us-east-1/DEV/env1 > run 0 get-file /var/log/cfn-init-cmd.log
. . . . . 
get-file

データはローカルに /tmp/get-file/i-0563c9e/data にコピーされました
データは S3 (s3://my-bucket/CUSTB/cuttysh/get-file/data) でも利用できます

ここで、Run Command の機能を利用して、一度に複数の操作を実行します。次の例では、デプロイに 3 つの実行中のインスタンスをアタッチし、各インスタンスの稼働時間を確認します。 par (parallel) オプション ( run 用) を使用して、CLI はすべてのインスタンスで並列で稼働時間ドキュメントを実行するよう Run Command に伝えます。

/ROOT/CUSTB/us-east-1/DEV/env1 > run par uptime
 …
Output for: i-006bdc991385c33
 20:39:12 up 15 days, 3:54, 0 users, load average: 0.42, 0.32, 0.30

Output for: i-09390dbff062618
 20:39:12 up 15 days, 3:54, 0 users, load average: 0.08, 0.19, 0.22

Output for: i-08367d0114c94f1
 20:39:12 up 15 days, 3:54, 0 users, load average: 0.36, 0.40, 0.40

コマンドが完了しました。
/ROOT/PEGACLOUD/CUSTB/us-east-1/PROD/prod1 > 

 

要約
Run Command は、システムへのアクセスを高速にして生産性を向上させ、インスタンスのグループに対してオペレーションを実行する機能を提供します。Pega Cloud のオペレーションは、他の操作ツールとともに Run Command を統合し、システム管理のためのクリーンでセキュアな方法を提供します。これにより、運用効率が向上し、管理されたデプロイでだれが何をできるかについて、より高度な管理が可能になります。Pega の継続的な改善プロセスにより、ユーザーがアクセスを必要とする理由が定期的に評価され、それらのオペレーションを、ライブラリに追加する新しい Run Command ドキュメントに変換します。その長期的な目標は、SSH を有効にしたクラウドシステムのデプロイを中止することにあります。ご不明の点またはご提案があれば、当社までコメントをお寄せください。

— Ananth および Rich