[update] AWS Elemental MediaConvertで出力先のS3ストレージクラスを指定できるようになりました!

AWS Elemental MediaConvertで出力先となるS3のストレージクラスが指定できるようになりました。変換後に別途S3オブジェクトのストレージクラスを変更したり、S3バケットにライフサイクルを設定しておくといったことが不要になります。
2023.08.30

はじめに

清水です。本エントリでお伝えするAWSアップデート情報はこちら!ブロードキャストグレードの機能を備えたファイルベースの動画変換サービスであるAWS Elemental MediaConvertで出力先のS3ストレージクラスが指定できるようになりました!現時点(2023/08/30 17:00 JST)でAWS What's Newなどでの情報は確認できていませんが、MediaConvertマネジメントコンソールから設定が可能となっています。

AWS API Changesのサイトでも紹介されています。

更新内容は以下の通り、ほかアップデートとともに「ability to specify Amazon S3 destination storage class」として扱われています。

This release includes additional audio channel tags in Quicktime outputs, support for film grain synthesis for AV1 outputs, ability to create audio-only FLAC outputs, and ability to specify Amazon S3 destination storage class.

AWS API Changes - 2023/08/24 - AWS Elemental MediaConvert - 11 updated api methods

AWS CLIの更新情報についてもチェックしてみました。AWS CLI v1では1.29.34、AWS CLI v2では2.13.13で今回の更新がされていることが確認できます。

本エントリではこのMediaConvertの出力先S3のストレージクラス指定のアップデートについて、実際に確認してみたのでまとめてみたいと思います。

MediaConvertで出力先S3のストレージクラスを指定してみた

MediaConvertとS3のストレージクラス

MediaConvertでは出力先に任意のS3バケットが指定でき、出力となる動画ファイルはS3上のオブジェクトとして保存されます。ここで、S3にはストレージクラスという設定項目があります。用途に応じて適切なストレージクラスを選択することで、コストの最適化が可能になります。

ストレージクラスはS3オブジェクトごとに設定が可能です。新しいオブジェクトの作成時にストレージクラスを指定できるほか、すでにS3に保存されているオブジェクトのストレージクラスの変更やS3バケットのライフサイクル設定でストレージクラスを変更するということもできます。

既存のオブジェクトのストレージクラス変更についてはコピーの作成になるなど、いくつか注意事項があることから、ストレージクラス変更についてはライフサイクル設定で行うことが多いかな、と個人的には思います。この場合、オブジェクトの作成からストレージクラスの変更まで、多少なりとタイムラグが発生しますよね。またライフサイクル移行リクエストで別途料金も発生します。可能であればオブジェクト作成の際にストレージクラスを指定してしまいたいですよね。そんなことが今後はMediaConvertで可能になります!

以下、実際にMediaConvertでの出力先S3のストレージクラス指定について確認していきます。

出力先S3バケット作成

まずはMediaConvertの出力先となるS3バケットを作成します。既存のものを使用することもできるのですが、ライフサイクルが設定されていてストレージクラスが意図せず変更されてしまう、なんてこともあるかもと思い、まっさらなS3バケットを作成することにしました。

S3のマネジメントコンソールから、デフォルト設定で作成します。

MediaConvertでJob作成時にS3のストレージクラスを指定

出力先となるS3バケットが作成できたら、続いて本題であるMediaConvertのJobを作成、その際に出力先のS3オブジェクトのストレージクラスを設定してみます。

MediaConvertのマネジメントコンソール、[Create job]ボタンから進みます。Input fileのURLを指定したら、Output groupsの[Add]ボタンを押下します。

Output group、今回はFile groupで進めました。

File group settingsの項目、Destinationの下にS3 storage classの項目がありますね!

セレクトボックスを選択してみました。S3ストレージクラスは以下から選択可能になっています。Glacier Flexible RetrievalではなくGlacierのままだったり、Glacier Instant Retrievalがなかったりするのが気になるところではありますが、API Reference的にも現時点で設定できるのはこの7種のみのようです。

  • Standard
  • Reduced Redundancy
  • Standard Infrequent Access
  • One Zone Infrequent Access
  • Intelligent Tiering
  • Glacier
  • Glacier Deep Archive

今回はOne Zone Infrequent Accessを選択しました。

Output settingsでPresetを選択します。今回はSystem presetsの「Generic-HD、System-Generic_Hd_Mp4_Avc_Aac_16x9_Sdr_1920x1080p_30Hz_10Mbps_Qvbr_Vq9」を使用しました。

忘れると何もはじまらないService roleを設定し、[Create]します!

Jobが作成できました。

Jobが完了したら、変換後の出力ファイルを確認してみましょう。ストレージクラスがOne Zone-IAになっていますね!

$ aws s3api head-object 
    --bucket mediaconvert-specify-s3-storage-class-jxxxxxxe
    --key IMG_3435_OneZoneIA.mp4                  
{
    "AcceptRanges": "bytes",
    "LastModified": "2023-08-30T07:14:43+00:00",
    "ContentLength": 54387260,
    "ETag": "\"235fxxxxxxxxxxxxxxxxxxxxxxxxxx69-4\"",
    "ContentType": "video/mp4",
    "ServerSideEncryption": "AES256",
    "Metadata": {},
    "StorageClass": "ONEZONE_IA"
}

Job内容のJSONからストレージクラスを指定していることを確認

MediaConvertのJob作成時にS3ストレージクラスを指定し、変換後のS3オブジェクトが設定されたストレージクラスとなっていることを確認しました。続いて、このMediaConvertのJob内容をJSONで確認してみましょう。

マネジメントコンソールから[View JSON]ボタンでJob内容のJSONを表示します。ハイライト表示した箇所、DestinationSettingsS3SettingsStorageClassONEZONE_IAを指定していることが確認できますね。

{
  "Queue": "arn:aws:mediaconvert:ap-northeast-1:123456789012:queues/Default",
  "Role": "arn:aws:iam::123456789012:role/ElementalMediaConvert-role",
  "Settings": {
    "TimecodeConfig": {
      "Source": "ZEROBASED"
    },
    "OutputGroups": [
      {
        "Name": "File Group",
        "Outputs": [
          {
            "Preset": "System-Generic_Hd_Mp4_Avc_Aac_16x9_Sdr_1920x1080p_30Hz_10Mbps_Qvbr_Vq9",
            "Extension": "mp4",
            "NameModifier": "_OneZoneIA"
          }
        ],
        "OutputGroupSettings": {
          "Type": "FILE_GROUP_SETTINGS",
          "FileGroupSettings": {
            "Destination": "s3://mediaconvert-specify-s3-storage-class-jxxxxxxe/",
            "DestinationSettings": {
              "S3Settings": {
                "StorageClass": "ONEZONE_IA"
              }
            }
          }
        }
      }
    ],
    "Inputs": [
      {
        "AudioSelectors": {
          "Audio Selector 1": {
            "DefaultSelection": "DEFAULT"
          }
        },
        "VideoSelector": {},
        "TimecodeSource": "ZEROBASED",
        "FileInput": "s3://DOC-EXAMPLE-BUCKET/mediaconvert-input/IMG_3435.MOV"
      }
    ]
  },
  "AccelerationSettings": {
    "Mode": "DISABLED"
  },
  "StatusUpdateInterval": "SECONDS_60",
  "Priority": 0
}

このS3SettingsStorageClassについては、AWS Elemental MediaConvert API Referenceに記載があります。

なお、今回はFileGroupSettingsでの確認でしたが、その他の設定、CmafGroupSettingsDashIsoGroupSettingsHlsGroupSettingsMsSmoothGroupSettingsのそれぞれでこのStorageClassの設定が可能です。

またInternet Archive Wayback Machineで2023/03/24時点のAPI Referenceの同ページを確認すると、このStorageClassの項目について記載がないことから、たしかに以前はストレージクラスの設定ができなかった(Standardのみだった)ことが確認できます。

Jobs - AWS Elemental MediaConvert API Reference - Internet Archive Wayback Machine (2023/03/24)

なお、マネジメントコンソールでS3 storage classをStandardにした場合や、設定しない状態(デフォルトのNot Setのまま)の場合についても確認してみました。

JobのJSONとしては、Storage classをStandardにした場合はStorageClassの項目が追加されますが、設定しないデフォルトのままの状態(Not Set)ではStorageClassの項目が含まれない、という結果になりました。

S3 1=classでStandardを指定

{
  "Queue": "arn:aws:mediaconvert:ap-northeast-1:123456789012:queues/Default",
  "UserMetadata": {},
  "Role": "arn:aws:iam::123456789012:role/ElementalMediaConvert-role",
  "Settings": {
    "TimecodeConfig": {
      "Source": "ZEROBASED"
    },
    "OutputGroups": [
      {
        "Name": "File Group",
        "Outputs": [
          {
            "Preset": "System-Generic_Hd_Mp4_Avc_Aac_16x9_Sdr_1920x1080p_30Hz_10Mbps_Qvbr_Vq9",
            "Extension": "mp4",
            "NameModifier": "_Standard"
          }
        ],
        "OutputGroupSettings": {
          "Type": "FILE_GROUP_SETTINGS",
          "FileGroupSettings": {
            "Destination": "s3://mediaconvert-specify-s3-storage-class-jxxxxxxe/",
            "DestinationSettings": {
              "S3Settings": {
                "StorageClass": "STANDARD"
              }
            }
          }
        }
      }
    ],
    "Inputs": [
      {
        "AudioSelectors": {
          "Audio Selector 1": {
            "DefaultSelection": "DEFAULT"
          }
        },
        "VideoSelector": {},
        "TimecodeSource": "ZEROBASED",
        "FileInput": "s3://DOC-EXAMPLE-BUCKET/mediaconvert-input/IMG_3435.MOV"
      }
    ]
  },
  "AccelerationSettings": {
    "Mode": "DISABLED"
  },
  "StatusUpdateInterval": "SECONDS_60",
  "Priority": 0
}

S3 1=classで設定しないまま

{
  "Queue": "arn:aws:mediaconvert:ap-northeast-1:123456789012:queues/Default",
  "Role": "arn:aws:iam::123456789012:role/ElementalMediaConvert-role",
  "Settings": {
    "TimecodeConfig": {
      "Source": "ZEROBASED"
    },
    "OutputGroups": [
      {
        "Name": "File Group",
        "Outputs": [
          {
            "Preset": "System-Generic_Hd_Mp4_Avc_Aac_16x9_Sdr_1920x1080p_30Hz_10Mbps_Qvbr_Vq9",
            "Extension": "mp4",
            "NameModifier": "_NotSet"
          }
        ],
        "OutputGroupSettings": {
          "Type": "FILE_GROUP_SETTINGS",
          "FileGroupSettings": {
            "Destination": "s3://mediaconvert-specify-s3-storage-class-jxxxxxxe/"
          }
        }
      }
    ],
    "Inputs": [
      {
        "AudioSelectors": {
          "Audio Selector 1": {
            "DefaultSelection": "DEFAULT"
          }
        },
        "VideoSelector": {},
        "TimecodeSource": "ZEROBASED",
        "FileInput": "s3://DOC-EXAMPLE-BUCKET/mediaconvert-input/IMG_3435.MOV"
      }
    ]
  },
  "AccelerationSettings": {
    "Mode": "DISABLED"
  },
  "StatusUpdateInterval": "SECONDS_60",
  "Priority": 0
}

変換後のファイルのとしては、どちらの場合もStandardのストレージクラスとなっていました。従来からMediaConvertの出力となるS3オブジェクトはStandardストレージクラスだったことが確認できましたね。

まとめ

AWS Elemental MediaConvertで出力先となるS3のストレージクラスを指定できるようになったアップデートについて確認してみました。これまでS3バケットのライフサイクルポリシーなどを用いて自動的にストレージクラスを変更することはできていましたが、これからは変換後の動画ファイルとなるS3オブジェクトが作成されるタイミングでストレージクラスを指定できます。ストレージクラス変更のタイムラグやライフサイクル移行リクエストを抑えて、用途に適した最適なストレージクラスを選択することができますね。MediaConvertで変換後の動画ファイルがあくまで中間ファイルでありオリジナルも別途保存しているような場合で、アクセス頻度が低ければ、今回のようにOne Zone-IAの利用が検討できるかと思います。またMeidaConvertで変換してからアーカイブしたい、といった場合には、S3 Glacier系のストレージクラスを指定するのも良さそうですね。アクセスパターンが想定できないけど、頻度が低いことも考えられる場合はIntelligent-Tieringを指定することでコストを最適化することもできそうです。(低冗長化ストレージ/Reduced Redundancy Storageはメリットがないため使用は推奨されません!)MediaConvertの利用でも用途にあわせて適切なストレージクラスを選択していきましょう。