【アップデート】Amazon Forecastで実行中のジョブを停止できるようになりました

Amazon Forecastの実行中ジョブを停止できるようになりました! 終わらないジョブの課金に震えて眠れない夜もあっただろう。
2021.03.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部の貞松です。

Amazon Forecastのアップデートにより、実行中の各種ジョブを途中で停止できるようになりました。
これにより、設定を誤って実行してしまったジョブや想定より時間が掛かり過ぎているジョブなどを途中で停止して余分な待ち時間や料金を削減することができます。

本記事では、AWSマネジメントコンソール上でのジョブの停止とAWS CLIでのジョブの停止について実際の動作を確認します。

対象となるForecastのジョブ

ジョブの停止に対応したForecastのジョブは以下の通りです。
ジョブを停止する用が無いCreate dataset group(データセットグループの作成)とForecast lookup(予測結果の可視化)以外は対応しているようです。
エクスポート関連のジョブ(Forecast exportとPredictor backtest export)も停止できるようになっているところが個人的には好感度高いです。

  • Dataset import
  • Train predictor
  • Create forecast
  • Create forecast export
  • Create predictor backtest export

AWSマネジメントコンソール上でのジョブの停止

AWSマネジメントコンソールのForecastの画面で実行中のジョブを停止する場合は、各種ジョブの一覧画面にあるStopボタンをクリックするだけでOKです。

例として、データセットインポートジョブの停止を実行します。一覧からステータスが「in progress」のジョブを選択して、右上の「Stop」ボタンをクリックします。

ジョブ停止の確認が表示されるので、画面の記述に従って「stop」と入力してジョブの停止を実行します。

ジョブの停止が完了すると、ステータスが「Stopped」になり、ユーザーからのリクエストによりジョブを停止した旨のメッセージが表示されます。

AWS CLIでのジョブの停止

AWS CLIを使用した場合のジョブ停止について確認してみます。
使用したAWS CLIのバージョンは 2.1.30 です。

こちらも例としてデータセットインポートジョブの停止を実行します。
まず、create-dataset-import-jobコマンドで新たなデータセットインポートジョブを作成します。

$ aws forecast create-dataset-import-job
  --dataset-import-job-name <unique job name>
  --dataset-arn <target dataset arn>
  --data-source '{"S3Config":{"Path":"<string>", "RoleArn":"<string>", "KMSKeyArn":"<string>"}}'

次にdescribe-dataset-import-jobコマンドを実行してジョブの状態を確認します。 StatusがCREATE_IN_PROGRESSになっています。

$ aws forecast describe-dataset-import-job --dataset-import-job-arn "<create-dataset-import-job実行時に出力されたDatasetImportJobArn>"
{
    "DatasetImportJobName": "electricity_usage_target_dataset_import_3",
    "DatasetImportJobArn": "arn:aws:forecast:ap-northeast-1:XXXXXXXXXXXX:dataset-import-job/electricity_usage_target_dataset/electricity_usage_target_dataset_import_3",
    "DatasetArn": "arn:aws:forecast:ap-northeast-1:XXXXXXXXXXXX:dataset/electricity_usage_target_dataset",
    "TimestampFormat": "yyyy-MM-dd HH:mm:ss",
    "UseGeolocationForTimeZone": false,
    "DataSource": {
        "S3Config": {
            "Path": "s3://XXXXXXXXXXXX/forecast/import-dataset/electricityusagedata.csv",
            "RoleArn": "arn:aws:iam::XXXXXXXXXXXX:role/service-role/AmazonForecast-ExecutionRole-XXXXXXXXXXXX"
        }
    },
    "DataSize": 0.049111499451100826,
    "Status": "CREATE_IN_PROGRESS",  <- ココを確認
    "CreationTime": "2021-03-11T12:19:04.260000+09:00",
    "LastModificationTime": "2021-03-11T12:19:20.462000+09:00"
}

ここでstop-resourceコマンドを実行して、ジョブを停止します。

$ aws forecast stop-resource  --resource-arn "<ここでは上記ジョブのDatasetImportJobArnを指定>"

再度、describe-dataset-import-jobコマンドを実行してジョブが停止していることを確認します。

$ aws forecast describe-dataset-import-job --dataset-import-job-arn "<DatasetImportJobArn>"
{
    "DatasetImportJobName": "electricity_usage_target_dataset_import_3",
    "DatasetImportJobArn": "arn:aws:forecast:ap-northeast-1:XXXXXXXXXXXX:dataset-import-job/electricity_usage_target_dataset/electricity_usage_target_dataset_import_3",
    "DatasetArn": "arn:aws:forecast:ap-northeast-1:XXXXXXXXXXXX:dataset/electricity_usage_target_dataset",
    "TimestampFormat": "yyyy-MM-dd HH:mm:ss",
    "UseGeolocationForTimeZone": false,
    "DataSource": {
        "S3Config": {
            "Path": "s3://XXXXXXXXXXXX/forecast/import-dataset/electricityusagedata.csv",
            "RoleArn": "arn:aws:iam::XXXXXXXXXXXX:role/service-role/AmazonForecast-ExecutionRole-XXXXXXXXXXXX"
        }
    },
    "DataSize": 0.049111499451100826,
    "Status": "CREATE_STOPPED", <-ジョブが停止されている
    "Message": "User has requested to stop the workflow", <-ユーザーのリクエストによりジョブを停止した旨のメッセージ
    "CreationTime": "2021-03-11T12:19:04.260000+09:00",
    "LastModificationTime": "2021-03-11T12:33:25.858000+09:00"
}

まとめ

Amazon Forecastの実行中ジョブの停止についてご紹介しました。
料金的な問題以外にも、同時並列実行数の上限など、無駄にジョブが実行されていると問題になるケースがあるので、今回のアップデートは実験段階だけでなく実運用上についても地味に重要な機能だと思っています。
(この勢いでAmazon Personalizeにも実行中ジョブの停止機能が追加されないかなと密かに思っています)

参考Webページ

Forecastのトレーニング時間あたりの料金はこちらを参照↓

Forecastの各ジョブにおける最大同時実行数の上限についてはこちらを参照↓