kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Elemental MediaConvert と CloudFront に入門できる「File Streaming with AWS Media Services」

AWS Elemental MediaConvert を使って動画ファイルを変換するっていう流れをシュッと速習したいな❗️と思って「File Streaming with AWS Media Services」ワークショップを実施してみた.

catalog.us-east-1.prod.workshops.aws

Amazon S3 に動画ファイルをアップロードしたら AWS Lambda 経由で AWS Elemental MediaConvert ジョブを呼び出して,最終的に Apple HTTP Live Streaming (HLS) フォーマットに変換した動画を Amazon CloudFront から配信する流れを構築・体験できる👌基本的な流れを体験できて個人的にスゴイ良かった \( 'ω')/

File Streaming with AWS Media Services: Introduction から引用

File Streaming with AWS Media Services: Automation から引用

目次

ワークショップを実施する時間は1時間で十分だった👌今回はオプションタスクの Region Redundancy(マルチリージョン構成)は試さずに手順を読むだけにした.

  • Preparation
  • Introduction
  • Storage
  • Amazon CloudFront
  • Transcoding
  • Playback
  • Automation
  • Region Redundancy
  • Clean Up

Storage

Amazon S3 バケットを2つ作っておく.設定をするときは sourcedestination を間違えないようにする👌

  • vod-source-us-east1-kakakakakku
  • vod-destination-us-east1-kakakakakku

Amazon CloudFront から配信する destination バケット側に CORS 設定をしておくのはなるほど💡

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    }
]

Amazon CloudFront

Amazon CloudFront のコンソールは微妙にアップデートされてて,ワークショップのキャプチャと異なる部分があった.とは言え大きな問題はなくデフォルト設定を中心にポチポチと進めて,あとは Price classUse North America, Europe, Asia, Middle East, and Africa にしたりもした.

Origin Access Control (OAC) は destination バケット側に自動的に設定されていた👌

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipal",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::vod-destination-us-east1-kakakakakku/*",
            "Condition": {
                "ArnLike": {
                    "AWS:SourceArn": "arn:aws:cloudfront::000000000000:distribution/XXXXXXXXXXXXXX"
                }
            }
        }
    ]
}

Transcoding

AWS Elemental MediaConvert で Apple HLS に変換するための設定をポチポチとしていく.そして出力グループとして3種類を設定してからジョブを実行した.1回目はワークショップ側でホスティングしている https://static.us-east-1.prod.workshops.aws/public/09743ab7-164b-4f79-a072-45f200ee05e0/assets/VANLIFE.m2ts を直接指定した.

  • H.264 (640 x 360), AAC, _360
  • H.264 (960 x 540), AAC, _540
  • H.264 (1280 x 720), AAC, _720

ジョブテンプレートを作るのはなるほど💡

docs.aws.amazon.com

Playback

ジョブの実行後に Amazon CloudFront 経由で動画を再生できた❗️Safari ならすぐに再生できて,Google Chrome の場合は拡張機能を追加したら再生できた.

そして,Amazon S3 バケット(destination 側)を確認すると以下のようなファイル構成で出力されていた.

$ aws s3 ls vod-destination-us-east1-kakakakakku/assets/VANLIFE/HLS/
2025-09-23 02:17:48        494 VANLIFE.m3u8
2025-09-23 02:17:48        737 VANLIFE_360.m3u8
2025-09-23 02:16:58     651232 VANLIFE_36020250923T021652_00001.ts
2025-09-23 02:17:03     658376 VANLIFE_36020250923T021657_00002.ts
2025-09-23 02:17:07    1069156 VANLIFE_36020250923T021702_00003.ts
2025-09-23 02:17:12     767040 VANLIFE_36020250923T021706_00004.ts
2025-09-23 02:17:16    1006176 VANLIFE_36020250923T021711_00005.ts
2025-09-23 02:17:21     632056 VANLIFE_36020250923T021715_00006.ts
2025-09-23 02:17:25     506848 VANLIFE_36020250923T021720_00007.ts
2025-09-23 02:17:30     780388 VANLIFE_36020250923T021724_00008.ts
2025-09-23 02:17:34     444244 VANLIFE_36020250923T021729_00009.ts
2025-09-23 02:17:39    1394208 VANLIFE_36020250923T021733_00010.ts
2025-09-23 02:17:43    1345140 VANLIFE_36020250923T021738_00011.ts
2025-09-23 02:17:48     690148 VANLIFE_36020250923T021743_00012.ts
2025-09-23 02:17:48      49256 VANLIFE_36020250923T021747_00013.ts
2025-09-23 02:17:48        737 VANLIFE_540.m3u8
2025-09-23 02:16:58    1179136 VANLIFE_54020250923T021652_00001.ts
2025-09-23 02:17:03    1381800 VANLIFE_54020250923T021657_00002.ts
2025-09-23 02:17:07    2288712 VANLIFE_54020250923T021702_00003.ts
2025-09-23 02:17:12    1568296 VANLIFE_54020250923T021706_00004.ts
2025-09-23 02:17:16    1788632 VANLIFE_54020250923T021711_00005.ts
2025-09-23 02:17:21    1096040 VANLIFE_54020250923T021715_00006.ts
2025-09-23 02:17:25     870252 VANLIFE_54020250923T021720_00007.ts
2025-09-23 02:17:30    1463392 VANLIFE_54020250923T021724_00008.ts
2025-09-23 02:17:34     674168 VANLIFE_54020250923T021729_00009.ts
2025-09-23 02:17:39    2607372 VANLIFE_54020250923T021733_00010.ts
2025-09-23 02:17:43    2487992 VANLIFE_54020250923T021738_00011.ts
2025-09-23 02:17:48    1189288 VANLIFE_54020250923T021742_00012.ts
2025-09-23 02:17:48      89864 VANLIFE_54020250923T021747_00013.ts
2025-09-23 02:17:48        737 VANLIFE_720.m3u8
2025-09-23 02:16:58    1947680 VANLIFE_72020250923T021652_00001.ts
2025-09-23 02:17:03    2082664 VANLIFE_72020250923T021657_00002.ts
2025-09-23 02:17:08    3311056 VANLIFE_72020250923T021702_00003.ts
2025-09-23 02:17:12    2223852 VANLIFE_72020250923T021707_00004.ts
2025-09-23 02:17:17    2632752 VANLIFE_72020250923T021711_00005.ts
2025-09-23 02:17:21    1573372 VANLIFE_72020250923T021716_00006.ts
2025-09-23 02:17:25    1162780 VANLIFE_72020250923T021720_00007.ts
2025-09-23 02:17:30    2159744 VANLIFE_72020250923T021724_00008.ts
2025-09-23 02:17:34     994520 VANLIFE_72020250923T021729_00009.ts
2025-09-23 02:17:39    3772972 VANLIFE_72020250923T021733_00010.ts
2025-09-23 02:17:43    3642312 VANLIFE_72020250923T021738_00011.ts
2025-09-23 02:17:48    1997876 VANLIFE_72020250923T021742_00012.ts
2025-09-23 02:17:48     149648 VANLIFE_72020250923T021747_00013.ts

Automation

最後は Amazon S3 バケット(source 側)に動画ファイルをアップロードしたら AWS Lambda 関数をトリガーするように統合していく❗️ちなみに IAM Role VODLambdaRole のポリシーを設定するときに Amazon CloudWatch Logs 関連のステートメントは AWSLambdaBasicExecutionRole と重複していて不要だと思う.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::000000000000:role/vod-MediaConvertRole"
            ],
            "Effect": "Allow",
            "Sid": "PassRole"
        },
        {
            "Action": [
                "mediaconvert:*"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow",
            "Sid": "MediaConvertService"
        }
    ]
}

AWS Lambda 関数自体に AWS Elemental MediaConvert のジョブテンプレート job_template.json を含めるのはなるほど〜💡という感じだった.

最終的に TestAsset.m2ts を Amazon S3 バケットにアップロードして,期待通りに動画を変換できた❗️Amazon S3 バケット(destination 側)を確認すると以下のようになっていた.697934d3-a14f-4cba-8f91-9ef20f1122b9/ というのは AWS Lambda 関数側で str(uuid.uuid4()) としてアセット ID を採番している.

$ aws s3 ls vod-destination-us-east1-kakakakakku/assets/697934d3-a14f-4cba-8f91-9ef20f1122b9/HLS/
2025-09-23 02:59:34        500 testasset.m3u8
2025-09-23 02:59:34        763 testasset_360.m3u8
2025-09-23 02:58:38     651232 testasset_36020250923T025832_00001.ts
2025-09-23 02:58:43     658376 testasset_36020250923T025837_00002.ts
2025-09-23 02:58:49    1069156 testasset_36020250923T025843_00003.ts
2025-09-23 02:58:54     767040 testasset_36020250923T025848_00004.ts
2025-09-23 02:58:59    1006176 testasset_36020250923T025853_00005.ts
2025-09-23 02:59:04     632056 testasset_36020250923T025858_00006.ts
2025-09-23 02:59:08     506848 testasset_36020250923T025903_00007.ts
2025-09-23 02:59:13     780388 testasset_36020250923T025907_00008.ts
2025-09-23 02:59:18     444244 testasset_36020250923T025912_00009.ts
2025-09-23 02:59:23    1394208 testasset_36020250923T025917_00010.ts
2025-09-23 02:59:28    1345140 testasset_36020250923T025922_00011.ts
2025-09-23 02:59:33     690148 testasset_36020250923T025927_00012.ts
2025-09-23 02:59:33      49256 testasset_36020250923T025932_00013.ts
2025-09-23 02:59:34        763 testasset_540.m3u8
2025-09-23 02:58:38    1179136 testasset_54020250923T025832_00001.ts
2025-09-23 02:58:43    1381800 testasset_54020250923T025837_00002.ts
2025-09-23 02:58:49    2288712 testasset_54020250923T025842_00003.ts
2025-09-23 02:58:54    1568296 testasset_54020250923T025848_00004.ts
2025-09-23 02:58:59    1788632 testasset_54020250923T025853_00005.ts
2025-09-23 02:59:04    1096040 testasset_54020250923T025858_00006.ts
2025-09-23 02:59:08     870252 testasset_54020250923T025903_00007.ts
2025-09-23 02:59:13    1463392 testasset_54020250923T025907_00008.ts
2025-09-23 02:59:18     674168 testasset_54020250923T025912_00009.ts
2025-09-23 02:59:23    2607372 testasset_54020250923T025917_00010.ts
2025-09-23 02:59:28    2487992 testasset_54020250923T025922_00011.ts
2025-09-23 02:59:33    1189288 testasset_54020250923T025927_00012.ts
2025-09-23 02:59:34      89864 testasset_54020250923T025933_00013.ts
2025-09-23 02:59:34        763 testasset_720.m3u8
2025-09-23 02:58:39    1947680 testasset_72020250923T025832_00001.ts
2025-09-23 02:58:44    2082664 testasset_72020250923T025838_00002.ts
2025-09-23 02:58:49    3311056 testasset_72020250923T025843_00003.ts
2025-09-23 02:58:54    2223852 testasset_72020250923T025848_00004.ts
2025-09-23 02:58:59    2632752 testasset_72020250923T025853_00005.ts
2025-09-23 02:59:04    1573372 testasset_72020250923T025858_00006.ts
2025-09-23 02:59:08    1162780 testasset_72020250923T025903_00007.ts
2025-09-23 02:59:13    2159744 testasset_72020250923T025908_00008.ts
2025-09-23 02:59:18     994520 testasset_72020250923T025913_00009.ts
2025-09-23 02:59:23    3772972 testasset_72020250923T025917_00010.ts
2025-09-23 02:59:28    3642312 testasset_72020250923T025922_00011.ts
2025-09-23 02:59:33    1997876 testasset_72020250923T025928_00012.ts
2025-09-23 02:59:34     149648 testasset_72020250923T025932_00013.ts

まとめ

「File Streaming with AWS Media Services」ワークショップは Elemental MediaConvert と CloudFront に入門できる良いコンテンツだった❗️

関連

docs.aws.amazon.com

aws.amazon.com