

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SQS に基づくスケーリングを設定
<a name="scale-sqs-queue-cli"></a>

次の手順では、Amazon SQS に基づいて自動スケーリングを設定する方法について説明します。CloudWatch カスタムメトリクスを作成する方法、 を使用してターゲット追跡ポリシーを設定する方法 AWS CLI、および設定をテストする方法について説明します。

開始する前に、 が AWS CLI [インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)済みで[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)されていることを確認します。また、使用する Amazon SQS キューも必要です。以下のタスクは、キュー (標準または FIFO)、Auto Scaling グループ、キューを使用するアプリケーションを実行している EC2 インスタンスがあることを前提としています。

Amazon SQS の詳細については、「[Amazon Simple Queue Service Developer Guide](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/)」を参照してください。

**Topics**
+ [ステップ 1: CloudWatch カスタムメトリクスを作成する](#create-sqs-cw-alarms-cli)
+ [ステップ 2: ターゲット追跡スケーリングポリシーを作成する](#create-sqs-policies-cli)
+ [ステップ 3: スケーリングポリシーをテストする](#validate-sqs-scaling-cli)

## ステップ 1: CloudWatch カスタムメトリクスを作成する
<a name="create-sqs-cw-alarms-cli"></a>

カスタムメトリックスは、選択したメトリックス名と名前空間を使用して定義されます。カスタムメトリクスの名前空間を `AWS/` で始めることはできません。カスタムメトリクスの発行に関する詳細については、*Amazon CloudWatch ユーザーガイド*のトピック「[カスタムメトリクスをパブリッシュする](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html)」を参照してください。

この手順に従って、まず AWS アカウントから情報を読み取ってカスタムメトリクスを作成します。次に、前のセクションで推奨されたようにインスタンスメトリクスごとにバックログを計算します。最後に、この数字を CloudWatch に 1 分間隔で発行します。可能な限り、システム負荷の変化に迅速に対応できるように、メトリクスを 1 分単位でスケーリングすることを強くお勧めします。

**CloudWatch カスタムメトリクスを作成するには (AWS CLI)**

1. SQS [get-queue-attributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sqs/get-queue-attributes.html) コマンドを使用して、キューで待機しているメッセージ数を取得します (`ApproximateNumberOfMessages`)。

   ```
   aws sqs get-queue-attributes --queue-url https://sqs.region.amazonaws.com/123456789/MyQueue \
     --attribute-names ApproximateNumberOfMessages
   ```

1. [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) コマンドを使用して、グループの実行キャパシティーを取得します。これは `InService` ライフサイクル状態にあるインスタンスの数です。このコマンドは、Auto Scaling グループのインスタンスとそのライフサイクル状態を返します。

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
   ```

1. キューからの取得に使用できるメッセージの概数をグループの実行キャパシティで除算して、インスタンスあたりのバックログを算出します。

1. 1 分ごとに実行してインスタンスあたりのバックログの値を取得し、それを CloudWatch カスタムメトリクスに公開するスクリプトを作成します。カスタムメトリクスを公開する際は、そのメトリクスの名前、名前空間、単位、値、および 0 以上のディメンションを指定します。ディメンションには、そのディメンションの名前と値を含みます。

   カスタムメトリクスを公開するには、*斜体*で示されたプレースホルダーの値を好みのメトリクス名、メトリクスの値、名前空間 (「`AWS`」で開始することはできません)、ディメンション (オプション) に置き換えてから、次の [put-metric-data](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/put-metric-data.html) コマンドを実行します。

   ```
   aws cloudwatch put-metric-data --metric-name MyBacklogPerInstance --namespace MyNamespace \
     --unit None --value 20 --dimensions MyOptionalMetricDimensionName=MyOptionalMetricDimensionValue
   ```

アプリケーションが希望するメトリクスを出力すると、データが CloudWatch に送信されます。メトリクスは CloudWatch コンソールで表示できます。にログイン AWS マネジメントコンソール し、CloudWatch ページに移動することでアクセスできます。その後、メトリクスを表示するには、メトリクスページに移動するか、検索ボックスを使用してメトリクスを検索します。メトリクスの表示の詳細については、*Amazon CloudWatch ユーザーガイド*の「[使用可能なメトリクスの表示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html)」を参照してください。

## ステップ 2: ターゲット追跡スケーリングポリシーを作成する
<a name="create-sqs-policies-cli"></a>

この時点で、作成したメトリクスをターゲット追跡スケーリングポリシーに追加できるようになっています。

**ターゲット追跡スケーリングポリシーを作成するには (AWS CLI)**

1. 以下の `cat` コマンドを使用して、スケーリングポリシーのターゲット値と、カスタムメトリクスの仕様を指定する JSON ファイル (名前: `config.json`) をホームディレクトリに保存します。各*ユーザー入力プレースホルダー*を独自の情報に置き換えます。`TargetValue` には、インスタンスあたりの適正バックログメトリックスを計算して、それを入力します。この数を計算するには、上記のセクションで説明しているとおり、標準のレイテンシー値を決定し、その値をメッセージの処理にかかる平均時間で割ります。

   ステップ 1 で作成したメトリクスにディメンションを指定しなかった場合は、カスタムメトリクスの仕様にディメンションを含めないでください。

   ```
   $ cat ~/config.json
   {
      "TargetValue":100,
      "CustomizedMetricSpecification":{
         "MetricName":"MyBacklogPerInstance",
         "Namespace":"MyNamespace",
         "Dimensions":[
            {
               "Name":"MyOptionalMetricDimensionName",
               "Value":"MyOptionalMetricDimensionValue"
            }
         ],
         "Statistic":"Average",
         "Unit":"None"
      }
   }
   ```

1. [ut-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) コマンドを使用して、前のステップで作成した `config.json` と共に、スケーリングポリシーを作成します。

   ```
   aws autoscaling put-scaling-policy --policy-name sqs100-target-tracking-scaling-policy \
     --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \
     --target-tracking-configuration file://~/config.json
   ```

   これにより、2 つのアラーム (スケールアウトとスケールイン) が作成されます。これにより、CloudWatch に登録されたポリシーの Amazon リソースネーム (ARN) も返されます。CloudWatch はこれを使用して、メトリクスのしきい値が超過するたびにスケーリングを呼び出します。

## ステップ 3: スケーリングポリシーをテストする
<a name="validate-sqs-scaling-cli"></a>

設定が完了したら、スケーリングポリシーが機能していることを確認します。SQS キュー内のメッセージ数を増やし、Auto Scalingグループが追加の EC2 インスタンスを起動したことを確認することによってテストできます。SQS キュー内のメッセージ数を減らし、Auto Scaling グループが EC2 インスタンスを終了したことを確認することによってもテストできます。

**スケールアウト機能をテストするには**

1. 「[Amazon SQS スタンダードキューの作成とメッセージの送信](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/creating-sqs-standard-queues.html)」、または「[Amazon SQS FIFO キューを作成してメッセージを送信する](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/creating-sqs-fifo-queues.html)」の手順に従って、キューにメッセージを追加します。インスタンスあたりのバックログメトリックスがターゲット値を超えるようにキュー内のメッセージ数を増やしたことを確認します。

   この変更により、アラームの呼び出しに数分かかる場合があります。

1. [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) コマンドを使用して、グループがインスタンスを起動したことを確認します。

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
   ```

**スケールイン機能をテストするには**

1. [メッセージの受信と削除 (コンソール)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/step-receive-delete-message.html) に関するページの手順に従い、キューからメッセージを削除します。インスタンスあたりのバックログメトリックスがターゲット値を下回るようにキュー内のメッセージ数を減らしたことを確認します。

   この変更により、アラームの呼び出しに数分かかる場合があります。

1. [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) コマンドを使用して、グループがインスタンスを終了したことを確認します。

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
   ```