

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

# 本番環境でモデルを更新するためのデプロイガードレール
<a name="deployment-guardrails"></a>

デプロイガードレールは、本番環境で機械学習モデルを更新するための Amazon SageMaker AI 推論の一連のモデルデプロイオプションです。このフルマネージドデプロイオプションを使うと、本番環境の現在のモデルから新しいモデルへの切り替えをコントロールできます。Canary や Linear など、ブルー/グリーンデプロイのトラフィックシフトモードにより、更新の過程で現在のモデルから新しいモデルへのトラフィックシフトプロセスを細かくコントロールできます。また、自動ロールバックなどの組み込みセーフガードもあり、本番環境に大きな影響を与える前に、問題を早期に検出し、自動的に是正措置を講じることができます。

デプロイガードレールには次の利点があります。
+ **本番環境を更新する際のデプロイの安全性。**本番環境に対して後退的更新を行うと、計画外のダウンタイムが発生し、モデルのレイテンシーの増加や高いエラー率など、ビジネスに影響を与える可能性があります。デプロイガードレールは、ベストプラクティスと組み込みオペレーションの安全なガードレールを提供することで、これらのリスクを軽減するのに役立ちます。
+ **フルマネージドデプロイ。**SageMaker AI がこれらのデプロイの設定とオーケストレーションを行い、エンドポイント更新メカニズムと統合します。お客様がオーケストレーション、モニタリング、ロールバックのメカニズムを構築、維持する必要はありません。お客様は SageMaker AI を活用してデプロイの設定やオーケストレーションを行い、アプリケーションへの ML の活用に集中できます。
+ **可視性。**デプロイの進行状況は、[DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) API または Amazon CloudWatch Events ([サポートされているエンドポイント](deployment-guardrails-exclusions.md)の場合) を通じて追跡できます。SageMaker AI のイベントの詳細については、「[Amazon SageMaker AI が Amazon EventBridge に送信するイベント](automating-sagemaker-with-eventbridge.md)」の「エンドポイントデプロイの状態変更」セクションを参照してください。エンドポイントが「[Exclusions](deployment-guardrails-exclusions.md)」ページのいずれかの機能を使っている場合、CloudWatch Events は使用できないことに注意してください。

**注記**  
デプロイガードレールは [非同期推論](async-inference.md) エンドポイントタイプと [リアルタイム推論](realtime-endpoints.md) エンドポイントタイプにのみ適用されます。

## 開始方法
<a name="deployment-guardrails-get-started"></a>

実稼働環境でのモデルの更新には、Blue/Green デプロイとローリングデプロイの 2 種類のデプロイがサポートされています。
+ [ブルー/グリーンデプロイ](deployment-guardrails-blue-green.md): 更新により、古いフリート (青のフリート) から新しいフリート (緑のフリート) にトラフィックをシフトさせることができます。Blue/Green デプロイは[複数のトラフィックシフトモード](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-blue-green.html)を提供します。トラフィックシフトモードとは、SageMaker AI がエンドポイントトラフィックを、お客様の更新を含む新しいフリートにどのようにルーティングするかを指定する設定です。次のトラフィックシフトモードでは、エンドポイントの更新プロセスをさまざまなレベルでコントロールできます。
  + [All At Once トラフィックシフトを使用する](deployment-guardrails-blue-green-all-at-once.md) は、すべてのエンドポイントトラフィックを青のフリートから緑のフリートにシフトします。トラフィックが緑のフリートにシフトすると、事前に指定した Amazon CloudWatch アラームが一定期間 (*ベーキング期間*)、緑のフリートのモニタリングを開始します。ベーキング期間中にアラームが作動しない場合、SageMaker AI は青のフリートを終了します。
  + [Canary トラフィックシフトを使用する](deployment-guardrails-blue-green-canary.md) では、トラフィックのごく一部 (canary) を緑のフリートにシフトして、ベーキング期間中それをモニタリングできます。**canary が緑のフリートで成功すると、SageMaker AI は青のフリートを終了する前に残りのトラフィックを青のフリートから緑のフリートにシフトします。
  + [Linear トラフィックシフトを使用する](deployment-guardrails-blue-green-linear.md) は、トラフィックシフトステップの数と各ステップでシフトするトラフィックの割合をさらにカスタマイズできます。Canary シフトではトラフィックを 2 つのステップでシフトできますが、Linear シフトはこれを *n* 個の線形間隔のステップに拡張します。
+ [ローリングデプロイを使用する](deployment-guardrails-rolling.md): SageMaker AI がキャパシティを段階的にプロビジョニングし、指定したバッチサイズのステップでトラフィックを新しいフリートにシフトするのに合わせて、エンドポイントを更新できます。新しいフリートのインスタンスは新しいデプロイ設定で更新され、ベイク期間中に CloudWatch アラームが発生しない場合、SageMaker AI は古いフリートのインスタンスをクリーンアップします。このオプションにより、各ステップで移行するインスタンス数または容量の割合をきめ細かく制御できます。

[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) と [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) SageMaker API、および AWS Command Line Interface コマンドを使用して、デプロイを作成、管理できます。デプロイの設定方法の詳細については、個々のデプロイページを参照してください。エンドポイントが「[Exclusions](deployment-guardrails-exclusions.md)」ページにリストされているいずれかの機能を使っている場合、デプロイガードレールは使用できないことに注意してください。

デプロイガードレールの使用方法を示すガイド付きの例に従うには、Canary および Linear トラフィックシフトモードの[Jupyter ノートブック](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-inference-deployment-guardrails)の例を参照してください。

# 設定とモニタリングを自動ロールバックする
<a name="deployment-guardrails-configuration"></a>

Amazon CloudWatch アラームは、デプロイガードレールでベーキング期間を使うための前提条件です。デプロイガードレールにおける自動ロールバック機能は、エンドポイントをモニタリングできる CloudWatch アラームを設定した場合にのみ、使用できます。指定したモニタリング期間中にアラームが作動生した場合、SageMaker AI はアプリケーションを保護するために古いエンドポイントへの完全なロールバックを開始します。エンドポイントをモニタリングするように CloudWatch アラームを設定していない場合、デプロイ中に自動ロールバック機能は機能しません。

Amazon CloudWatch の詳細については、[Amazon CloudWatch ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)の「*Amazon CloudWatch とは*」を参照してください。

**注記**  
IAM 実行ロールに、指定した自動ロールバックアラームの `cloudwatch:DescribeAlarms` アクションを実行するアクセス許可があることを確認してください。

## アラームの例
<a name="deployment-guardrails-configuration-alarm-examples"></a>

開始に役立つよう、CloudWatch アラームの機能をデモする以下の例を用意しました。次の例の使用または変更するだけでなく、独自のアラームを作成し、指定したフリートのさまざまなメトリクスを一定期間モニタリングするようにアラームを設定できます。アラームに追加できる SageMaker AI のメトリクスとディメンションの詳細については、「[Amazon CloudWatch における Amazon SageMaker AI メトリクス](monitoring-cloudwatch.md)」を参照してください。

**Topics**
+ [新旧両方のフリートの呼び出しエラーをモニタリングする](#deployment-guardrails-configuration-alarm-examples-errors-both)
+ [新しいフリートのモデルのレイテンシーをモニタリングする](#deployment-guardrails-configuration-alarm-examples-latency-new)

### 新旧両方のフリートの呼び出しエラーをモニタリングする
<a name="deployment-guardrails-configuration-alarm-examples-errors-both"></a>

次の CloudWatch アラームは、エンドポイントの平均エラー率をモニタリングします。このアラームを任意のデプロイガードレールのトラフィックシフトタイプで使うことで、新旧両方のフリートで全体的なモニタリングを行うことができます。アラームが作動すると、SageMaker AI は古いフリートへのロールバックを開始します。

新旧両方のフリートから発生する呼び出しエラーは、平均エラー率に影響します。平均エラー率が指定されたしきい値を超えると、アラームが作動します。この例では、デプロイ期間中、新旧両方のフリートで 4xx エラー (クライアントエラー) をモニタリングします。メトリクス `Invocation5XXErrors` を使って 5xx エラー (サーバーエラー) をモニタリングすることもできます。

**注記**  
このアラームタイプでは、デプロイ中に古いフリートでアラームが作動すると、SageMaker AI はデプロイを終了します。したがって、現在の本番稼働フリートで既にエラーが発生している場合は、次の例のいずれかを使用または変更して、新しいフリートのエラーのみをモニタリングすることを検討してください。

```
#Applied deployment type: all types
{
    "AlarmName": "EndToEndDeploymentHighErrorRateAlarm",
    "AlarmDescription": "Monitors the error rate of 4xx errors",
    "MetricName": "Invocation4XXErrors",
    "Namespace": "AWS/SageMaker",
    "Statistic": "Average",
    "Dimensions": [
        {
            "Name": "EndpointName",
            "Value": <your-endpoint-name>
        },
        {
            "Name": "VariantName",
            "Value": "AllTraffic"
        }
    ],
    "Period": 600,
    "EvaluationPeriods": 2,
    "Threshold": 1,
    "ComparisonOperator": "GreaterThanThreshold",
    "TreatMissingData": "notBreaching"
}
```

前の例では、次のフィールドの値に注意してください。
+ `AlarmName` と `AlarmDescription` には、アラームの名前と説明を入力します。
+ `MetricName` には、値 `Invocation4XXErrors` を使用して、エンドポイントで 4xx エラーをモニタリングします
+ `Namespace` には、値 `AWS/SageMaker` を使用します。必要に応じて、独自のカスタムメトリクスを指定することもできます。
+ `Statistic` の場合は、`Average` を使用します。これは、エラー率がしきい値を超えたかどうかを計算するときに、アラームが評価期間中の平均エラー率を取得することを意味します。
+ ディメンション `EndpointName` には、更新するエンドポイントの名前を値として使用します。
+ ディメンション `VariantName` には、値 `AllTraffic` を使用して、すべてのエンドポイントトラフィックを指定します。
+ `Period` の場合は、`600` を使用します。これにより、アラームの評価期間が 10 分に設定されます。
+ `EvaluationPeriods` の場合は、`2` を使用します。この値は、アラームステータスを決定する際に、直近の 2 つの評価期間を考慮するようにアラームに指示します。

### 新しいフリートのモデルのレイテンシーをモニタリングする
<a name="deployment-guardrails-configuration-alarm-examples-latency-new"></a>

次の CloudWatch アラームの例は、デプロイ中の新しいフリートのモデルのレイテンシーをモニタリングします。このアラームを使って、新しいフリートのみをモニタリングし、古いフリートを除外できます。アラームは、デプロイ全体で持続します。この例では、新しいフリートの包括的なエンドツーエンドのモニタリングを行い、新しいフリートに応答時間の問題がある場合、古いフリートへのロールバックを開始します。

CloudWatch は、新しいフリートがトラフィックを受信し始めた後、ディメンション `EndpointConfigName:{New-Ep-Config}` を含むメトリクスを発行します。これらのメトリクスはデプロイが完了した後も持続します。

次のアラーム例は、どのデプロイタイプでも使用できます。

```
#Applied deployment type: all types
{
    "AlarmName": "NewEndpointConfigVersionHighModelLatencyAlarm",
    "AlarmDescription": "Monitors the model latency on new fleet",
    "MetricName": "ModelLatency",
    "Namespace": "AWS/SageMaker",
    "Statistic": "Average",
    "Dimensions": [
        {
            "Name": "EndpointName",
            "Value": <your-endpoint-name>
        },
        {
            "Name": "VariantName",
            "Value": "AllTraffic"
        },
        {
            "Name": "EndpointConfigName",
            "Value": <your-config-name>
    ],
    "Period": 300,
    "EvaluationPeriods": 2,
    "Threshold": 100000, # 100ms
    "ComparisonOperator": "GreaterThanThreshold",
    "TreatMissingData": "notBreaching"
}
```

前の例では、次のフィールドの値に注意してください。
+ `MetricName` には、値 `ModelLatency` を使用して、モデルの応答時間をモニタリングします。
+ `Namespace` には、値 `AWS/SageMaker` を使用します。必要に応じて、独自のカスタムメトリクスを指定することもできます。
+ ディメンション `EndpointName` には、更新するエンドポイントの名前を値として使用します。
+ ディメンション `VariantName` には、値 `AllTraffic` を使用して、すべてのエンドポイントトラフィックを指定します。
+ ディメンション `EndpointConfigName` については、値は、新規または更新されたエンドポイントのエンドポイント設定名を参照します。

**注記**  
新しいフリートではなく古いフリートをモニタリングする場合は、ディメンション `EndpointConfigName` を、古いフリートの設定名を指定するように変更できます。

# ブルー/グリーンデプロイ
<a name="deployment-guardrails-blue-green"></a>

エンドポイントを更新するとき、Amazon SageMaker AI は自動的にブルー/グリーンデプロイを使って、エンドポイントの可用性を最大化します。ブルー/グリーンデプロイでは、SageMaker AI は更新された新しいフリート (緑のフリート) をプロビジョニングします。その後、SageMaker AI は古いフリート (青のフリート) から緑のフリートにトラフィックをシフトします。緑のフリートが所定の評価期間 (ベーキング期間と呼ばれる) スムーズに動作すると、SageMaker AI は青のフリートを終了します。Blue/Green デプロイの追加機能により、トラフィックシフトモードと自動ロールバックモニタリングを利用して、本番環境への重大な影響からエンドポイントを保護できます。

以下に、SageMaker AI のブルー/グリーンデプロイの主な機能について説明します。
+ **トラフィックシフトモード。**デプロイガードレールのトラフィックシフトモードにより、青のフリートと緑のフリートの間のトラフィック量とトラフィックシフトステップ数をコントロールできます。この機能により、100% のトラフィックシフトを完全にコミットすることなく、緑のフリートのパフォーマンスを段階的に評価できます。
+ **ベーキング期間。**ベーキング期間とは、次のデプロイ段階に進む前に緑のフリートをモニタリングするための一定時間です。どのベーキング期間中でも、事前に指定したアラームのいずれかが作動した場合、すべてのエンドポイントトラフィックは青のフリートにロールバックされます。ベーキング期間は、トラフィックシフトを永続的なものにする前に、更新の信頼を構築するのに役立ちます。
+ **自動ロールバック。**SageMaker AI が緑のフリートのモニタリングに使う Amazon CloudWatch アラームを指定できます。更新されたコードの問題によってアラームが作動した場合、SageMaker AI は可用性維持のために青のフリートへの自動ロールバックを開始し、リスクを最小限に抑えます。

## トラフィックシフトモード
<a name="deployment-guardrails-blue-green-traffic-modes"></a>

Blue/Green デプロイのさまざまなトラフィックシフトモードを使うと、青のフリートと緑のフリート間のトラフィックシフトをより詳細にコントロールできます。Blue/Green デプロイで使用可能なトラフィックシフトモードは、All at Once、Canary、Linear です。次の表に、オプションの比較を示します。

**重要**  
複数ステージのトラフィックシフトまたはベーキング期間を含む Blue/Green デプロイの場合、フリートへのトラフィックに関係なく、更新期間中は両方のフリートに対して課金されます。これは、All at Once トラフィックシフトでベーキング期間がない Blue/Green デプロイとは対照的です。その場合は、更新の過程で 1 つのフリートに対してのみ課金されます。


| 名前 | 説明 | 長所 | 短所 | 推奨事項 | 
| --- | --- | --- | --- | --- | 
| All at once | すべてのトラフィックを 1 つのステップで新しいフリートにシフトします。 | 全体の更新時間を最小限に抑えます。 | 後退的更新は、100% のトラフィックに影響を与えます。 | このオプションを使って、更新時間とコストを最小限に抑えます。 | 
| Canary | 2 つのステップでトラフィックをシフトします。最初の (canary) ステップでトラフィックのごく一部を移行し、次に 2 番目のステップで残りのトラフィックをシフトします。 | 後退的更新の影響範囲を Canary フリートのみに制限します。 | 両方のフリートは、デプロイ全体で並行して動作します。 | このオプションを使って、後退的更新の影響範囲を最小化することと、2 つのフリートが動作している時間を最小化することのバランスを取ります。 | 
| [線形] | トラフィックの固定部分を、事前に指定した数の等間隔のステップでシフトします。 | 複数のステップでトラフィックをシフトすることで、後退的更新のリスクを最小限に抑えます。 | 更新時間とコストはステップ数に比例します。 | このオプションを使って、デプロイを複数のステップに分散させてリスクを最小限に抑えます。 | 

## 使用を開始する
<a name="deployment-guardrails-blue-green-get-started"></a>

デプロイ設定が指定されると、SageMaker AI は新しいインスタンスのプロビジョニング、古いインスタンスの終了、トラフィックのシフトを行います。既存の [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) と [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) SageMaker API、および AWS Command Line Interface コマンドを使用して、デプロイを作成、管理できます。エンドポイントが「[Exclusions](deployment-guardrails-exclusions.md)」ページにリストされているいずれかの機能を使っている場合、デプロイガードレールは使用できないことに注意してください。デプロイの設定方法の詳細については、個々のデプロイページを参照してください。
+ [All At Once トラフィック移行による Blue/Green 更新](deployment-guardrails-blue-green-all-at-once.md)
+ [Canary トラフィック移行による Blue/Green 更新](deployment-guardrails-blue-green-canary.md)
+ [Linear トラフィック移行による Blue/Green 更新](deployment-guardrails-blue-green-linear.md)

デプロイガードレールの使用方法を示すガイド付きの例に従うには、Canary および Linear トラフィックシフトモードの[Jupyter ノートブック](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-inference-deployment-guardrails)の例を参照してください。

# All At Once トラフィックシフトを使用する
<a name="deployment-guardrails-blue-green-all-at-once"></a>

All At Once トラフィックシフトにより、Blue/Green デプロイの安全なガードレールを使って、エンドポイントの更新を迅速にロールアウトできます。このトラフィックシフトオプションを使うと、Blue/Green デプロイの可用性の保証を利用しながら、更新時間を最小限に抑えることができます。ベーキング期間機能は、古いインスタンスを終了する前に新しいインスタンスのパフォーマンスと機能をモニタリングし、新しいフリートが完全に動作可能かを確認するのに役立ちます。

次の図は、All At Once トラフィックシフトが古いフリートと新しいフリートを管理する方法を示しています。

![\[古いフリートから新しいフリートへの 100% のトラフィックシフトに成功。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/deployment-guardrails-blue-green-all-at-once.png)


All At Once トラフィックシフトを使うと、SageMaker AI は 100% のトラフィックを新しいフリート (緑のフリート) にルーティングします。緑のフリートがトラフィックを受信し始めると、ベーキング期間が始まります。ベーキング期間は、事前に指定した Amazon CloudWatch アラームが緑のフリートのパフォーマンスをモニタリングする一定期間です。ベーキング期間中にアラームが作動しない場合、SageMaker AI は古いフリート (青のフリート) を終了します。ベーキング期間中にアラームが作動した場合は、自動ロールバックが開始され、100% のトラフィックが青のフリートに戻ります。

## 前提条件
<a name="deployment-guardrails-blue-green-all-at-once-prereqs"></a>

All At Once トラフィックシフトを使うデプロイを設定する前に、エンドポイントからのメトリクスをモニタリングする Amazon CloudWatch アラームを作成する必要があります。ベーキング期間中にアラームが作動した場合、トラフィックは青のフリートにロールバックされます。エンドポイントに CloudWatch アラームを設定する方法については、前提条件のページ「[設定とモニタリングを自動ロールバックする](deployment-guardrails-configuration.md)」を参照してください。CloudWatch アラームの詳細については、[Amazon CloudWatch ユーザーガイド](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)の「*Amazon CloudWatch でのアラームの使用*」を参照してください。

## All At Once トラフィックシフトを設定する
<a name="deployment-guardrails-blue-green-all-at-once-configure"></a>

デプロイの準備が整い、エンドポイントに CloudWatch アラームを設定したら、SageMaker AI [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API または AWS Command Line Interface の [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) コマンドのいずれかを使って、デプロイを開始できます。

**Topics**
+ [エンドポイントを更新する方法 (API)](#deployment-guardrails-blue-green-all-at-once-configure-api-update)
+ [既存の Blue/Green 更新ポリシーでエンドポイントを更新する方法 (API)](#deployment-guardrails-blue-green-all-at-once-configure-api-existing)
+ [エンドポイントを更新する方法 (CLI)](#deployment-guardrails-blue-green-all-at-once-configure-cli-update)

### エンドポイントを更新する方法 (API)
<a name="deployment-guardrails-blue-green-all-at-once-configure-api-update"></a>

次の例は、Amazon SageMaker API の [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) を使って、All At Once トラフィックシフトでエンドポイントを更新する方法を示しています。

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    DeploymentConfig={
        "BlueGreenUpdatePolicy": {
            "TrafficRoutingConfiguration": {
                "Type": "ALL_AT_ONCE"
            },
            "TerminationWaitInSeconds": 600,
            "MaximumExecutionTimeoutInSeconds": 1800
        },
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "<your-cw-alarm>"
                },
            ]
        }
    }
)
```

All At Once トラフィックシフトオプションを設定するには、以下を実行します。
+ `EndpointName` には、更新する既存のエンドポイントの名前を使用します。
+ `EndpointConfigName` には、使用するエンドポイント設定の名前を使用します。
+ `DeploymentConfig` と `BlueGreenUpdatePolicy` の下の `TrafficRoutingConfiguration` で、`Type` パラメータを `ALL_AT_ONCE` に設定します。これは、デプロイが All At Once トラフィックシフトモードを使うよう指定します。
+ `TerminationWaitInSeconds` の場合は、`600` を使用します。このパラメータは SageMaker AI に対し、緑のフリートが完全にアクティブになった後、青のフリートのインスタンスを終了するまで、所定の時間 (秒単位) 待機するよう指示します。この例では、SageMaker AI は最後のベーキング期間後 10 分間待機してから、青のフリートを終了します。
+ `MaximumExecutionTimeoutInSeconds` の場合は、`1800` を使用します。このパラメータは、デプロイがタイムアウトするまでに実行できる最大時間を設定します。前の例では、デプロイが終了するまでの制限時間は 30 分です。
+ `AutoRollbackConfiguration` の `Alarms` フィールドでは、CloudWatch アラームを名前で追加できます。使うアラームごとに 1 つの `AlarmName: <your-cw-alarm>` エントリを作成します。

### 既存の Blue/Green 更新ポリシーでエンドポイントを更新する方法 (API)
<a name="deployment-guardrails-blue-green-all-at-once-configure-api-existing"></a>

[CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) API を使ってエンドポイントを作成する場合は、必要に応じて、将来のエンドポイントの更新に再利用するデプロイ設定を指定できます。前の UpdateEndpoint API の例と同じ `DeploymentConfig` オプションを使用できます。CreateEndpoint API の動作に変化はありません。デプロイ設定を指定しても、エンドポイントでの Blue/Green 更新が自動的に実行されるわけではありません。

以前のデプロイ設定を使うオプションは、[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API エンドポイントを使ってエンドポイントを更新するときに発生します。エンドポイントを更新するときは、`RetainDeploymentConfig` オプションを使って、エンドポイントの作成時に指定したデプロイ設定を保持できます。

[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API を呼び出すときに、`RetainDeploymentConfig` を `True` に設定して、元のエンドポイント設定の `DeploymentConfig` オプションを保持します。

```
response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    RetainDeploymentConfig=True
)
```

### エンドポイントを更新する方法 (CLI)
<a name="deployment-guardrails-blue-green-all-at-once-configure-cli-update"></a>

AWS CLI を使う場合、次の例は、[update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) コマンドを使って Blue/Green All At Once デプロイメントを始める方法を示しています。

```
update-endpoint
--endpoint-name <your-endpoint-name> 
--endpoint-config-name <your-config-name> 
--deployment-config '"BlueGreenUpdatePolicy": {"TrafficRoutingConfiguration": {"Type": "ALL_AT_ONCE"},
    "TerminationWaitInSeconds": 600, "MaximumExecutionTimeoutInSeconds": 1800},
    "AutoRollbackConfiguration": {"Alarms": [{"AlarmName": "<your-alarm>"}]}'
```

All At Once トラフィックシフトオプションを設定するには、以下を実行します。
+ `endpoint-name` には、更新するエンドポイントの名前を使用します。
+ `endpoint-config-name` には、使用するエンドポイント設定の名前を使用します。
+ `deployment-config` には、[BlueGreenUpdatePolicy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_BlueGreenUpdatePolicy.html) JSON オブジェクトを使用します。

**注記**  
JSON オブジェクトをファイルに保存する場合は、*AWS CLI ユーザーガイド*の「[AWS CLI スケルトンと入力パラメータの生成](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-skeleton.html)」を参照してください。

# Canary トラフィックシフトを使用する
<a name="deployment-guardrails-blue-green-canary"></a>

Canary トラフィックシフトにより、エンドポイントトラフィックの一部を新しいフリートでテストしながら、残りのトラフィックを古いフリートで処理できます。このテストステップは、すべてのトラフィックを新しいフリートにシフトする前に、新しいフリートの機能を検証する安全なガードレールです。Blue/Green デプロイの利点はそのままで、加わる Canary 機能により、新しい (緑の) フリートで 100% のトラフィックを処理する前に、推論を提供できるようになります。

トラフィックを受信するためにオンになる緑のフリートの部分は canary と呼ばれ、この canary のサイズを選択できます。canary のサイズは、新しいフリートの容量の 50% 以下になるように注意してください。ベーキング期間が終了し、事前に指定した Amazon CloudWatch アラームの作動がなければ、残りのトラフィックは古い (青の) フリートから緑のフリートにシフトします。Canary トラフィックシフトは、更新されたモデルに関する問題が canary にのみ影響するため、デプロイ時の安全性が向上します。

次の図は、Canary トラフィックシフトが青と緑のフリート間のトラフィックの分散を管理する方法を示しています。

![\[古いフリートから新しいフリートへの 2 ステップの Canary トラフィックシフトに成功。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/deployment-guardrails-blue-green-canary.png)


SageMaker AI が緑のフリートをプロビジョンすると、SageMaker AI は着信トラフィックの一部 (25% など) を canary にルーティングします。その後、ベーキング期間が始まり、その間は CloudWatch アラームが緑のフリートのパフォーマンスをモニタリングします。この間、青のフリートと緑のフリートの両方が部分的にアクティブになり、トラフィックを受信します。ベーキング期間中にいずれかのアラームが作動した場合、SageMaker AI はロールバックを開始し、すべてのトラフィックが青のフリートに戻ります。いずれのアラームも作動しない場合は、すべてのトラフィックが緑のフリートにシフトし、最後のベーキング期間があります。アラームが作動せずに最後のベーキング期間が終了すると、緑のフリートがすべてのトラフィックを処理し、SageMaker AI は青のフリートを終了します。

## 前提条件
<a name="deployment-guardrails-blue-green-canary-prereqs"></a>

Canary トラフィックシフトを使うデプロイを設定する前に、エンドポイントからのメトリクスをモニタリングするよう Amazon CloudWatch アラームを作成する必要があります。アラームはベーキング期間中アクティブになり、いずれかのアラームが作動した場合、すべてのエンドポイントトラフィックは青のフリートにロールバックされます。エンドポイントに CloudWatch アラームを設定する方法については、前提条件のページ「[設定とモニタリングを自動ロールバックする](deployment-guardrails-configuration.md)」を参照してください。CloudWatch アラームの詳細については、[Amazon CloudWatch ユーザーガイド](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)の「*Amazon CloudWatch でのアラームの使用*」を参照してください。

## Canary トラフィックシフトを設定する
<a name="deployment-guardrails-blue-green-canary-configure"></a>

デプロイの準備が整い、エンドポイントに Amazon CloudWatch アラームを設定したら、Amazon SageMaker AI [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API または AWS CLI の [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) コマンドのいずれかを使って、デプロイを開始できます。

**Topics**
+ [エンドポイントを更新する方法 (API)](#deployment-guardrails-blue-green-canary-configure-api-update)
+ [既存の Blue/Green 更新ポリシーでエンドポイントを更新する方法 (API)](#deployment-guardrails-blue-green-canary-configure-api-existing)
+ [エンドポイントを更新する方法 (CLI)](#deployment-guardrails-blue-green-canary-configure-cli-update)

### エンドポイントを更新する方法 (API)
<a name="deployment-guardrails-blue-green-canary-configure-api-update"></a>

次の [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API の例は、Canary トラフィックシフトでエンドポイントを更新する方法を示しています。

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    DeploymentConfig={
        "BlueGreenUpdatePolicy": {
            "TrafficRoutingConfiguration": {
                "Type": "CANARY",
                "CanarySize": {
                    "Type": "CAPACITY_PERCENT",
                    "Value": 30
                },
                "WaitIntervalInSeconds": 600
            },
            "TerminationWaitInSeconds": 600,
            "MaximumExecutionTimeoutInSeconds": 1800
        },
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "<your-cw-alarm>"
                }
            ]
        }
    }
)
```

Canary トラフィックシフトオプションを設定するには、以下を実行します。
+ `EndpointName` には、更新する既存のエンドポイントの名前を使用します。
+ `EndpointConfigName` には、使用するエンドポイント設定の名前を使用します。
+ `DeploymentConfig` と `BlueGreenUpdatePolicy` の下の `TrafficRoutingConfiguration` で、`Type` パラメータを `CANARY` に設定します。これは、デプロイが Canary トラフィックシフトを使うよう指定します。
+ `CanarySize` フィールドでは、`Type` と `Value` パラメータを変更することで canary のサイズを変更できます。`Type` には、`CAPACITY_PERCENT` を使用します。これは、canary として使う緑のフリートの割合を意味し、`30` には `Value` を設定します。この例では、緑のフリートの容量の 30% を canary として使用します。canary のサイズは、緑のフリートの容量の 50% 以下になるように注意してください。
+ `WaitIntervalInSeconds` の場合は、`600` を使用します。このパラメータは、間隔シフト間で所定の時間 (秒単位) 待機するよう SageMaker AI に指示します。この間隔は、canary ベーキング期間の長さです。前の例では、SageMaker AI は canary シフト後 10 分間待機してから、2 番目と最後のトラフィックシフトを完了します。
+ `TerminationWaitInSeconds` の場合は、`600` を使用します。このパラメータは SageMaker AI に対し、緑のフリートが完全にアクティブになった後、青のフリートのインスタンスを終了するまで、所定の時間 (秒単位) 待機するよう指示します。この例では、SageMaker AI は最後のベーキング期間後 10 分間待機してから、青のフリートを終了します。
+ `MaximumExecutionTimeoutInSeconds` の場合は、`1800` を使用します。このパラメータは、デプロイがタイムアウトするまでに実行できる最大時間を設定します。前の例では、デプロイが終了するまでの制限時間は 30 分です。
+ `AutoRollbackConfiguration` の `Alarms` フィールドでは、CloudWatch アラームを名前で追加できます。使うアラームごとに 1 つの `AlarmName: <your-cw-alarm>` エントリを作成します。

### 既存の Blue/Green 更新ポリシーでエンドポイントを更新する方法 (API)
<a name="deployment-guardrails-blue-green-canary-configure-api-existing"></a>

[CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) API を使ってエンドポイントを作成する場合は、必要に応じて、将来のエンドポイントの更新に再利用するデプロイ設定を指定できます。前の UpdateEndpoint API の例と同じ `DeploymentConfig` オプションを使用できます。CreateEndpoint API の動作に変化はありません。デプロイ設定を指定しても、エンドポイントでの Blue/Green 更新が自動的に実行されるわけではありません。

以前のデプロイ設定を使うオプションは、[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API エンドポイントを使ってエンドポイントを更新するときに発生します。エンドポイントを更新するときは、`RetainDeploymentConfig` オプションを使って、エンドポイントの作成時に指定したデプロイ設定を保持できます。

[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API を呼び出すときに、`RetainDeploymentConfig` を `True` に設定して、元のエンドポイント設定の `DeploymentConfig` オプションを保持します。

```
response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    RetainDeploymentConfig=True
)
```

### エンドポイントを更新する方法 (CLI)
<a name="deployment-guardrails-blue-green-canary-configure-cli-update"></a>

AWS CLI を使う場合、次の例は、[update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) コマンドを使って Blue/Green canary デプロイメントを始める方法を示しています。

```
update-endpoint
--endpoint-name <your-endpoint-name>
--endpoint-config-name <your-config-name> 
--deployment-config '"BlueGreenUpdatePolicy": {"TrafficRoutingConfiguration": {"Type": "CANARY",
    "CanarySize": {"Type": "CAPACITY_PERCENT", "Value": 30}, "WaitIntervalInSeconds": 600},
    "TerminationWaitInSeconds": 600, "MaximumExecutionTimeoutInSeconds": 1800},
    "AutoRollbackConfiguration": {"Alarms": [{"AlarmName": "<your-alarm>"}]}'
```

Canary トラフィックシフトオプションを設定するには、以下を実行します。
+ `endpoint-name` には、更新するエンドポイントの名前を使用します。
+ `endpoint-config-name` には、使用するエンドポイント設定の名前を使用します。
+ `deployment-config` には、[BlueGreenUpdatePolicy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_BlueGreenUpdatePolicy.html) JSON オブジェクトを使用します。

**注記**  
JSON オブジェクトをファイルに保存する場合は、*AWS CLI ユーザーガイド*の「[AWS CLI スケルトンと入力パラメータの生成](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-skeleton.html)」を参照してください。

# Linear トラフィックシフトを使用する
<a name="deployment-guardrails-blue-green-linear"></a>

Linear トラフィックシフトは、古いフリート (青のフリート) から新しいフリート (緑のフリート) に徐々にトラフィックをシフトさせることができます。Linear トラフィックシフトにより、複数のステップでトラフィックをシフトできるため、エンドポイントで障害が発生する可能性を最小限に抑えることができます。この Blue/Green デプロイオプションでは、トラフィックシフトを最も細かくコントロールできます。

各ステップでアクティブ化するインスタンス数または緑のフリートの容量の割合のいずれかを選択できます。各 Linear ステップは、緑のフリートの容量の 10～50% の間にしてください。ステップごとに、事前に指定した Amazon CloudWatch アラームが緑のフリートのメトリクスをモニタリングするベーキング期間があります。ベーキング期間が終了し、アラームの作動がなければ、緑のフリートのアクティブな部分は引き続きトラフィックを受信し、新しいステップが始まります。ベーキング期間中にアラームが作動した場合、100% のエンドポイントトラフィックは青のフリートにロールバックされます。

次の図は、Linear トラフィックシフトがトラフィックを青と緑のフリートにルーティングする方法を示しています。

![\[3 段階で古いフリートから新しいフリートへの Linear トラフィックシフトが完了。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/deployment-guardrails-blue-green-linear.png)


SageMaker AI が新しいフリートをプロビジョニングすると、緑のフリートの最初の部分がオンになり、トラフィックを受信します。SageMaker AI は青のフリートの同じサイズの部分を非アクティブ化し、ベーキング期間が始まります。アラームが作動した場合、すべてのエンドポイントトラフィックは青のフリートにロールバックされます。ベーキング期間が終了すると、次のステップが始まります。緑のフリートの別の部分がアクティブ化されてトラフィックを受信し、青のフリートの一部が非アクティブ化され、別のベーキング期間が始まります。青のフリートが完全に非アクティブ化され、緑のフリートが完全にアクティブ化され、すべてのトラフィックを受信するまで、同じプロセスが繰り返されます。いずれかの時点でアラームが作動すると、SageMaker AI はシフトプロセスを終了し、100% のトラフィックが青のフリートにロールバックされます。

## 前提条件
<a name="deployment-guardrails-blue-green-linear-prereqs"></a>

Linear トラフィックシフトを使うデプロイを設定する前に、エンドポイントからのメトリクスをモニタリングする CloudWatch アラームを作成する必要があります。アラームはベーキング期間中アクティブになり、いずれかのアラームが作動した場合、すべてのエンドポイントトラフィックは青のフリートにロールバックされます。エンドポイントに CloudWatch アラームを設定する方法については、前提条件のページ「[設定とモニタリングを自動ロールバックする](deployment-guardrails-configuration.md)」を参照してください。CloudWatch アラームの詳細については、[Amazon CloudWatch ユーザーガイド](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)の「*Amazon CloudWatch でのアラームの使用*」を参照してください。

## Linear トラフィックシフトを設定する
<a name="deployment-guardrails-blue-green-linear-configure"></a>

デプロイの準備が整い、エンドポイントに CloudWatch アラームを設定したら、Amazon SageMaker AI [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API または AWS CLI の [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) コマンドのいずれかを使って、デプロイを開始できます。

**Topics**
+ [エンドポイントを更新する方法 (API)](#deployment-guardrails-blue-green-linear-configure-api-update)
+ [既存の Blue/Green 更新ポリシーでエンドポイントを更新する方法 (API)](#deployment-guardrails-blue-green-linear-configure-api-existing)
+ [エンドポイントを更新する方法 (CLI)](#deployment-guardrails-blue-green-canary-configure-cli-update)

### エンドポイントを更新する方法 (API)
<a name="deployment-guardrails-blue-green-linear-configure-api-update"></a>

次の [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API の例は、Linear トラフィックシフトでエンドポイントを更新する方法を示しています。

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    DeploymentConfig={
        "BlueGreenUpdatePolicy": {
            "TrafficRoutingConfiguration": {
                "Type": "LINEAR",
                "LinearStepSize": {
                    "Type": "CAPACITY_PERCENT",
                    "Value": 20
                },
                "WaitIntervalInSeconds": 300
            },
            "TerminationWaitInSeconds": 300,
            "MaximumExecutionTimeoutInSeconds": 3600
        },
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "<your-cw-alarm>"
                }
            ]
        }
    }
)
```

Linear トラフィックシフトオプションを設定するには、以下を実行します。
+ `EndpointName` には、更新する既存のエンドポイントの名前を使用します。
+ `EndpointConfigName` には、使用するエンドポイント設定の名前を使用します。
+ `DeploymentConfig` と `BlueGreenUpdatePolicy` の下の `TrafficRoutingConfiguration` で、`Type` パラメータを `LINEAR` に設定します。これは、デプロイが Linear トラフィックシフトを使うよう指定します。
+ `LinearStepSize` フィールドでは、`Type` と `Value` パラメータを変更することでステップのサイズを変更できます。`Type` には、`CAPACITY_PERCENT` を使用します。これは、ステップサイズとして使う緑のフリートの割合を意味し、`Value` には `20` を設定します。この例では、トラフィックシフトステップごとに緑のフリートの容量の 20% をオンにします。Linear ステップサイズをカスタマイズする場合、緑のフリートの容量の 10～50% のステップのみを使うよう注意してください。
+ `WaitIntervalInSeconds` の場合は、`300` を使用します。このパラメータは、トラフィックシフト間で所定の時間 (秒単位) 待機するように SageMaker AI に指示します。この間隔は、各 Linear ステップ間のベーキング期間の長さです。前の例では、SageMaker AI は各トラフィックシフト間で 5 分間待機します。
+ `TerminationWaitInSeconds` の場合は、`300` を使用します。このパラメータは SageMaker AI に対し、緑のフリートが完全にアクティブになった後、青のフリートのインスタンスを終了するまで、所定の時間 (秒単位) 待機するよう指示します。この例では、SageMaker AI は最後のベーキング期間後 5 分間待機してから、青のフリートを終了します。
+ `MaximumExecutionTimeoutInSeconds` の場合は、`3600` を使用します。このパラメータは、デプロイがタイムアウトするまでに実行できる最大時間を設定します。前の例では、デプロイが終了するまでの制限時間は 1 時間です。
+ `AutoRollbackConfiguration` の `Alarms` フィールドでは、CloudWatch アラームを名前で追加できます。使うアラームごとに 1 つの `AlarmName: <your-cw-alarm>` エントリを作成します。

### 既存の Blue/Green 更新ポリシーでエンドポイントを更新する方法 (API)
<a name="deployment-guardrails-blue-green-linear-configure-api-existing"></a>

[CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) API を使ってエンドポイントを作成する場合は、必要に応じて、将来のエンドポイントの更新に再利用するデプロイ設定を指定できます。前の UpdateEndpoint API の例と同じ `DeploymentConfig` オプションを使用できます。CreateEndpoint API の動作に変化はありません。デプロイ設定を指定しても、エンドポイントでの Blue/Green 更新が自動的に実行されるわけではありません。

以前のデプロイ設定を使うオプションは、[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API エンドポイントを使ってエンドポイントを更新するときに発生します。エンドポイントを更新するときは、`RetainDeploymentConfig` オプションを使って、エンドポイントの作成時に指定したデプロイ設定を保持できます。

[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API を呼び出すときに、`RetainDeploymentConfig` を `True` に設定して、元のエンドポイント設定の `DeploymentConfig` オプションを保持します。

```
response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    RetainDeploymentConfig=True
)
```

### エンドポイントを更新する方法 (CLI)
<a name="deployment-guardrails-blue-green-canary-configure-cli-update"></a>

AWS CLI を使う場合、次の例は、[update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) コマンドを使って Blue/Green Linear デプロイメントを始める方法を示しています。

```
update-endpoint
--endpoint-name <your-endpoint-name>
--endpoint-config-name <your-config-name> 
--deployment-config '{"BlueGreenUpdatePolicy": {"TrafficRoutingConfiguration": {"Type": "LINEAR",
    "LinearStepSize": {"Type": "CAPACITY_PERCENT", "Value": 20}, "WaitIntervalInSeconds": 300},
    "TerminationWaitInSeconds": 300, "MaximumExecutionTimeoutInSeconds": 3600},
    "AutoRollbackConfiguration": {"Alarms": [{"AlarmName": "<your-alarm>"}]}'
```

Linear トラフィックシフトオプションを設定するには、以下を実行します。
+ `endpoint-name` には、更新するエンドポイントの名前を使用します。
+ `endpoint-config-name` には、使用するエンドポイント設定の名前を使用します。
+ `deployment-config` には、[BlueGreenUpdatePolicy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_BlueGreenUpdatePolicy.html) JSON オブジェクトを使用します。

**注記**  
JSON オブジェクトをファイルに保存する場合は、*AWS CLI ユーザーガイド*の「[AWS CLI スケルトンと入力パラメータの生成](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-skeleton.html)」を参照してください。

# ローリングデプロイを使用する
<a name="deployment-guardrails-rolling"></a>

エンドポイントを更新するときに、ローリングデプロイを指定して、トラフィックを古いフリートから新しいフリートに徐々に移行することができます。評価期間を指定して古いフリートのインスタンスを終了する前に新しいインスタンスに問題がないか監視できるだけでなく、移行トラフィックのステップのサイズも制御できます。ローリングデプロイでは、各トラフィックが新しいフリートに移行された後、古いフリートのインスタンスがクリーンアップされるので、エンドポイントの更新に必要な追加インスタンスの量が減ります。これは、高需要の高速化されたインスタンスで特に役立ちます。

ローリングデプロイでは、設定可能なバッチサイズでエンドポイントを更新することにより、モデルの以前のバージョンのデプロイを新しいバージョンに徐々に置き換えます。ローリングデプロイのトラフィックの移行動作はブルー/グリーンデプロイの[線形トラフィック移行モード](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-blue-green-linear.html)に似ていますが、ブルー/グリーンデプロイと比較し、ローリングデプロイにはキャパシティ要件が削減されるというメリットがあります。ローリングデプロイでは、一度にアクティブになるインスタンスが少なくなり、新しいフリートで更新するインスタンスの数をきめ細かく制御できます。大規模モデルや多くのインスタンスを持つ大規模エンドポイントを使用している場合は、ブルー/グリーンデプロイの代わりにローリングデプロイの使用を検討する必要があります。

次のリストで、Amazon SageMaker AI の ローリングデプロイの主な機能について説明します:
+ **ベーキング期間。**ベーキング期間とは、次のデプロイステージに進む前に新しいフリートを監視する一定の時間のことです。どのベーキング期間中においても、事前に指定したアラームのいずれかが作動した場合、すべてのエンドポイントトラフィックは古いフリートにロールバックされます。ベーキング期間は、トラフィックシフトを永続的なものにする前に、更新の信頼を構築するのに役立ちます。
+ **ローリングのバッチサイズ。**トラフィック移行のための各バッチサイズ、または各バッチで更新するインスタンスの数をきめ細かく制御できます。この数値は、フリートのサイズの 5～50% の範囲で設定できます。バッチサイズは、インスタンス数、またはフリート全体の割合として指定できます。
+ **自動ロールバック。**SageMaker AI が新しいフリートの監視に使用する Amazon CloudWatch アラームを指定できます。更新されたコードの問題によってアラームが作動した場合、SageMaker AI は可用性を維持するために古いフリートへの自動ロールバックを開始し、リスクを最小限に抑えます。

**注記**  
エンドポイントが [[除外事項]](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-exclusions.html) ページに一覧表示されているいずれかの機能を使用している場合、ローリングデプロイは使用できません。

## 仕組み
<a name="deployment-guardrails-rolling-how-it-works"></a>

ローリングデプロイ中、SageMaker AI は、すべての新しいインスタンスを一度にプロビジョニングすることなく古いフリートから新しいフリートにトラフィックを移行するためのインフラストラクチャを提供します。SageMaker AI は次の手順を使用してトラフィックを移行します。

1. SageMaker AI は、新しいフリートのインスタンスの最初のバッチをプロビジョニングします。

1. トラフィックの一部は、古いインスタンスから新しいインスタンスの最初のバッチに移行されます。

1. ベーキング期間の後、Amazon CloudWatch アラームが作動しなければ、SageMaker AI は古いインスタンスのバッチをクリーンアップします。

1. SageMaker AI は、デプロイが完了するまで、バッチのインスタンスのプロビジョニング、移行、およびクリーンアップを継続します。

いずれかのベーキング期間中にアラームが作動すると、トラフィックは指定したサイズのバッチで古いフリートにロールバックされます。また、ローリングデプロイを指定し、アラームが作動した場合にトラフィックの 100% を古いフリートに戻すこともできます。

次の図は、前のステップで説明したように、ローリングデプロイが成功する場合の進行状況を示しています。

![\[ローリングデプロイにおいて古いフリートから新しいフリートにトラフィックを正常に移行する手順。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/deployment-guardrails-rolling-diagram.png)


目的のデプロイ構成を指定するだけでローリングデプロイを作成できます。その後、SageMaker AI は新しいインスタンスのプロビジョニング、古いインスタンスの終了、トラフィックの移行を行います。デプロイを作成および管理するには、既存の [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) および [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) SageMaker API と AWS Command Line Interface コマンドを使用します。

## 前提条件
<a name="deployment-guardrails-prereqs"></a>

ローリングデプロイを設定する前に、エンドポイントからのメトリクスを監視する Amazon CloudWatch アラームを作成する必要があります。ベーキング期間中にアラームが作動した場合、トラフィックは古いフリートにロールバックされます。エンドポイントに CloudWatch アラームを設定する方法については、前提条件のページの「Auto-Rollback Configuration and Monitoring」を参照してください。CloudWatch アラームの詳細については、[Amazon CloudWatch ユーザーガイド](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)の「*Amazon CloudWatch でのアラームの使用*」を参照してください。

また、[[除外事項]](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-exclusions.html) ページを確認して、エンドポイントがローリングデプロイの要件を満たしていることを確認してください。

## ローリングのバッチサイズを決定する
<a name="deployment-guardrails-rolling-batch-size"></a>

エンドポイントを更新する前に、新しいフリートにトラフィックを段階的に移行するのに使用するバッチサイズを決定します。

ローリングデプロイでは、バッチサイズにフリートの容量の 5～50% を指定できます。大きいバッチサイズを選択すると、デプロイはより短時間で完了します。ただし、エンドポイントが更新中に必要とする容量は、バッチサイズのオーバーヘッドとほぼ同じであることに注意してください。小さいバッチサイズを選択した場合、デプロイには時間がかかりますが、デプロイ中に使用する容量は少なくなります。

## ローリングデプロイを設定する
<a name="deployment-guardrails-rolling-configure"></a>

デプロイの準備ができ、エンドポイントに CloudWatch アラームを設定したら、SageMaker AI [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API または の [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) コマンドを使用してデプロイ AWS Command Line Interface を開始できます。

エンドポイントを更新する方法

次の例は、Boto3 SageMaker AI クライアントの [update\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/update_endpoint.html) メソッドを使用し、ローリングデプロイでエンドポイントを更新する方法を示しています。

ローリングデプロイを設定するには、次の例とフィールドを使用します。
+ `EndpointName` には、更新する既存のエンドポイントの名前を使用します。
+ `EndpointConfigName` には、使用するエンドポイント設定の名前を使用します。
+ `AutoRollbackConfiguration` オブジェクトの `Alarms` フィールドに、CloudWatch アラームを名前で追加できます。使うアラームごとに 1 つの `AlarmName: <your-cw-alarm>` エントリを作成します。
+ `DeploymentConfig` で、`RollingUpdatePolicy` オブジェクトに次のフィールドを指定します。
  + `MaximumExecutionTimeoutInSeconds` — デプロイの合計制限時間。この制限を超えるとタイムアウトになります。このフィールドに指定できる最大値は 28800 秒、つまり 8 時間です。
  + `WaitIntervalInSeconds` — SageMaker AI が新しいフリートの各バッチのアラームを監視するベーキング期間の長さ。
  + `MaximumBatchSize` — 使用するバッチの `Type` (インスタンス数またはフリート全体に対する割合) と `Value`、または各バッチのサイズを指定します。
  + `RollbackMaximumBatchSize` — このオブジェクトを使用して、アラームが作動した場合のロールバック戦略を指定します。使用するバッチの `Type` (インスタンス数またはフリート全体に対する割合) と `Value`、または各バッチのサイズを指定します。これらのフィールドを指定しない場合、または値をエンドポイントの 100% に設定した場合、SageMaker AI はブルー/グリーンロールバック戦略を使用し、アラームの作動時にすべてのトラフィックを古いフリートにロールバックします。

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    DeploymentConfig={
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "<your-cw-alarm>"
                },
            ]
        },
        "RollingUpdatePolicy": { 
            "MaximumExecutionTimeoutInSeconds": number,
            "WaitIntervalInSeconds": number,
            "MaximumBatchSize": {
                "Type": "INSTANCE_COUNT" | "CAPACITY_PERCENTAGE" (default),
                "Value": number
            },
            "RollbackMaximumBatchSize": {
                "Type": "INSTANCE_COUNT" | "CAPACITY_PERCENTAGE" (default),
                "Value": number
            },
        }  
    }
)
```

エンドポイントを更新した後、ローリングデプロイのステータスやエンドポイントの正常性を確認したい場合があります。SageMaker AI コンソールでエンドポイントのステータスを確認することも、[DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) API を使用してエンドポイントのステータスを確認することもできます。

`DescribeEndpoint` API によって返される `VariantStatus` オブジェクトの `Status`フィールドで、エンドポイントの現在のデプロイまたは動作状況がわかります。有効なステータスとその意味に関する詳細については、「[ProductionVariantStatus](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariantStatus.html)」を参照してください。

ローリングデプロイを試み、エンドポイントのステータスが `UpdateRollbackFailed` の場合、トラブルシューティングヘルプについて次のセクションを参照してください。

## 障害処理
<a name="deployment-guardrails-rolling-failures"></a>

ローリングデプロイが失敗し、自動ロールバックも同様の場合、エンドポイントのステータスは `UpdateRollbackFailed` のままです。このステータスは、エンドポイントの背後にあるインスタンスに異なるエンドポイント設定がデプロイされ、古いエンドポイント設定と新しいエンドポイント設定が混在してサービスが稼働中であることを意味しています。

[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API を再度呼び出して、エンドポイントを正常な状態に戻すことができます。目的のエンドポイント設定とデプロイ設定 (ローリングデプロイ、ブルー/グリーンデプロイ、またはどちらでもない) を指定して、エンドポイントを更新します。

[DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) API を呼び出して、エンドポイントの正常性を再確認できます。これは、`Status` フィールドとして `VariantStatus` オブジェクトで返されます。更新が成功すると、エンドポイントの `Status` は `InService` に戻ります。

# Exclusions
<a name="deployment-guardrails-exclusions"></a>

Blue/Green デプロイまたはローリングデプロイを実行する場合、新しいエンドポイント設定には古いエンドポイント設定と同じバリアント名が必要です。また、現時点では、エンドポイントがデプロイガードレールの対象外となる機能ベースの除外もあります。エンドポイントで次の機能のいずれかを使用している場合は、エンドポイントでデプロイガードレールを使用することはできません。エンドポイントは、All At Once トラフィックシフトで Blue/Green デプロイを使うようにフォールバックし、最後のベーキング期間はありません。
+ Marketplace コンテナ
+ Inf1 (Inferentiaベース) インスタンスを使うエンドポイント

ローリングデプロイを行う場合は、追加の機能ベースの除外があります。
+ サーバーレス推論エンドポイント
+ マルチバリアント推論エンドポイント