Amazon Web Services ブログ
タグベースのスケーリングプランを使って AWS Auto Scaling ポリシーを簡単に管理する方法
AWS Auto Scaling は、AWS リソースをそれらのトラフィックパターンに基づいて動的にスケールアップ/スケールダウンすることができます。しかし、典型的なアプリケーションスタックには多数のリソースがあり、これらのリソースすべてに対して個別の AWS Auto Scaling ポリシーを管理することは、組織的な課題となり得ます。スケーリングプランを使用すると、タグを用いることによって AWS Auto Scaling ポリシーの作成を自動化し、これらのポリシーを簡単に変更できます。このブログ記事では、リソースをひとつ、または複数のタグに基づいてグループ化し、スケーリングプランを使用することによって AWS Auto Scaling ポリシーを集約、設定、および管理する方法をご紹介します。
タグベースのスケーリングプランを使用するには、AWS リソースにタグを付けてからプランをセットアップする必要があります。私は、この例を開始する前にスケーリングプランで管理したい AWS リソースを検討しました (私の場合は Amazon EC2 Auto Scaling グループと Amazon DynamoDB テーブルです)。次に、対応する正しい値 (DEV、BETA、または PROD のいずれか) を持つ環境タグを使用してリソースにタグ付けしました。環境タグは、リソースのスケーリングポリシーをインフラストラクチャの場所別にグループ化して管理する、そしてターゲット使用率の割合を調整するために使用できます。リソースのタグ付けに役立つヒントと戦略については、AWS Tagging Strategies をご覧ください。
注意: AWS Auto Scaling は現在、AWS のリージョン表に記載されているリージョンでご利用いただけます。
インフラストラクチャ環境に基づいたスケーリングプランのセットアップ
このセクションでは、すべての開発リソースのためにひとつのスケーリングプランをセットアップし、本番リソースのために 2 つ目のプランをセットアップします。これらのスケーリングプランによって、選択したタグに関連付けられている関連リソースのグループに、ターゲット使用率のパラメーターを簡単に設定することができるようになります。
開発リソースのためのプランの作成
- 作成を開始するには、AWS Auto Scaling コンソールに移動します。既存のスケーリングプランはないので、[今すぐ始める] を選択します。(既存のプランがある場合は、AWS Auto Scaling コンソールで [スケーリングプランの作成] を選択します。) 次に、[タグによる検索] を選択して、リソースに適用されたタグでリソースを検索します。
上のスクリーンショットにあるように、タグで検索するため、[キー] には [Environment]、[値] には [DEV] を選択しました。(キーの下にオプションが表示されない場合は、前置きで説明した通り、管理したいリソースを調べて、それらが適切にタグ付けされていることを確認してください。) これらのパラメーターを使った検索は、DEV でタグ付けされたすべてのリソースを検出します。
オプションとして、BETA などの他の値を追加することもでき、これは OR オペレーション として機能します (したがって、DEV OR (または) BETA としてタグ付けされたすべての環境が検索されます)。さらに、Owner などの異なるキーでフィルタリングする別の行を追加することもできます。これは、AND オペレーションとして機能します (例えば、Owner は Alice AND (かつ) Environment は DEV または BETA)。繰り返しますが、最適なタグ付け結果を得るには、AWS Tagging Strategies を参照してください。
- [Environment] に [DEV] タグを選択したところで、[次へ] を選択して、タグで検索したときに見つかったリソースのポリシーを設定します。
- 次のページで、スケーリングプランの [名前] として Developer Scaling Plan を入力します。スケーリングプランの名前には、使用しているタグに基づいたものを入力するようにしてください。
- スクロールダウンすると、このスケーリングプランが私の開発環境のために 2 つの DynamoDB テーブルを見つけたことがわかります。ここでは、戦略を選択する必要があります。これは、これらのリソースを動的にスケールする方法を AWS Auto Scaling に指示します。これが開発環境であることから、私は [コストに合わせて最適化] を選択します (リソースの使用率ターゲットが高くなることを考慮するためです)。その後、[次へ] を選択して [確認と作成] に進みます。注意: リソースに既存のスケーリングポリシーがある場合は、[カスタム] を選択し、[外部のスケーリングポリシーの置き換え] にチェックを入れて、それらのリソースをそのプランに管理させることができます。
- 次のページでは、希望に応じてプランが管理する設定を細かく調整することができます。私はこのステップを省略するので、[次へ] をクリックします。これは、一部のリソースの重要性が他よりも高い/低い場合に便利で、必要に応じてより低い/高いターゲット使用率を指定することができます。
- カスタムタグ検索で見つかったリソースの数、スケーリングプランの名前、および変更の概要を確認します。以下の画像からわかるように、このスケーリングプランは各テーブルに 2 つずつ (ひとつは読み込みキャパシティー用、もうひとつは書き込みキャパシティー用)、合計 4 つの新しいスケーリングポリシーを作成します。問題ないようなので、[スケーリングプランの作成] を選択します。
本番リソースのためのプランの作成
ここでは、本番環境のために前述のステップを繰り返します。
- 以下のスクリーンショットにあるように、新しいスケーリングプランを作成して、[Environment] に [PROD] タグを選択することから始めます。
- [スケーリングプランの設定] ページの [スケーリングプランの詳細] で、プランの名前に Production Scaling Plan を入力します。
- これは本番環境であることから、大規模なトラフィックスパイクをより良く処理するために、リソースをオーバープロビジョニングしたいと思います。このため、[可用性を考えた最適化] を選択してより低いリソースの使用率ターゲットを使用します。
今回は DynamoDB テーブルと Amazon EC2 Auto Scaling グループが見つかったので、ここでこれら両方を設定します。この記事で前述したように、スケーリングプランは、異なるタイプのリソースをそれぞれ異なる戦略で管理することができます。
- 希望に応じてカスタム設定を指定するプロンプトが表示されますが、私はこのステップを省略して [次へ] をクリックします。
- その後、[次へ] を選択してすべてを確認し、最後に [スケーリングプランの作成] を選択します。
これで、開発環境と本番環境の両方にスケーリングプランがセットアップされました。これは、各リソースに個別にアクセスして AWS Auto Scaling ポリシーを管理するために費やさなければならない時間を短縮してくれます。
プランのスケーリング戦略の変更
トラフィックパターンは変化する場合があり、アプリケーションのスケーリングにより良く対応するために使用率の値を調整する必要が生じるかもしれません。トラフィックパターンが安定してきたら、コストを削減するためにより高い使用率ターゲットを試すことができます。お使いのアプリケーションに予測不能のバーストが発生する場合は、トラフィックを簡単に吸収して、必要に応じてスケールアウトする時間を得られるようにするためにも、低い使用率ターゲットのほうが適切でしょう。
スケーリングプランの戦略を編集したい場合は、ダッシュボードでポリシーを選択してから [編集] を選択します。変更したいリソースの値を調整し、[次へ] を選択して変更を確認してから、[変更の保存] を選択してそれらを確定します。
考えられる問題
デフォルトで、AWS Auto Scaling はリソースのための既存のスケーリング設定を削除しません。ポリシーがすでに設定されているリソースのためにスケーリングプランを作成する場合は、プランが ActiveWithProblems
ステータスで作成されます。これに対処するには、既存のスケーリングポリシーを削除してスケーリングプランを更新する、またはプラン作成中に AWS Auto Scaling を使って既存のポリシーを置き換えるようにしてください。これは、スケーリングプランの設定 ステップで、スケーリング戦略に [カスタム] を選択してから、[外部のスケーリングポリシーの置き換え] を選択することによって実行できます。この設定は、[動的スケーリング] 設定でスケーリングプランを編集するときに変更できます。
まとめ
この記事では、AWS Auto Scaling プランを使用して、異なる環境のための多数の AWS リソースに AWS Auto Scaling ポリシーを作成し、効率的に管理する方法をご紹介しました。これらのスケーリングプランは、タグを使用することによって、ポリシーを自動的に作成し、これらのポリシーを簡単に変更することを可能にしてくれます。このアプローチは、Amazon EC2 スポットフリートおよび Amazon Aurora レプリカなどの他の AWS リソースにも適用でき、それらのプランは任意の数のタグに基づいて簡単にスコープすることができます。
著者について
Dario Marasco は、アマゾン ウェブ サービスのソフトウェア開発エンジニアです。Dario は DynamoDB のコントロールプレーンに焦点を当てていますが、DynamoDB の自動スケーリングにも携わっています。