TECH PLAY

株匏䌚瀟メドレヌ

株匏䌚瀟メドレヌ の技術ブログ

å…š1363ä»¶

はじめに こんにちは。コヌポレヌト゚ンゞニアの溝口です。 メドレヌでは、今幎 7 月に皟議ワヌクフロヌシステムを導入したした。 詳现は「システム抂芁」の章でご玹介したすが、システムの党䜓像ずしおは以䞋のようになっおおりたす。 ワヌクフロヌシステムず聞かれたら、どんなシステムを思い浮かべたすか 申請者がシステムで申請するず、予め定められた承認者ぞ承認䟝頌がメヌルで通知され、申請内容の確認及び承認のためにシステムぞログむンする、ずいう流れがよくあるワヌクフロヌシステムではないかなず思いたす。 我々はコヌポレヌト郚門ずしお「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しおいたす。故に、メドレヌの皟議ワヌクフロヌシステムにおいおも 䟿利 で 合理的 なシステムを目指しお開発を行いたした。今回 ChatOps の抂念を取り入れるこずで、䞀般的なワヌクフロヌシステムよりも掗緎されたシステムを構築できたかなず思いたす。 本皿ではシステム抂芁及び、裏偎の仕組みをご玹介しおいきたす。 最埌たでお付き合いいただければ幞いです。 ChatOps ずは ChatOps ずは「チャットサヌビスChatをベヌスずしお、システム運甚Opsを行う」ずいう意味です。ざっくり曞くず「システムから Chat ぞメッセヌゞを飛ばし、次のアクションが同じ Chat 画面で開始できる」ずいうものずなりたす。(䞋蚘フロヌはあくたで䞀䟋です) ChatOps には以䞋のメリットがあるず考えおいたす。 垞に立ち䞊げおいるツヌルずいう共通むンタヌフェヌスである むンタラクティブなコミュニケヌションに぀ながり、スピヌディである 共有しやすく、蚘録に残しやすい 本皿では、詳しく説明はしたせんが、興味がある方は事䟋等を解説しおいるサむトもあるので、是非探しおみおください。 なぜ ChatOps なのか 皟議申請においおは 承認者「これ倀匕きしおもらっお ×× 円になったはずだけど、金額間違っおない」 申請者「すいたせん、倉曎し忘れたした。差戻しお願いしたす」 などのコミュニケヌションが床々発生したす。 通垞のシステムであれば、確認事項がある際はシステム内のコミュニケヌション機胜を䜿う、もしくは、Chat に URL や皟議番号を転蚘しお確認のためのコミュニケヌションを取るこずが想定されたす。 メドレヌ内の業務コミュニケヌションは Slack 䞊で殆ど完結しおいたす。 Slack ではない他の堎所で䌚話が発生するず情報が分散したすし、Slack に URL を転蚘するずいった行為や、別システムぞのログむンなども非効率です。 そこで、 共通むンタヌフェヌスの Chat を䞭心にシステム構築する ChatOps を採甚し、皟議ワヌクフロヌを構築しおみようず考えたした。結果、皟議ワヌクフロヌシステムの情報を Slack ぞ連携し、皟議におけるコミュニケヌションは Slack に集玄、承認行為も Slack 䞊で可胜、ずいうシステムを構築するこずができたした。 システム抂芁 申請 申請者は TeamSpirit 䞊で皟議内容を蚘入し、皟議申請を行いたす。 TeamSpirit ずは、勀怠管理や工数管理、経費粟算などを管理できるクラりドサヌビスです。Salesforce をプラットフォヌムずしお採甚しおおり、アむデア次第でいろいろなカスタマむズが可胜です。 Slack から申請できるようにするのが ChatOps のあるべき姿かもしれたせんが、過去の申請からコピヌしたい、申請皮別ごずに入力する項目が異なる等の芁件を考慮し、TeamSpirit から申請するように蚭蚈したした。申請の導線に぀いおは、今埌もよりよい仕組みに磚き䞊げおいきたいず考えおいたす。 承認 申請者が「皟議申請」ボタンを抌䞋するず、Slack の皟議チャンネルに申請内容及び添付ファむルが自動投皿されたす。 承認者は申請内容に問題がなければ、投皿に配眮されおいるボタンを利甚しお承認・差戻しが行えたす。 承認者は皟議ワヌクフロヌシステムぞアクセスするこずなく、Slack で承認行為が完結できたす。皟議内容においお確認事項がある堎合には Slack の投皿スレッドで申請者ず質疑応答のやり取りができ、承認・差戻しの刀断に必芁なコミュニケヌションが行えたす。 埌続のアクション 承認埌には、 ・申請者に承認 or 差戻し結果を Slack の DM(ダむレクトメッセヌゞ)で通知する 埌続の担圓者ぞ Slack で通知する (法務抌印などの)承認埌タスクを䜜成し担圓者に通知する 等、埌続のアクションぞ぀ながっおいく仕組みも甚意したした。 システムの裏偎 入力むンタヌフェヌス 入力画面は、TeamSpirit で暙準提䟛されおいる 皟議オブゞェクト を利甚したした。入力項目は暙準で甚意されおいるコンポヌネントを利甚し、メドレヌ独自で定矩しおいたす。承認プロセスを定矩すれば、Slack を䜿わずに TeamSpirit のみでも運甚は可胜です。 Slack 通知 Salesforce の暙準機胜ず Apex を甚いた Script 凊理を䜿っお Slack 通知をしおいたす。 Apex ずは、Salesforce 内で利甚するビゞネスロゞック甚のオブゞェクト指向のプログラミング蚀語(ほが Java)のこずです。 Slack 通知たでの倧きな流れは以䞋です。 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル Apex 内で申請情報や承認者情報の取埗 Slack API をコヌルし、Slack ぞ投皿 1~4 のプロセスを詳しく芋おいきたす。 1. 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 申請者が「皟議申請」ボタンを抌したタむミングで承認プロセスを走らせたす。 申請時のアクションずしお、 ステヌタス「申請䞭」ずしたす。ステヌタスが倉わる毎に凊理を走らせおいるので、ステヌタス定矩は䞀぀肝になりたす。 2. プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル プロセスビルダヌを利甚するこずで「皟議レコヌドを䜜成たたは線集したずき」に䜕らかの凊理を実斜するこずが可胜です。今回は、ステヌタスが「申請䞭」になった堎合に Apex をコヌルする、ずいう凊理にしおいたす。 3. Apex 内で申請情報や承認者情報の取埗 通知に必芁な情報を揃えるため、Apex の凊理では皟議オブゞェクトの申請情報ず合わせお次の承認者情報も取埗しおいたす。 String ownerId = p . OwnerId ; //申請者のナヌザ名を取埗 String applicant = [SELECT Username FROM User WHERE Id = : ownerId ]. Username ; //承認プロセスのレコヌド取埗 String processInstanceId = [SELECT Id FROM ProcessInstance WHERE TargetObjectId = : p . Id ORDER BY CreatedDate DESC limit 1 ]. Id ; //承認者の ID を取埗 String approveId = [SELECT OriginalActorId FROM ProcessInstanceWorkitem WHERE ProcessInstanceId = : processInstanceId ]. OriginalActorId ; 4. Slack API をコヌルし、Slack ぞ投皿 Apex が取埗した情報をもずに、Slack に投皿したす。 皟議内容を蚘茉し、申請者・承認者に察しおメンションされるようにナヌザ名も蚘茉したす。 たた、今回は承認者甚にむンタラクティブボタンを配眮する必芁があったので、 Block Kit を利甚し、ボタン付きメッセヌゞを䜜成したした。 { "text" : "hoge" , "blocks" : [ { "type" : "section" , "text" : { "type" : "mrkdwn" , "text" : "fuga" } }, ... { "type" : "actions" , "elements" : [ { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "承認" }, "value" : "Approve" , "style" : "primary" }, { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "差戻し" }, "value" : "Reject" , "style" : "danger" } ] } ] } TeamSpirit(Salesforce)→Slack ぞの投皿は開発においお苊劎したポむントの䞀぀です。 Slack からのアクション Slack の投皿に埋め蟌んでいるボタンがクリックされた際は、Lambda を経由しお TeamSpirit(Salesforce)の RestAPI をコヌルし、承認凊理を実行しおいたす。 たた承認埌は、ボタンを「承認」スタンプに眮き換えおいたす。 開発を終えお 皟議ワヌクフロヌシステムを導入するにあたり、ChatOps の抂念を取り入れ Slack に連携する業務システムを構築したした。 承認者からは「Slack で承認やコメントができ、瀟倖からでもすぐに察応できるので䟿利」「Salesforce-Slack 連携は他にも掻甚できるので是非やっおいこう」などのコメントをいただきたした。たた、承認埌にもスレッドにお、「振蟌お願いしたす」「物品届きたした」等のやりずりも行っおおり、情報が Slack に集玄されおいく狙い通りの運甚になったかず思っおいたす。 Chat サヌビスを利甚しおいる䌚瀟では、今回ご玹介した ChatOps は業務効率化するにあたり、有効な手法になるのではないでしょうか。もちろん、すべお Chat に連携すればよいずいうものでもなく、しっかり蚭蚈や運甚怜蚎を行う必芁がありたす。 今埌は ChatOps に限らず業務効率化に぀ながるものはどんどんやっおいきたいず考えおいたす。 さいごに メドレヌのコヌポレヌト郚門では「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しお、業務効率改善のための開発を掚進しおいたす。面癜そうず感じた方、メドレヌでどんどん改善しおみたいず思っおいただけた方は、ぜひ匊瀟採甚ペヌゞからご応募お願いしたす 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp 最埌たで読んでいただきありがずうございたした。
はじめに こんにちは。コヌポレヌト゚ンゞニアの溝口です。 メドレヌでは、今幎 7 月に皟議ワヌクフロヌシステムを導入したした。 詳现は「システム抂芁」の章でご玹介したすが、システムの党䜓像ずしおは以䞋のようになっおおりたす。 ワヌクフロヌシステムず聞かれたら、どんなシステムを思い浮かべたすか 申請者がシステムで申請するず、予め定められた承認者ぞ承認䟝頌がメヌルで通知され、申請内容の確認及び承認のためにシステムぞログむンする、ずいう流れがよくあるワヌクフロヌシステムではないかなず思いたす。 我々はコヌポレヌト郚門ずしお「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しおいたす。故に、メドレヌの皟議ワヌクフロヌシステムにおいおも 䟿利 で 合理的 なシステムを目指しお開発を行いたした。今回 ChatOps の抂念を取り入れるこずで、䞀般的なワヌクフロヌシステムよりも掗緎されたシステムを構築できたかなず思いたす。 本皿ではシステム抂芁及び、裏偎の仕組みをご玹介しおいきたす。 最埌たでお付き合いいただければ幞いです。 ChatOps ずは ChatOps ずは「チャットサヌビスChatをベヌスずしお、システム運甚Opsを行う」ずいう意味です。ざっくり曞くず「システムから Chat ぞメッセヌゞを飛ばし、次のアクションが同じ Chat 画面で開始できる」ずいうものずなりたす。(䞋蚘フロヌはあくたで䞀䟋です) ChatOps には以䞋のメリットがあるず考えおいたす。 垞に立ち䞊げおいるツヌルずいう共通むンタヌフェヌスである むンタラクティブなコミュニケヌションに぀ながり、スピヌディである 共有しやすく、蚘録に残しやすい 本皿では、詳しく説明はしたせんが、興味がある方は事䟋等を解説しおいるサむトもあるので、是非探しおみおください。 なぜ ChatOps なのか 皟議申請においおは 承認者「これ倀匕きしおもらっお ×× 円になったはずだけど、金額間違っおない」 申請者「すいたせん、倉曎し忘れたした。差戻しお願いしたす」 などのコミュニケヌションが床々発生したす。 通垞のシステムであれば、確認事項がある際はシステム内のコミュニケヌション機胜を䜿う、もしくは、Chat に URL や皟議番号を転蚘しお確認のためのコミュニケヌションを取るこずが想定されたす。 メドレヌ内の業務コミュニケヌションは Slack 䞊で殆ど完結しおいたす。 Slack ではない他の堎所で䌚話が発生するず情報が分散したすし、Slack に URL を転蚘するずいった行為や、別システムぞのログむンなども非効率です。 そこで、 共通むンタヌフェヌスの Chat を䞭心にシステム構築する ChatOps を採甚し、皟議ワヌクフロヌを構築しおみようず考えたした。結果、皟議ワヌクフロヌシステムの情報を Slack ぞ連携し、皟議におけるコミュニケヌションは Slack に集玄、承認行為も Slack 䞊で可胜、ずいうシステムを構築するこずができたした。 システム抂芁 申請 申請者は TeamSpirit 䞊で皟議内容を蚘入し、皟議申請を行いたす。 TeamSpirit ずは、勀怠管理や工数管理、経費粟算などを管理できるクラりドサヌビスです。Salesforce をプラットフォヌムずしお採甚しおおり、アむデア次第でいろいろなカスタマむズが可胜です。 Slack から申請できるようにするのが ChatOps のあるべき姿かもしれたせんが、過去の申請からコピヌしたい、申請皮別ごずに入力する項目が異なる等の芁件を考慮し、TeamSpirit から申請するように蚭蚈したした。申請の導線に぀いおは、今埌もよりよい仕組みに磚き䞊げおいきたいず考えおいたす。 承認 申請者が「皟議申請」ボタンを抌䞋するず、Slack の皟議チャンネルに申請内容及び添付ファむルが自動投皿されたす。 承認者は申請内容に問題がなければ、投皿に配眮されおいるボタンを利甚しお承認・差戻しが行えたす。 承認者は皟議ワヌクフロヌシステムぞアクセスするこずなく、Slack で承認行為が完結できたす。皟議内容においお確認事項がある堎合には Slack の投皿スレッドで申請者ず質疑応答のやり取りができ、承認・差戻しの刀断に必芁なコミュニケヌションが行えたす。 埌続のアクション 承認埌には、 ・申請者に承認 or 差戻し結果を Slack の DM(ダむレクトメッセヌゞ)で通知する 埌続の担圓者ぞ Slack で通知する (法務抌印などの)承認埌タスクを䜜成し担圓者に通知する 等、埌続のアクションぞ぀ながっおいく仕組みも甚意したした。 システムの裏偎 入力むンタヌフェヌス 入力画面は、TeamSpirit で暙準提䟛されおいる 皟議オブゞェクト を利甚したした。入力項目は暙準で甚意されおいるコンポヌネントを利甚し、メドレヌ独自で定矩しおいたす。承認プロセスを定矩すれば、Slack を䜿わずに TeamSpirit のみでも運甚は可胜です。 Slack 通知 Salesforce の暙準機胜ず Apex を甚いた Script 凊理を䜿っお Slack 通知をしおいたす。 Apex ずは、Salesforce 内で利甚するビゞネスロゞック甚のオブゞェクト指向のプログラミング蚀語(ほが Java)のこずです。 Slack 通知たでの倧きな流れは以䞋です。 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル Apex 内で申請情報や承認者情報の取埗 Slack API をコヌルし、Slack ぞ投皿 1~4 のプロセスを詳しく芋おいきたす。 1. 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 申請者が「皟議申請」ボタンを抌したタむミングで承認プロセスを走らせたす。 申請時のアクションずしお、 ステヌタス「申請䞭」ずしたす。ステヌタスが倉わる毎に凊理を走らせおいるので、ステヌタス定矩は䞀぀肝になりたす。 2. プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル プロセスビルダヌを利甚するこずで「皟議レコヌドを䜜成たたは線集したずき」に䜕らかの凊理を実斜するこずが可胜です。今回は、ステヌタスが「申請䞭」になった堎合に Apex をコヌルする、ずいう凊理にしおいたす。 3. Apex 内で申請情報や承認者情報の取埗 通知に必芁な情報を揃えるため、Apex の凊理では皟議オブゞェクトの申請情報ず合わせお次の承認者情報も取埗しおいたす。 String ownerId = p . OwnerId ; //申請者のナヌザ名を取埗 String applicant = [SELECT Username FROM User WHERE Id = : ownerId ]. Username ; //承認プロセスのレコヌド取埗 String processInstanceId = [SELECT Id FROM ProcessInstance WHERE TargetObjectId = : p . Id ORDER BY CreatedDate DESC limit 1 ]. Id ; //承認者の ID を取埗 String approveId = [SELECT OriginalActorId FROM ProcessInstanceWorkitem WHERE ProcessInstanceId = : processInstanceId ]. OriginalActorId ; 4. Slack API をコヌルし、Slack ぞ投皿 Apex が取埗した情報をもずに、Slack に投皿したす。 皟議内容を蚘茉し、申請者・承認者に察しおメンションされるようにナヌザ名も蚘茉したす。 たた、今回は承認者甚にむンタラクティブボタンを配眮する必芁があったので、 Block Kit を利甚し、ボタン付きメッセヌゞを䜜成したした。 { "text" : "hoge" , "blocks" : [ { "type" : "section" , "text" : { "type" : "mrkdwn" , "text" : "fuga" } }, ... { "type" : "actions" , "elements" : [ { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "承認" }, "value" : "Approve" , "style" : "primary" }, { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "差戻し" }, "value" : "Reject" , "style" : "danger" } ] } ] } TeamSpirit(Salesforce)→Slack ぞの投皿は開発においお苊劎したポむントの䞀぀です。 Slack からのアクション Slack の投皿に埋め蟌んでいるボタンがクリックされた際は、Lambda を経由しお TeamSpirit(Salesforce)の RestAPI をコヌルし、承認凊理を実行しおいたす。 たた承認埌は、ボタンを「承認」スタンプに眮き換えおいたす。 開発を終えお 皟議ワヌクフロヌシステムを導入するにあたり、ChatOps の抂念を取り入れ Slack に連携する業務システムを構築したした。 承認者からは「Slack で承認やコメントができ、瀟倖からでもすぐに察応できるので䟿利」「Salesforce-Slack 連携は他にも掻甚できるので是非やっおいこう」などのコメントをいただきたした。たた、承認埌にもスレッドにお、「振蟌お願いしたす」「物品届きたした」等のやりずりも行っおおり、情報が Slack に集玄されおいく狙い通りの運甚になったかず思っおいたす。 Chat サヌビスを利甚しおいる䌚瀟では、今回ご玹介した ChatOps は業務効率化するにあたり、有効な手法になるのではないでしょうか。もちろん、すべお Chat に連携すればよいずいうものでもなく、しっかり蚭蚈や運甚怜蚎を行う必芁がありたす。 今埌は ChatOps に限らず業務効率化に぀ながるものはどんどんやっおいきたいず考えおいたす。 さいごに メドレヌのコヌポレヌト郚門では「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しお、業務効率改善のための開発を掚進しおいたす。面癜そうず感じた方、メドレヌでどんどん改善しおみたいず思っおいただけた方は、ぜひ匊瀟採甚ペヌゞからご応募お願いしたす https://www.medley.jp/jobs/ 最埌たで読んでいただきありがずうございたした。
はじめに こんにちは。コヌポレヌト゚ンゞニアの溝口です。 メドレヌでは、今幎 7 月に皟議ワヌクフロヌシステムを導入したした。 詳现は「システム抂芁」の章でご玹介したすが、システムの党䜓像ずしおは以䞋のようになっおおりたす。 ワヌクフロヌシステムず聞かれたら、どんなシステムを思い浮かべたすか 申請者がシステムで申請するず、予め定められた承認者ぞ承認䟝頌がメヌルで通知され、申請内容の確認及び承認のためにシステムぞログむンする、ずいう流れがよくあるワヌクフロヌシステムではないかなず思いたす。 我々はコヌポレヌト郚門ずしお「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しおいたす。故に、メドレヌの皟議ワヌクフロヌシステムにおいおも 䟿利 で 合理的 なシステムを目指しお開発を行いたした。今回 ChatOps の抂念を取り入れるこずで、䞀般的なワヌクフロヌシステムよりも掗緎されたシステムを構築できたかなず思いたす。 本皿ではシステム抂芁及び、裏偎の仕組みをご玹介しおいきたす。 最埌たでお付き合いいただければ幞いです。 ChatOps ずは ChatOps ずは「チャットサヌビスChatをベヌスずしお、システム運甚Opsを行う」ずいう意味です。ざっくり曞くず「システムから Chat ぞメッセヌゞを飛ばし、次のアクションが同じ Chat 画面で開始できる」ずいうものずなりたす。(䞋蚘フロヌはあくたで䞀䟋です) ChatOps には以䞋のメリットがあるず考えおいたす。 垞に立ち䞊げおいるツヌルずいう共通むンタヌフェヌスである むンタラクティブなコミュニケヌションに぀ながり、スピヌディである 共有しやすく、蚘録に残しやすい 本皿では、詳しく説明はしたせんが、興味がある方は事䟋等を解説しおいるサむトもあるので、是非探しおみおください。 なぜ ChatOps なのか 皟議申請においおは 承認者「これ倀匕きしおもらっお ×× 円になったはずだけど、金額間違っおない」 申請者「すいたせん、倉曎し忘れたした。差戻しお願いしたす」 などのコミュニケヌションが床々発生したす。 通垞のシステムであれば、確認事項がある際はシステム内のコミュニケヌション機胜を䜿う、もしくは、Chat に URL や皟議番号を転蚘しお確認のためのコミュニケヌションを取るこずが想定されたす。 メドレヌ内の業務コミュニケヌションは Slack 䞊で殆ど完結しおいたす。 Slack ではない他の堎所で䌚話が発生するず情報が分散したすし、Slack に URL を転蚘するずいった行為や、別システムぞのログむンなども非効率です。 そこで、 共通むンタヌフェヌスの Chat を䞭心にシステム構築する ChatOps を採甚し、皟議ワヌクフロヌを構築しおみようず考えたした。結果、皟議ワヌクフロヌシステムの情報を Slack ぞ連携し、皟議におけるコミュニケヌションは Slack に集玄、承認行為も Slack 䞊で可胜、ずいうシステムを構築するこずができたした。 システム抂芁 申請 申請者は TeamSpirit 䞊で皟議内容を蚘入し、皟議申請を行いたす。 TeamSpirit ずは、勀怠管理や工数管理、経費粟算などを管理できるクラりドサヌビスです。Salesforce をプラットフォヌムずしお採甚しおおり、アむデア次第でいろいろなカスタマむズが可胜です。 Slack から申請できるようにするのが ChatOps のあるべき姿かもしれたせんが、過去の申請からコピヌしたい、申請皮別ごずに入力する項目が異なる等の芁件を考慮し、TeamSpirit から申請するように蚭蚈したした。申請の導線に぀いおは、今埌もよりよい仕組みに磚き䞊げおいきたいず考えおいたす。 承認 申請者が「皟議申請」ボタンを抌䞋するず、Slack の皟議チャンネルに申請内容及び添付ファむルが自動投皿されたす。 承認者は申請内容に問題がなければ、投皿に配眮されおいるボタンを利甚しお承認・差戻しが行えたす。 承認者は皟議ワヌクフロヌシステムぞアクセスするこずなく、Slack で承認行為が完結できたす。皟議内容においお確認事項がある堎合には Slack の投皿スレッドで申請者ず質疑応答のやり取りができ、承認・差戻しの刀断に必芁なコミュニケヌションが行えたす。 埌続のアクション 承認埌には、 ・申請者に承認 or 差戻し結果を Slack の DM(ダむレクトメッセヌゞ)で通知する 埌続の担圓者ぞ Slack で通知する (法務抌印などの)承認埌タスクを䜜成し担圓者に通知する 等、埌続のアクションぞ぀ながっおいく仕組みも甚意したした。 システムの裏偎 入力むンタヌフェヌス 入力画面は、TeamSpirit で暙準提䟛されおいる 皟議オブゞェクト を利甚したした。入力項目は暙準で甚意されおいるコンポヌネントを利甚し、メドレヌ独自で定矩しおいたす。承認プロセスを定矩すれば、Slack を䜿わずに TeamSpirit のみでも運甚は可胜です。 Slack 通知 Salesforce の暙準機胜ず Apex を甚いた Script 凊理を䜿っお Slack 通知をしおいたす。 Apex ずは、Salesforce 内で利甚するビゞネスロゞック甚のオブゞェクト指向のプログラミング蚀語(ほが Java)のこずです。 Slack 通知たでの倧きな流れは以䞋です。 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル Apex 内で申請情報や承認者情報の取埗 Slack API をコヌルし、Slack ぞ投皿 1~4 のプロセスを詳しく芋おいきたす。 1. 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 申請者が「皟議申請」ボタンを抌したタむミングで承認プロセスを走らせたす。 申請時のアクションずしお、 ステヌタス「申請䞭」ずしたす。ステヌタスが倉わる毎に凊理を走らせおいるので、ステヌタス定矩は䞀぀肝になりたす。 2. プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル プロセスビルダヌを利甚するこずで「皟議レコヌドを䜜成たたは線集したずき」に䜕らかの凊理を実斜するこずが可胜です。今回は、ステヌタスが「申請䞭」になった堎合に Apex をコヌルする、ずいう凊理にしおいたす。 3. Apex 内で申請情報や承認者情報の取埗 通知に必芁な情報を揃えるため、Apex の凊理では皟議オブゞェクトの申請情報ず合わせお次の承認者情報も取埗しおいたす。 String ownerId = p . OwnerId ; //申請者のナヌザ名を取埗 String applicant = [SELECT Username FROM User WHERE Id = : ownerId ]. Username ; //承認プロセスのレコヌド取埗 String processInstanceId = [SELECT Id FROM ProcessInstance WHERE TargetObjectId = : p . Id ORDER BY CreatedDate DESC limit 1 ]. Id ; //承認者の ID を取埗 String approveId = [SELECT OriginalActorId FROM ProcessInstanceWorkitem WHERE ProcessInstanceId = : processInstanceId ]. OriginalActorId ; 4. Slack API をコヌルし、Slack ぞ投皿 Apex が取埗した情報をもずに、Slack に投皿したす。 皟議内容を蚘茉し、申請者・承認者に察しおメンションされるようにナヌザ名も蚘茉したす。 たた、今回は承認者甚にむンタラクティブボタンを配眮する必芁があったので、 Block Kit を利甚し、ボタン付きメッセヌゞを䜜成したした。 { "text" : "hoge" , "blocks" : [ { "type" : "section" , "text" : { "type" : "mrkdwn" , "text" : "fuga" } }, ... { "type" : "actions" , "elements" : [ { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "承認" }, "value" : "Approve" , "style" : "primary" }, { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "差戻し" }, "value" : "Reject" , "style" : "danger" } ] } ] } TeamSpirit(Salesforce)→Slack ぞの投皿は開発においお苊劎したポむントの䞀぀です。 Slack からのアクション Slack の投皿に埋め蟌んでいるボタンがクリックされた際は、Lambda を経由しお TeamSpirit(Salesforce)の RestAPI をコヌルし、承認凊理を実行しおいたす。 たた承認埌は、ボタンを「承認」スタンプに眮き換えおいたす。 開発を終えお 皟議ワヌクフロヌシステムを導入するにあたり、ChatOps の抂念を取り入れ Slack に連携する業務システムを構築したした。 承認者からは「Slack で承認やコメントができ、瀟倖からでもすぐに察応できるので䟿利」「Salesforce-Slack 連携は他にも掻甚できるので是非やっおいこう」などのコメントをいただきたした。たた、承認埌にもスレッドにお、「振蟌お願いしたす」「物品届きたした」等のやりずりも行っおおり、情報が Slack に集玄されおいく狙い通りの運甚になったかず思っおいたす。 Chat サヌビスを利甚しおいる䌚瀟では、今回ご玹介した ChatOps は業務効率化するにあたり、有効な手法になるのではないでしょうか。もちろん、すべお Chat に連携すればよいずいうものでもなく、しっかり蚭蚈や運甚怜蚎を行う必芁がありたす。 今埌は ChatOps に限らず業務効率化に぀ながるものはどんどんやっおいきたいず考えおいたす。 さいごに メドレヌのコヌポレヌト郚門では「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しお、業務効率改善のための開発を掚進しおいたす。面癜そうず感じた方、メドレヌでどんどん改善しおみたいず思っおいただけた方は、ぜひ匊瀟採甚ペヌゞからご応募お願いしたす 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp 最埌たで読んでいただきありがずうございたした。
はじめに こんにちは。コヌポレヌト゚ンゞニアの溝口です。 メドレヌでは、今幎 7 月に皟議ワヌクフロヌシステムを導入したした。 詳现は「システム抂芁」の章でご玹介したすが、システムの党䜓像ずしおは以䞋のようになっおおりたす。 ワヌクフロヌシステムず聞かれたら、どんなシステムを思い浮かべたすか 申請者がシステムで申請するず、予め定められた承認者ぞ承認䟝頌がメヌルで通知され、申請内容の確認及び承認のためにシステムぞログむンする、ずいう流れがよくあるワヌクフロヌシステムではないかなず思いたす。 我々はコヌポレヌト郚門ずしお「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しおいたす。故に、メドレヌの皟議ワヌクフロヌシステムにおいおも 䟿利 で 合理的 なシステムを目指しお開発を行いたした。今回 ChatOps の抂念を取り入れるこずで、䞀般的なワヌクフロヌシステムよりも掗緎されたシステムを構築できたかなず思いたす。 本皿ではシステム抂芁及び、裏偎の仕組みをご玹介しおいきたす。 最埌たでお付き合いいただければ幞いです。 ChatOps ずは ChatOps ずは「チャットサヌビスChatをベヌスずしお、システム運甚Opsを行う」ずいう意味です。ざっくり曞くず「システムから Chat ぞメッセヌゞを飛ばし、次のアクションが同じ Chat 画面で開始できる」ずいうものずなりたす。(䞋蚘フロヌはあくたで䞀䟋です) ChatOps には以䞋のメリットがあるず考えおいたす。 垞に立ち䞊げおいるツヌルずいう共通むンタヌフェヌスである むンタラクティブなコミュニケヌションに぀ながり、スピヌディである 共有しやすく、蚘録に残しやすい 本皿では、詳しく説明はしたせんが、興味がある方は事䟋等を解説しおいるサむトもあるので、是非探しおみおください。 なぜ ChatOps なのか 皟議申請においおは 承認者「これ倀匕きしおもらっお ×× 円になったはずだけど、金額間違っおない」 申請者「すいたせん、倉曎し忘れたした。差戻しお願いしたす」 などのコミュニケヌションが床々発生したす。 通垞のシステムであれば、確認事項がある際はシステム内のコミュニケヌション機胜を䜿う、もしくは、Chat に URL や皟議番号を転蚘しお確認のためのコミュニケヌションを取るこずが想定されたす。 メドレヌ内の業務コミュニケヌションは Slack 䞊で殆ど完結しおいたす。 Slack ではない他の堎所で䌚話が発生するず情報が分散したすし、Slack に URL を転蚘するずいった行為や、別システムぞのログむンなども非効率です。 そこで、 共通むンタヌフェヌスの Chat を䞭心にシステム構築する ChatOps を採甚し、皟議ワヌクフロヌを構築しおみようず考えたした。結果、皟議ワヌクフロヌシステムの情報を Slack ぞ連携し、皟議におけるコミュニケヌションは Slack に集玄、承認行為も Slack 䞊で可胜、ずいうシステムを構築するこずができたした。 システム抂芁 申請 申請者は TeamSpirit 䞊で皟議内容を蚘入し、皟議申請を行いたす。 TeamSpirit ずは、勀怠管理や工数管理、経費粟算などを管理できるクラりドサヌビスです。Salesforce をプラットフォヌムずしお採甚しおおり、アむデア次第でいろいろなカスタマむズが可胜です。 Slack から申請できるようにするのが ChatOps のあるべき姿かもしれたせんが、過去の申請からコピヌしたい、申請皮別ごずに入力する項目が異なる等の芁件を考慮し、TeamSpirit から申請するように蚭蚈したした。申請の導線に぀いおは、今埌もよりよい仕組みに磚き䞊げおいきたいず考えおいたす。 承認 申請者が「皟議申請」ボタンを抌䞋するず、Slack の皟議チャンネルに申請内容及び添付ファむルが自動投皿されたす。 承認者は申請内容に問題がなければ、投皿に配眮されおいるボタンを利甚しお承認・差戻しが行えたす。 承認者は皟議ワヌクフロヌシステムぞアクセスするこずなく、Slack で承認行為が完結できたす。皟議内容においお確認事項がある堎合には Slack の投皿スレッドで申請者ず質疑応答のやり取りができ、承認・差戻しの刀断に必芁なコミュニケヌションが行えたす。 埌続のアクション 承認埌には、 ・申請者に承認 or 差戻し結果を Slack の DM(ダむレクトメッセヌゞ)で通知する 埌続の担圓者ぞ Slack で通知する (法務抌印などの)承認埌タスクを䜜成し担圓者に通知する 等、埌続のアクションぞ぀ながっおいく仕組みも甚意したした。 システムの裏偎 入力むンタヌフェヌス 入力画面は、TeamSpirit で暙準提䟛されおいる 皟議オブゞェクト を利甚したした。入力項目は暙準で甚意されおいるコンポヌネントを利甚し、メドレヌ独自で定矩しおいたす。承認プロセスを定矩すれば、Slack を䜿わずに TeamSpirit のみでも運甚は可胜です。 Slack 通知 Salesforce の暙準機胜ず Apex を甚いた Script 凊理を䜿っお Slack 通知をしおいたす。 Apex ずは、Salesforce 内で利甚するビゞネスロゞック甚のオブゞェクト指向のプログラミング蚀語(ほが Java)のこずです。 Slack 通知たでの倧きな流れは以䞋です。 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル Apex 内で申請情報や承認者情報の取埗 Slack API をコヌルし、Slack ぞ投皿 1~4 のプロセスを詳しく芋おいきたす。 1. 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 申請者が「皟議申請」ボタンを抌したタむミングで承認プロセスを走らせたす。 申請時のアクションずしお、 ステヌタス「申請䞭」ずしたす。ステヌタスが倉わる毎に凊理を走らせおいるので、ステヌタス定矩は䞀぀肝になりたす。 2. プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル プロセスビルダヌを利甚するこずで「皟議レコヌドを䜜成たたは線集したずき」に䜕らかの凊理を実斜するこずが可胜です。今回は、ステヌタスが「申請䞭」になった堎合に Apex をコヌルする、ずいう凊理にしおいたす。 3. Apex 内で申請情報や承認者情報の取埗 通知に必芁な情報を揃えるため、Apex の凊理では皟議オブゞェクトの申請情報ず合わせお次の承認者情報も取埗しおいたす。 String ownerId = p . OwnerId ; //申請者のナヌザ名を取埗 String applicant = [SELECT Username FROM User WHERE Id = : ownerId ]. Username ; //承認プロセスのレコヌド取埗 String processInstanceId = [SELECT Id FROM ProcessInstance WHERE TargetObjectId = : p . Id ORDER BY CreatedDate DESC limit 1 ]. Id ; //承認者の ID を取埗 String approveId = [SELECT OriginalActorId FROM ProcessInstanceWorkitem WHERE ProcessInstanceId = : processInstanceId ]. OriginalActorId ; 4. Slack API をコヌルし、Slack ぞ投皿 Apex が取埗した情報をもずに、Slack に投皿したす。 皟議内容を蚘茉し、申請者・承認者に察しおメンションされるようにナヌザ名も蚘茉したす。 たた、今回は承認者甚にむンタラクティブボタンを配眮する必芁があったので、 Block Kit を利甚し、ボタン付きメッセヌゞを䜜成したした。 { "text" : "hoge" , "blocks" : [ { "type" : "section" , "text" : { "type" : "mrkdwn" , "text" : "fuga" } }, ... { "type" : "actions" , "elements" : [ { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "承認" }, "value" : "Approve" , "style" : "primary" }, { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "差戻し" }, "value" : "Reject" , "style" : "danger" } ] } ] } TeamSpirit(Salesforce)→Slack ぞの投皿は開発においお苊劎したポむントの䞀぀です。 Slack からのアクション Slack の投皿に埋め蟌んでいるボタンがクリックされた際は、Lambda を経由しお TeamSpirit(Salesforce)の RestAPI をコヌルし、承認凊理を実行しおいたす。 たた承認埌は、ボタンを「承認」スタンプに眮き換えおいたす。 開発を終えお 皟議ワヌクフロヌシステムを導入するにあたり、ChatOps の抂念を取り入れ Slack に連携する業務システムを構築したした。 承認者からは「Slack で承認やコメントができ、瀟倖からでもすぐに察応できるので䟿利」「Salesforce-Slack 連携は他にも掻甚できるので是非やっおいこう」などのコメントをいただきたした。たた、承認埌にもスレッドにお、「振蟌お願いしたす」「物品届きたした」等のやりずりも行っおおり、情報が Slack に集玄されおいく狙い通りの運甚になったかず思っおいたす。 Chat サヌビスを利甚しおいる䌚瀟では、今回ご玹介した ChatOps は業務効率化するにあたり、有効な手法になるのではないでしょうか。もちろん、すべお Chat に連携すればよいずいうものでもなく、しっかり蚭蚈や運甚怜蚎を行う必芁がありたす。 今埌は ChatOps に限らず業務効率化に぀ながるものはどんどんやっおいきたいず考えおいたす。 さいごに メドレヌのコヌポレヌト郚門では「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しお、業務効率改善のための開発を掚進しおいたす。面癜そうず感じた方、メドレヌでどんどん改善しおみたいず思っおいただけた方は、ぜひ匊瀟採甚ペヌゞからご応募お願いしたす 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp 最埌たで読んでいただきありがずうございたした。
はじめに こんにちは。コヌポレヌト゚ンゞニアの溝口です。 メドレヌでは、今幎 7 月に皟議ワヌクフロヌシステムを導入したした。 詳现は「システム抂芁」の章でご玹介したすが、システムの党䜓像ずしおは以䞋のようになっおおりたす。 ワヌクフロヌシステムず聞かれたら、どんなシステムを思い浮かべたすか 申請者がシステムで申請するず、予め定められた承認者ぞ承認䟝頌がメヌルで通知され、申請内容の確認及び承認のためにシステムぞログむンする、ずいう流れがよくあるワヌクフロヌシステムではないかなず思いたす。 我々はコヌポレヌト郚門ずしお「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しおいたす。故に、メドレヌの皟議ワヌクフロヌシステムにおいおも 䟿利 で 合理的 なシステムを目指しお開発を行いたした。今回 ChatOps の抂念を取り入れるこずで、䞀般的なワヌクフロヌシステムよりも掗緎されたシステムを構築できたかなず思いたす。 本皿ではシステム抂芁及び、裏偎の仕組みをご玹介しおいきたす。 最埌たでお付き合いいただければ幞いです。 ChatOps ずは ChatOps ずは「チャットサヌビスChatをベヌスずしお、システム運甚Opsを行う」ずいう意味です。ざっくり曞くず「システムから Chat ぞメッセヌゞを飛ばし、次のアクションが同じ Chat 画面で開始できる」ずいうものずなりたす。(䞋蚘フロヌはあくたで䞀䟋です) ChatOps には以䞋のメリットがあるず考えおいたす。 垞に立ち䞊げおいるツヌルずいう共通むンタヌフェヌスである むンタラクティブなコミュニケヌションに぀ながり、スピヌディである 共有しやすく、蚘録に残しやすい 本皿では、詳しく説明はしたせんが、興味がある方は事䟋等を解説しおいるサむトもあるので、是非探しおみおください。 なぜ ChatOps なのか 皟議申請においおは 承認者「これ倀匕きしおもらっお ×× 円になったはずだけど、金額間違っおない」 申請者「すいたせん、倉曎し忘れたした。差戻しお願いしたす」 などのコミュニケヌションが床々発生したす。 通垞のシステムであれば、確認事項がある際はシステム内のコミュニケヌション機胜を䜿う、もしくは、Chat に URL や皟議番号を転蚘しお確認のためのコミュニケヌションを取るこずが想定されたす。 メドレヌ内の業務コミュニケヌションは Slack 䞊で殆ど完結しおいたす。 Slack ではない他の堎所で䌚話が発生するず情報が分散したすし、Slack に URL を転蚘するずいった行為や、別システムぞのログむンなども非効率です。 そこで、 共通むンタヌフェヌスの Chat を䞭心にシステム構築する ChatOps を採甚し、皟議ワヌクフロヌを構築しおみようず考えたした。結果、皟議ワヌクフロヌシステムの情報を Slack ぞ連携し、皟議におけるコミュニケヌションは Slack に集玄、承認行為も Slack 䞊で可胜、ずいうシステムを構築するこずができたした。 システム抂芁 申請 申請者は TeamSpirit 䞊で皟議内容を蚘入し、皟議申請を行いたす。 TeamSpirit ずは、勀怠管理や工数管理、経費粟算などを管理できるクラりドサヌビスです。Salesforce をプラットフォヌムずしお採甚しおおり、アむデア次第でいろいろなカスタマむズが可胜です。 Slack から申請できるようにするのが ChatOps のあるべき姿かもしれたせんが、過去の申請からコピヌしたい、申請皮別ごずに入力する項目が異なる等の芁件を考慮し、TeamSpirit から申請するように蚭蚈したした。申請の導線に぀いおは、今埌もよりよい仕組みに磚き䞊げおいきたいず考えおいたす。 承認 申請者が「皟議申請」ボタンを抌䞋するず、Slack の皟議チャンネルに申請内容及び添付ファむルが自動投皿されたす。 承認者は申請内容に問題がなければ、投皿に配眮されおいるボタンを利甚しお承認・差戻しが行えたす。 承認者は皟議ワヌクフロヌシステムぞアクセスするこずなく、Slack で承認行為が完結できたす。皟議内容においお確認事項がある堎合には Slack の投皿スレッドで申請者ず質疑応答のやり取りができ、承認・差戻しの刀断に必芁なコミュニケヌションが行えたす。 埌続のアクション 承認埌には、 ・申請者に承認 or 差戻し結果を Slack の DM(ダむレクトメッセヌゞ)で通知する 埌続の担圓者ぞ Slack で通知する (法務抌印などの)承認埌タスクを䜜成し担圓者に通知する 等、埌続のアクションぞ぀ながっおいく仕組みも甚意したした。 システムの裏偎 入力むンタヌフェヌス 入力画面は、TeamSpirit で暙準提䟛されおいる 皟議オブゞェクト を利甚したした。入力項目は暙準で甚意されおいるコンポヌネントを利甚し、メドレヌ独自で定矩しおいたす。承認プロセスを定矩すれば、Slack を䜿わずに TeamSpirit のみでも運甚は可胜です。 Slack 通知 Salesforce の暙準機胜ず Apex を甚いた Script 凊理を䜿っお Slack 通知をしおいたす。 Apex ずは、Salesforce 内で利甚するビゞネスロゞック甚のオブゞェクト指向のプログラミング蚀語(ほが Java)のこずです。 Slack 通知たでの倧きな流れは以䞋です。 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル Apex 内で申請情報や承認者情報の取埗 Slack API をコヌルし、Slack ぞ投皿 1~4 のプロセスを詳しく芋おいきたす。 1. 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 申請者が「皟議申請」ボタンを抌したタむミングで承認プロセスを走らせたす。 申請時のアクションずしお、 ステヌタス「申請䞭」ずしたす。ステヌタスが倉わる毎に凊理を走らせおいるので、ステヌタス定矩は䞀぀肝になりたす。 2. プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル プロセスビルダヌを利甚するこずで「皟議レコヌドを䜜成たたは線集したずき」に䜕らかの凊理を実斜するこずが可胜です。今回は、ステヌタスが「申請䞭」になった堎合に Apex をコヌルする、ずいう凊理にしおいたす。 3. Apex 内で申請情報や承認者情報の取埗 通知に必芁な情報を揃えるため、Apex の凊理では皟議オブゞェクトの申請情報ず合わせお次の承認者情報も取埗しおいたす。 String ownerId = p . OwnerId ; //申請者のナヌザ名を取埗 String applicant = [SELECT Username FROM User WHERE Id = : ownerId ]. Username ; //承認プロセスのレコヌド取埗 String processInstanceId = [SELECT Id FROM ProcessInstance WHERE TargetObjectId = : p . Id ORDER BY CreatedDate DESC limit 1 ]. Id ; //承認者の ID を取埗 String approveId = [SELECT OriginalActorId FROM ProcessInstanceWorkitem WHERE ProcessInstanceId = : processInstanceId ]. OriginalActorId ; 4. Slack API をコヌルし、Slack ぞ投皿 Apex が取埗した情報をもずに、Slack に投皿したす。 皟議内容を蚘茉し、申請者・承認者に察しおメンションされるようにナヌザ名も蚘茉したす。 たた、今回は承認者甚にむンタラクティブボタンを配眮する必芁があったので、 Block Kit を利甚し、ボタン付きメッセヌゞを䜜成したした。 { "text" : "hoge" , "blocks" : [ { "type" : "section" , "text" : { "type" : "mrkdwn" , "text" : "fuga" } }, ... { "type" : "actions" , "elements" : [ { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "承認" }, "value" : "Approve" , "style" : "primary" }, { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "差戻し" }, "value" : "Reject" , "style" : "danger" } ] } ] } TeamSpirit(Salesforce)→Slack ぞの投皿は開発においお苊劎したポむントの䞀぀です。 Slack からのアクション Slack の投皿に埋め蟌んでいるボタンがクリックされた際は、Lambda を経由しお TeamSpirit(Salesforce)の RestAPI をコヌルし、承認凊理を実行しおいたす。 たた承認埌は、ボタンを「承認」スタンプに眮き換えおいたす。 開発を終えお 皟議ワヌクフロヌシステムを導入するにあたり、ChatOps の抂念を取り入れ Slack に連携する業務システムを構築したした。 承認者からは「Slack で承認やコメントができ、瀟倖からでもすぐに察応できるので䟿利」「Salesforce-Slack 連携は他にも掻甚できるので是非やっおいこう」などのコメントをいただきたした。たた、承認埌にもスレッドにお、「振蟌お願いしたす」「物品届きたした」等のやりずりも行っおおり、情報が Slack に集玄されおいく狙い通りの運甚になったかず思っおいたす。 Chat サヌビスを利甚しおいる䌚瀟では、今回ご玹介した ChatOps は業務効率化するにあたり、有効な手法になるのではないでしょうか。もちろん、すべお Chat に連携すればよいずいうものでもなく、しっかり蚭蚈や運甚怜蚎を行う必芁がありたす。 今埌は ChatOps に限らず業務効率化に぀ながるものはどんどんやっおいきたいず考えおいたす。 さいごに メドレヌのコヌポレヌト郚門では「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しお、業務効率改善のための開発を掚進しおいたす。面癜そうず感じた方、メドレヌでどんどん改善しおみたいず思っおいただけた方は、ぜひ匊瀟採甚ペヌゞからご応募お願いしたす 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp 最埌たで読んでいただきありがずうございたした。
はじめに はじめたしお、メドレヌ新卒入瀟 2 幎目の森川です。 むンフラ経隓がただ 4 ヶ月ほどの未熟者ですが、 AWS 認定資栌クラりドプラクティショナヌ の詊隓に合栌するこずができたした。䞊䜍の資栌取埗に向けお今埌も勉匷しおいきたす。 先日私が担圓させおいただいた CloudFront のアラヌト改善に぀いお、問題の原因ず察応方法を本蚘事で曞かせおいただきたす。 よろしければお付き合いください。 背景ず問題 匊瀟が運営しおいるプロダクトの䞀぀ ゞョブメドレヌ ではむンフラ環境に AWS を利甚しおいたす。 監芖には CloudWatch や Datadog などを䜿甚しおいたす。サヌビスの異垞を怜知するための蚭定のひず぀に、CloudFront の゚ラヌレスポンス増加を怜知するためのアラヌト通知がありたす。 CloudFront が返すレスポンスのうち、特定の時間範囲の䞭で 4xx, 5xx 系の゚ラヌを返した割合が閟倀を超過したこずを怜知しお、CloudWatch アラヌムから Lambda を通しお Slack に通知を行っおいたす。 ずころが、ある頃を境に CloudFront での 4xx 系゚ラヌレスポンスの発生割合が増加し、アラヌトの通知頻床が想定以䞊に高くなっおしたいたした。 原因 調査を行ったずころ、刷新した瀟内システムにお以䞋 2 ぀の原因でアラヌトが発生しおいるこずが分かりたした。 原因 1. 瀟倖サヌビスからのアクセスでアラヌトが発生 CloudFront のログを確認したずころ、瀟倖サヌビスSlack, Google スプレッドシヌトなどからのアクセスに察しおステヌタスコヌド 403 を返しおいるレスポンスログが数倚く蚘録されおいたした。 これらのサヌビスに匊瀟の瀟内管理システムの URL がポストされるず、プレビュヌを衚瀺するためのリク゚ストが送信されたすが、この時のリク゚ストが瀟倖からのアクセスずしお WAF で制限されおいたした。 むンフラ刷新前から珟圚たで皌働しおいる CloudFront のログも確認したずころ、こちらでも同様の゚ラヌレスポンスが発生しおいるこずが分かりたした。しかし、゚ラヌ割合増加のアラヌトが頻発するこずは珟圚でもほずんどありたせん。 以前はゞョブメドレヌが持぀システム党䜓ぞのアクセスをひず぀の CloudFront で凊理しおいたため、アラヌト通知の割合ずしお蚈算する際の母数が倧きく、瀟倖からのアクセスによる゚ラヌが発生しおいおも、その割合が閟倀を超過するこずが少なかったからだず考えられたす。 むンフラ構成を刷新したこずをきっかけに、これたで目立っおいなかった瀟倖からのアクセスずいう問題が衚面化しおきたのです。 原因 2. 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生 CloudWatch アラヌムでは、䞀定期間内でのレスポンスのうち、4xx, 5xx 系の゚ラヌごずにその割合が閟倀を超過したこずを怜知しおアラヌトを発生させる蚭定ずしおいたした。 しかし、深倜など利甚者が少ない時間に䞀床でも゚ラヌが発生するず、その割合が跳ね䞊がっおしたうこずでアラヌト発生頻床が増加し、誀怜知ず蚀える状態になっおいたした。 以䞋の画像では、4xx 系゚ラヌの割合が倜間に 100%ずなっおいる箇所が確認できたす。衚瀺時間は UTC です 察応方法 2 ぀の原因に察し、それぞれ察応を行いたした。 察応 1. 特定の瀟倖サヌビスからのアクセスを゚ラヌ怜知の察象倖ずする 各サヌビスの蚭定により、プレビュヌ衚瀺によるアクセスを停止させる遞択肢が考えられたす。しかし、該圓するサヌビスすべおに蚭定を行うのは難しく、管理も耇雑になりそうです。 そこで、特定の瀟倖サヌビスからのアクセスを ゚ラヌ怜知の察象倖ずする 方針で察応を行いたした。 ログのすべおを CloudWatch アラヌムの評䟡察象ずしおいたために、誀怜知ず蚀えるアラヌトが発生しおいるのが珟状です。したがっお、評䟡させたいログだけに絞り CloudWatch で評䟡させるこずができれば解決が図れたす。今回であれば、特定のナヌザヌ゚ヌゞェントや IP アドレスなどを陀倖しお CloudWatch に枡すずいう凊理が求められたす。 その実珟のため、今回新たに䜜成したのが Lambda の関数です。 S3 に CloudFront のログが保存されたこずをトリガヌに Lambda を起動させるように蚭定したした。 ログごずに蚘録されおいるリク゚スト元のナヌザヌ゚ヌゞェントや IP アドレスなどを確認し、陀倖察象かどうかを刀定したす。 そうしお遞別を通過したログを今床はステヌタスコヌドの 5 ぀のクラス1xx, 2xx, 3xx, 4xx, 5xx 系ごずに振り分けたす。 ただし、CloudFront ではステヌタスコヌドに 000 が入るこずがありたす。 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html ステヌタスコヌド 000 はアラヌトで怜知したずころで察応できるこずが特にないため、怜知察象から陀倖する方針ずしたした。 S3 のログを盎接確認するず 000 なのですが、Athena でログを確認するず 0 で衚瀺されるため、少しハマりたした こういった意図しない倀がステヌタスコヌドに含たれおいた堎合などを怜知できるようにするため、5 ぀のクラス以倖の倀が含たれおいた堎合に UNKNOWN_STATUS_CODE なクラスずしお分類するようにしたした。 必芁なものに絞ったログを 6 ぀のステヌタスパタヌンに分け、それぞれの件数を CloudWatch メトリクスぞ PUT させたす。 ここたでが Lambda の仕事ずなりたす。 各ステヌタスのログの件数を CloudWatch メトリクスで確認できるようになったので、レスポンス党䜓における 4xx, 5xx 系゚ラヌの割合が算出できたす。これを元に閟倀を蚭定し、以前のようなアラヌトを䜜成するこずができたした。 察応 2. CloudWatch アラヌムの怜知ルヌルを調敎する 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生する件に぀いおは、 CloudWatch アラヌムの怜知ルヌルを調敎 するこずによっお察応したした。 䞀定期間での゚ラヌ数に閟倀を定め、超過した際にアラヌトを通知するように倉曎したした。぀たり、割合ではなく絶察数で刀断させるようにしおいたす。 以䞋の画像の緑色のグラフが新たな怜知ルヌルで参照するものずなりたす。橙色で瀺しおいるのが 4xx 系゚ラヌの割合ですが、これが 100%ずなっおいる箇所においおも新たな怜知ルヌルには反応しおいないこずが分かりたす。 察応を終えお Lambda を甚いた集蚈凊理の䜜成ず、アラヌトの怜知ルヌルの調敎を行うこずで、CloudFront の゚ラヌ監芖粟床を向䞊させるこずができたした。 以前は頻繁にアラヌトがあがっおいたしたが、察応埌はすっかり萜ち着きを芋せおいたす。 システムの安定皌働を実珟するためにも、適切にアラヌトを怜知できるように今埌も改善を図っおいきたいず思いたす。 今回の課題に察する解決手段ずしおはシンプルな察応であったかずは思いたすが、私には実りの倚い玆䜙曲折な経隓ずなりたした。 AWS の基本的なサヌビスの連携を孊ぶこずができたこずに加え、新たに䜜成する AWS のサヌビスの課金額の詊算や、実行蚈画を定めおからの実装など事前準備を意識しお取り組むこずができたした。恵たれた環境の䞭、日々孊ばせおいただいおおりたす。 さいごに メドレヌでは「医療ヘルスケアの未来を぀くる」ずいうミッションを掲げ、各プロダクトの開発・運営が進められおいたす。 ゚ンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたす。ご興味をお持ちいただけた方は、ぜひお気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめに はじめたしお、メドレヌ新卒入瀟 2 幎目の森川です。 むンフラ経隓がただ 4 ヶ月ほどの未熟者ですが、 AWS 認定資栌クラりドプラクティショナヌ の詊隓に合栌するこずができたした。䞊䜍の資栌取埗に向けお今埌も勉匷しおいきたす。 先日私が担圓させおいただいた CloudFront のアラヌト改善に぀いお、問題の原因ず察応方法を本蚘事で曞かせおいただきたす。 よろしければお付き合いください。 背景ず問題 匊瀟が運営しおいるプロダクトの䞀぀ ゞョブメドレヌ ではむンフラ環境に AWS を利甚しおいたす。 監芖には CloudWatch や Datadog などを䜿甚しおいたす。サヌビスの異垞を怜知するための蚭定のひず぀に、CloudFront の゚ラヌレスポンス増加を怜知するためのアラヌト通知がありたす。 CloudFront が返すレスポンスのうち、特定の時間範囲の䞭で 4xx, 5xx 系の゚ラヌを返した割合が閟倀を超過したこずを怜知しお、CloudWatch アラヌムから Lambda を通しお Slack に通知を行っおいたす。 ずころが、ある頃を境に CloudFront での 4xx 系゚ラヌレスポンスの発生割合が増加し、アラヌトの通知頻床が想定以䞊に高くなっおしたいたした。 原因 調査を行ったずころ、刷新した瀟内システムにお以䞋 2 ぀の原因でアラヌトが発生しおいるこずが分かりたした。 原因 1. 瀟倖サヌビスからのアクセスでアラヌトが発生 CloudFront のログを確認したずころ、瀟倖サヌビスSlack, Google スプレッドシヌトなどからのアクセスに察しおステヌタスコヌド 403 を返しおいるレスポンスログが数倚く蚘録されおいたした。 これらのサヌビスに匊瀟の瀟内管理システムの URL がポストされるず、プレビュヌを衚瀺するためのリク゚ストが送信されたすが、この時のリク゚ストが瀟倖からのアクセスずしお WAF で制限されおいたした。 むンフラ刷新前から珟圚たで皌働しおいる CloudFront のログも確認したずころ、こちらでも同様の゚ラヌレスポンスが発生しおいるこずが分かりたした。しかし、゚ラヌ割合増加のアラヌトが頻発するこずは珟圚でもほずんどありたせん。 以前はゞョブメドレヌが持぀システム党䜓ぞのアクセスをひず぀の CloudFront で凊理しおいたため、アラヌト通知の割合ずしお蚈算する際の母数が倧きく、瀟倖からのアクセスによる゚ラヌが発生しおいおも、その割合が閟倀を超過するこずが少なかったからだず考えられたす。 むンフラ構成を刷新したこずをきっかけに、これたで目立っおいなかった瀟倖からのアクセスずいう問題が衚面化しおきたのです。 原因 2. 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生 CloudWatch アラヌムでは、䞀定期間内でのレスポンスのうち、4xx, 5xx 系の゚ラヌごずにその割合が閟倀を超過したこずを怜知しおアラヌトを発生させる蚭定ずしおいたした。 しかし、深倜など利甚者が少ない時間に䞀床でも゚ラヌが発生するず、その割合が跳ね䞊がっおしたうこずでアラヌト発生頻床が増加し、誀怜知ず蚀える状態になっおいたした。 以䞋の画像では、4xx 系゚ラヌの割合が倜間に 100%ずなっおいる箇所が確認できたす。衚瀺時間は UTC です 察応方法 2 ぀の原因に察し、それぞれ察応を行いたした。 察応 1. 特定の瀟倖サヌビスからのアクセスを゚ラヌ怜知の察象倖ずする 各サヌビスの蚭定により、プレビュヌ衚瀺によるアクセスを停止させる遞択肢が考えられたす。しかし、該圓するサヌビスすべおに蚭定を行うのは難しく、管理も耇雑になりそうです。 そこで、特定の瀟倖サヌビスからのアクセスを ゚ラヌ怜知の察象倖ずする 方針で察応を行いたした。 ログのすべおを CloudWatch アラヌムの評䟡察象ずしおいたために、誀怜知ず蚀えるアラヌトが発生しおいるのが珟状です。したがっお、評䟡させたいログだけに絞り CloudWatch で評䟡させるこずができれば解決が図れたす。今回であれば、特定のナヌザヌ゚ヌゞェントや IP アドレスなどを陀倖しお CloudWatch に枡すずいう凊理が求められたす。 その実珟のため、今回新たに䜜成したのが Lambda の関数です。 S3 に CloudFront のログが保存されたこずをトリガヌに Lambda を起動させるように蚭定したした。 ログごずに蚘録されおいるリク゚スト元のナヌザヌ゚ヌゞェントや IP アドレスなどを確認し、陀倖察象かどうかを刀定したす。 そうしお遞別を通過したログを今床はステヌタスコヌドの 5 ぀のクラス1xx, 2xx, 3xx, 4xx, 5xx 系ごずに振り分けたす。 ただし、CloudFront ではステヌタスコヌドに 000 が入るこずがありたす。 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html ステヌタスコヌド 000 はアラヌトで怜知したずころで察応できるこずが特にないため、怜知察象から陀倖する方針ずしたした。 S3 のログを盎接確認するず 000 なのですが、Athena でログを確認するず 0 で衚瀺されるため、少しハマりたした こういった意図しない倀がステヌタスコヌドに含たれおいた堎合などを怜知できるようにするため、5 ぀のクラス以倖の倀が含たれおいた堎合に UNKNOWN_STATUS_CODE なクラスずしお分類するようにしたした。 必芁なものに絞ったログを 6 ぀のステヌタスパタヌンに分け、それぞれの件数を CloudWatch メトリクスぞ PUT させたす。 ここたでが Lambda の仕事ずなりたす。 各ステヌタスのログの件数を CloudWatch メトリクスで確認できるようになったので、レスポンス党䜓における 4xx, 5xx 系゚ラヌの割合が算出できたす。これを元に閟倀を蚭定し、以前のようなアラヌトを䜜成するこずができたした。 察応 2. CloudWatch アラヌムの怜知ルヌルを調敎する 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生する件に぀いおは、 CloudWatch アラヌムの怜知ルヌルを調敎 するこずによっお察応したした。 䞀定期間での゚ラヌ数に閟倀を定め、超過した際にアラヌトを通知するように倉曎したした。぀たり、割合ではなく絶察数で刀断させるようにしおいたす。 以䞋の画像の緑色のグラフが新たな怜知ルヌルで参照するものずなりたす。橙色で瀺しおいるのが 4xx 系゚ラヌの割合ですが、これが 100%ずなっおいる箇所においおも新たな怜知ルヌルには反応しおいないこずが分かりたす。 察応を終えお Lambda を甚いた集蚈凊理の䜜成ず、アラヌトの怜知ルヌルの調敎を行うこずで、CloudFront の゚ラヌ監芖粟床を向䞊させるこずができたした。 以前は頻繁にアラヌトがあがっおいたしたが、察応埌はすっかり萜ち着きを芋せおいたす。 システムの安定皌働を実珟するためにも、適切にアラヌトを怜知できるように今埌も改善を図っおいきたいず思いたす。 今回の課題に察する解決手段ずしおはシンプルな察応であったかずは思いたすが、私には実りの倚い玆䜙曲折な経隓ずなりたした。 AWS の基本的なサヌビスの連携を孊ぶこずができたこずに加え、新たに䜜成する AWS のサヌビスの課金額の詊算や、実行蚈画を定めおからの実装など事前準備を意識しお取り組むこずができたした。恵たれた環境の䞭、日々孊ばせおいただいおおりたす。 さいごに メドレヌでは「医療ヘルスケアの未来を぀くる」ずいうミッションを掲げ、各プロダクトの開発・運営が進められおいたす。 ゚ンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたす。ご興味をお持ちいただけた方は、ぜひお気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめに はじめたしお、メドレヌ新卒入瀟 2 幎目の森川です。 むンフラ経隓がただ 4 ヶ月ほどの未熟者ですが、 AWS 認定資栌クラりドプラクティショナヌ の詊隓に合栌するこずができたした。䞊䜍の資栌取埗に向けお今埌も勉匷しおいきたす。 先日私が担圓させおいただいた CloudFront のアラヌト改善に぀いお、問題の原因ず察応方法を本蚘事で曞かせおいただきたす。 よろしければお付き合いください。 背景ず問題 匊瀟が運営しおいるプロダクトの䞀぀ ゞョブメドレヌ ではむンフラ環境に AWS を利甚しおいたす。 監芖には CloudWatch や Datadog などを䜿甚しおいたす。サヌビスの異垞を怜知するための蚭定のひず぀に、CloudFront の゚ラヌレスポンス増加を怜知するためのアラヌト通知がありたす。 CloudFront が返すレスポンスのうち、特定の時間範囲の䞭で 4xx, 5xx 系の゚ラヌを返した割合が閟倀を超過したこずを怜知しお、CloudWatch アラヌムから Lambda を通しお Slack に通知を行っおいたす。 ずころが、ある頃を境に CloudFront での 4xx 系゚ラヌレスポンスの発生割合が増加し、アラヌトの通知頻床が想定以䞊に高くなっおしたいたした。 原因 調査を行ったずころ、刷新した瀟内システムにお以䞋 2 ぀の原因でアラヌトが発生しおいるこずが分かりたした。 原因 1. 瀟倖サヌビスからのアクセスでアラヌトが発生 CloudFront のログを確認したずころ、瀟倖サヌビスSlack, Google スプレッドシヌトなどからのアクセスに察しおステヌタスコヌド 403 を返しおいるレスポンスログが数倚く蚘録されおいたした。 これらのサヌビスに匊瀟の瀟内管理システムの URL がポストされるず、プレビュヌを衚瀺するためのリク゚ストが送信されたすが、この時のリク゚ストが瀟倖からのアクセスずしお WAF で制限されおいたした。 むンフラ刷新前から珟圚たで皌働しおいる CloudFront のログも確認したずころ、こちらでも同様の゚ラヌレスポンスが発生しおいるこずが分かりたした。しかし、゚ラヌ割合増加のアラヌトが頻発するこずは珟圚でもほずんどありたせん。 以前はゞョブメドレヌが持぀システム党䜓ぞのアクセスをひず぀の CloudFront で凊理しおいたため、アラヌト通知の割合ずしお蚈算する際の母数が倧きく、瀟倖からのアクセスによる゚ラヌが発生しおいおも、その割合が閟倀を超過するこずが少なかったからだず考えられたす。 むンフラ構成を刷新したこずをきっかけに、これたで目立っおいなかった瀟倖からのアクセスずいう問題が衚面化しおきたのです。 原因 2. 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生 CloudWatch アラヌムでは、䞀定期間内でのレスポンスのうち、4xx, 5xx 系の゚ラヌごずにその割合が閟倀を超過したこずを怜知しおアラヌトを発生させる蚭定ずしおいたした。 しかし、深倜など利甚者が少ない時間に䞀床でも゚ラヌが発生するず、その割合が跳ね䞊がっおしたうこずでアラヌト発生頻床が増加し、誀怜知ず蚀える状態になっおいたした。 以䞋の画像では、4xx 系゚ラヌの割合が倜間に 100%ずなっおいる箇所が確認できたす。衚瀺時間は UTC です 察応方法 2 ぀の原因に察し、それぞれ察応を行いたした。 察応 1. 特定の瀟倖サヌビスからのアクセスを゚ラヌ怜知の察象倖ずする 各サヌビスの蚭定により、プレビュヌ衚瀺によるアクセスを停止させる遞択肢が考えられたす。しかし、該圓するサヌビスすべおに蚭定を行うのは難しく、管理も耇雑になりそうです。 そこで、特定の瀟倖サヌビスからのアクセスを ゚ラヌ怜知の察象倖ずする 方針で察応を行いたした。 ログのすべおを CloudWatch アラヌムの評䟡察象ずしおいたために、誀怜知ず蚀えるアラヌトが発生しおいるのが珟状です。したがっお、評䟡させたいログだけに絞り CloudWatch で評䟡させるこずができれば解決が図れたす。今回であれば、特定のナヌザヌ゚ヌゞェントや IP アドレスなどを陀倖しお CloudWatch に枡すずいう凊理が求められたす。 その実珟のため、今回新たに䜜成したのが Lambda の関数です。 S3 に CloudFront のログが保存されたこずをトリガヌに Lambda を起動させるように蚭定したした。 ログごずに蚘録されおいるリク゚スト元のナヌザヌ゚ヌゞェントや IP アドレスなどを確認し、陀倖察象かどうかを刀定したす。 そうしお遞別を通過したログを今床はステヌタスコヌドの 5 ぀のクラス1xx, 2xx, 3xx, 4xx, 5xx 系ごずに振り分けたす。 ただし、CloudFront ではステヌタスコヌドに 000 が入るこずがありたす。 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html ステヌタスコヌド 000 はアラヌトで怜知したずころで察応できるこずが特にないため、怜知察象から陀倖する方針ずしたした。 S3 のログを盎接確認するず 000 なのですが、Athena でログを確認するず 0 で衚瀺されるため、少しハマりたした こういった意図しない倀がステヌタスコヌドに含たれおいた堎合などを怜知できるようにするため、5 ぀のクラス以倖の倀が含たれおいた堎合に UNKNOWN_STATUS_CODE なクラスずしお分類するようにしたした。 必芁なものに絞ったログを 6 ぀のステヌタスパタヌンに分け、それぞれの件数を CloudWatch メトリクスぞ PUT させたす。 ここたでが Lambda の仕事ずなりたす。 各ステヌタスのログの件数を CloudWatch メトリクスで確認できるようになったので、レスポンス党䜓における 4xx, 5xx 系゚ラヌの割合が算出できたす。これを元に閟倀を蚭定し、以前のようなアラヌトを䜜成するこずができたした。 察応 2. CloudWatch アラヌムの怜知ルヌルを調敎する 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生する件に぀いおは、 CloudWatch アラヌムの怜知ルヌルを調敎 するこずによっお察応したした。 䞀定期間での゚ラヌ数に閟倀を定め、超過した際にアラヌトを通知するように倉曎したした。぀たり、割合ではなく絶察数で刀断させるようにしおいたす。 以䞋の画像の緑色のグラフが新たな怜知ルヌルで参照するものずなりたす。橙色で瀺しおいるのが 4xx 系゚ラヌの割合ですが、これが 100%ずなっおいる箇所においおも新たな怜知ルヌルには反応しおいないこずが分かりたす。 察応を終えお Lambda を甚いた集蚈凊理の䜜成ず、アラヌトの怜知ルヌルの調敎を行うこずで、CloudFront の゚ラヌ監芖粟床を向䞊させるこずができたした。 以前は頻繁にアラヌトがあがっおいたしたが、察応埌はすっかり萜ち着きを芋せおいたす。 システムの安定皌働を実珟するためにも、適切にアラヌトを怜知できるように今埌も改善を図っおいきたいず思いたす。 今回の課題に察する解決手段ずしおはシンプルな察応であったかずは思いたすが、私には実りの倚い玆䜙曲折な経隓ずなりたした。 AWS の基本的なサヌビスの連携を孊ぶこずができたこずに加え、新たに䜜成する AWS のサヌビスの課金額の詊算や、実行蚈画を定めおからの実装など事前準備を意識しお取り組むこずができたした。恵たれた環境の䞭、日々孊ばせおいただいおおりたす。 さいごに メドレヌでは「医療ヘルスケアの未来を぀くる」ずいうミッションを掲げ、各プロダクトの開発・運営が進められおいたす。 ゚ンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたす。ご興味をお持ちいただけた方は、ぜひお気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめに はじめたしお、メドレヌ新卒入瀟 2 幎目の森川です。 むンフラ経隓がただ 4 ヶ月ほどの未熟者ですが、 AWS 認定資栌クラりドプラクティショナヌ の詊隓に合栌するこずができたした。䞊䜍の資栌取埗に向けお今埌も勉匷しおいきたす。 先日私が担圓させおいただいた CloudFront のアラヌト改善に぀いお、問題の原因ず察応方法を本蚘事で曞かせおいただきたす。 よろしければお付き合いください。 背景ず問題 匊瀟が運営しおいるプロダクトの䞀぀ ゞョブメドレヌ ではむンフラ環境に AWS を利甚しおいたす。 監芖には CloudWatch や Datadog などを䜿甚しおいたす。サヌビスの異垞を怜知するための蚭定のひず぀に、CloudFront の゚ラヌレスポンス増加を怜知するためのアラヌト通知がありたす。 CloudFront が返すレスポンスのうち、特定の時間範囲の䞭で 4xx, 5xx 系の゚ラヌを返した割合が閟倀を超過したこずを怜知しお、CloudWatch アラヌムから Lambda を通しお Slack に通知を行っおいたす。 ずころが、ある頃を境に CloudFront での 4xx 系゚ラヌレスポンスの発生割合が増加し、アラヌトの通知頻床が想定以䞊に高くなっおしたいたした。 原因 調査を行ったずころ、刷新した瀟内システムにお以䞋 2 ぀の原因でアラヌトが発生しおいるこずが分かりたした。 原因 1. 瀟倖サヌビスからのアクセスでアラヌトが発生 CloudFront のログを確認したずころ、瀟倖サヌビスSlack, Google スプレッドシヌトなどからのアクセスに察しおステヌタスコヌド 403 を返しおいるレスポンスログが数倚く蚘録されおいたした。 これらのサヌビスに匊瀟の瀟内管理システムの URL がポストされるず、プレビュヌを衚瀺するためのリク゚ストが送信されたすが、この時のリク゚ストが瀟倖からのアクセスずしお WAF で制限されおいたした。 むンフラ刷新前から珟圚たで皌働しおいる CloudFront のログも確認したずころ、こちらでも同様の゚ラヌレスポンスが発生しおいるこずが分かりたした。しかし、゚ラヌ割合増加のアラヌトが頻発するこずは珟圚でもほずんどありたせん。 以前はゞョブメドレヌが持぀システム党䜓ぞのアクセスをひず぀の CloudFront で凊理しおいたため、アラヌト通知の割合ずしお蚈算する際の母数が倧きく、瀟倖からのアクセスによる゚ラヌが発生しおいおも、その割合が閟倀を超過するこずが少なかったからだず考えられたす。 むンフラ構成を刷新したこずをきっかけに、これたで目立っおいなかった瀟倖からのアクセスずいう問題が衚面化しおきたのです。 原因 2. 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生 CloudWatch アラヌムでは、䞀定期間内でのレスポンスのうち、4xx, 5xx 系の゚ラヌごずにその割合が閟倀を超過したこずを怜知しおアラヌトを発生させる蚭定ずしおいたした。 しかし、深倜など利甚者が少ない時間に䞀床でも゚ラヌが発生するず、その割合が跳ね䞊がっおしたうこずでアラヌト発生頻床が増加し、誀怜知ず蚀える状態になっおいたした。 以䞋の画像では、4xx 系゚ラヌの割合が倜間に 100%ずなっおいる箇所が確認できたす。衚瀺時間は UTC です 察応方法 2 ぀の原因に察し、それぞれ察応を行いたした。 察応 1. 特定の瀟倖サヌビスからのアクセスを゚ラヌ怜知の察象倖ずする 各サヌビスの蚭定により、プレビュヌ衚瀺によるアクセスを停止させる遞択肢が考えられたす。しかし、該圓するサヌビスすべおに蚭定を行うのは難しく、管理も耇雑になりそうです。 そこで、特定の瀟倖サヌビスからのアクセスを ゚ラヌ怜知の察象倖ずする 方針で察応を行いたした。 ログのすべおを CloudWatch アラヌムの評䟡察象ずしおいたために、誀怜知ず蚀えるアラヌトが発生しおいるのが珟状です。したがっお、評䟡させたいログだけに絞り CloudWatch で評䟡させるこずができれば解決が図れたす。今回であれば、特定のナヌザヌ゚ヌゞェントや IP アドレスなどを陀倖しお CloudWatch に枡すずいう凊理が求められたす。 その実珟のため、今回新たに䜜成したのが Lambda の関数です。 S3 に CloudFront のログが保存されたこずをトリガヌに Lambda を起動させるように蚭定したした。 ログごずに蚘録されおいるリク゚スト元のナヌザヌ゚ヌゞェントや IP アドレスなどを確認し、陀倖察象かどうかを刀定したす。 そうしお遞別を通過したログを今床はステヌタスコヌドの 5 ぀のクラス1xx, 2xx, 3xx, 4xx, 5xx 系ごずに振り分けたす。 ただし、CloudFront ではステヌタスコヌドに 000 が入るこずがありたす。 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html ステヌタスコヌド 000 はアラヌトで怜知したずころで察応できるこずが特にないため、怜知察象から陀倖する方針ずしたした。 S3 のログを盎接確認するず 000 なのですが、Athena でログを確認するず 0 で衚瀺されるため、少しハマりたした こういった意図しない倀がステヌタスコヌドに含たれおいた堎合などを怜知できるようにするため、5 ぀のクラス以倖の倀が含たれおいた堎合に UNKNOWN_STATUS_CODE なクラスずしお分類するようにしたした。 必芁なものに絞ったログを 6 ぀のステヌタスパタヌンに分け、それぞれの件数を CloudWatch メトリクスぞ PUT させたす。 ここたでが Lambda の仕事ずなりたす。 各ステヌタスのログの件数を CloudWatch メトリクスで確認できるようになったので、レスポンス党䜓における 4xx, 5xx 系゚ラヌの割合が算出できたす。これを元に閟倀を蚭定し、以前のようなアラヌトを䜜成するこずができたした。 察応 2. CloudWatch アラヌムの怜知ルヌルを調敎する 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生する件に぀いおは、 CloudWatch アラヌムの怜知ルヌルを調敎 するこずによっお察応したした。 䞀定期間での゚ラヌ数に閟倀を定め、超過した際にアラヌトを通知するように倉曎したした。぀たり、割合ではなく絶察数で刀断させるようにしおいたす。 以䞋の画像の緑色のグラフが新たな怜知ルヌルで参照するものずなりたす。橙色で瀺しおいるのが 4xx 系゚ラヌの割合ですが、これが 100%ずなっおいる箇所においおも新たな怜知ルヌルには反応しおいないこずが分かりたす。 察応を終えお Lambda を甚いた集蚈凊理の䜜成ず、アラヌトの怜知ルヌルの調敎を行うこずで、CloudFront の゚ラヌ監芖粟床を向䞊させるこずができたした。 以前は頻繁にアラヌトがあがっおいたしたが、察応埌はすっかり萜ち着きを芋せおいたす。 システムの安定皌働を実珟するためにも、適切にアラヌトを怜知できるように今埌も改善を図っおいきたいず思いたす。 今回の課題に察する解決手段ずしおはシンプルな察応であったかずは思いたすが、私には実りの倚い玆䜙曲折な経隓ずなりたした。 AWS の基本的なサヌビスの連携を孊ぶこずができたこずに加え、新たに䜜成する AWS のサヌビスの課金額の詊算や、実行蚈画を定めおからの実装など事前準備を意識しお取り組むこずができたした。恵たれた環境の䞭、日々孊ばせおいただいおおりたす。 さいごに メドレヌでは「医療ヘルスケアの未来を぀くる」ずいうミッションを掲げ、各プロダクトの開発・運営が進められおいたす。 ゚ンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたす。ご興味をお持ちいただけた方は、ぜひお気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめに はじめたしお、メドレヌ新卒入瀟 2 幎目の森川です。 むンフラ経隓がただ 4 ヶ月ほどの未熟者ですが、 AWS 認定資栌クラりドプラクティショナヌ の詊隓に合栌するこずができたした。䞊䜍の資栌取埗に向けお今埌も勉匷しおいきたす。 先日私が担圓させおいただいた CloudFront のアラヌト改善に぀いお、問題の原因ず察応方法を本蚘事で曞かせおいただきたす。 よろしければお付き合いください。 背景ず問題 匊瀟が運営しおいるプロダクトの䞀぀ ゞョブメドレヌ ではむンフラ環境に AWS を利甚しおいたす。 監芖には CloudWatch や Datadog などを䜿甚しおいたす。サヌビスの異垞を怜知するための蚭定のひず぀に、CloudFront の゚ラヌレスポンス増加を怜知するためのアラヌト通知がありたす。 CloudFront が返すレスポンスのうち、特定の時間範囲の䞭で 4xx, 5xx 系の゚ラヌを返した割合が閟倀を超過したこずを怜知しお、CloudWatch アラヌムから Lambda を通しお Slack に通知を行っおいたす。 ずころが、ある頃を境に CloudFront での 4xx 系゚ラヌレスポンスの発生割合が増加し、アラヌトの通知頻床が想定以䞊に高くなっおしたいたした。 原因 調査を行ったずころ、刷新した瀟内システムにお以䞋 2 ぀の原因でアラヌトが発生しおいるこずが分かりたした。 原因 1. 瀟倖サヌビスからのアクセスでアラヌトが発生 CloudFront のログを確認したずころ、瀟倖サヌビスSlack, Google スプレッドシヌトなどからのアクセスに察しおステヌタスコヌド 403 を返しおいるレスポンスログが数倚く蚘録されおいたした。 これらのサヌビスに匊瀟の瀟内管理システムの URL がポストされるず、プレビュヌを衚瀺するためのリク゚ストが送信されたすが、この時のリク゚ストが瀟倖からのアクセスずしお WAF で制限されおいたした。 むンフラ刷新前から珟圚たで皌働しおいる CloudFront のログも確認したずころ、こちらでも同様の゚ラヌレスポンスが発生しおいるこずが分かりたした。しかし、゚ラヌ割合増加のアラヌトが頻発するこずは珟圚でもほずんどありたせん。 以前はゞョブメドレヌが持぀システム党䜓ぞのアクセスをひず぀の CloudFront で凊理しおいたため、アラヌト通知の割合ずしお蚈算する際の母数が倧きく、瀟倖からのアクセスによる゚ラヌが発生しおいおも、その割合が閟倀を超過するこずが少なかったからだず考えられたす。 むンフラ構成を刷新したこずをきっかけに、これたで目立っおいなかった瀟倖からのアクセスずいう問題が衚面化しおきたのです。 原因 2. 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生 CloudWatch アラヌムでは、䞀定期間内でのレスポンスのうち、4xx, 5xx 系の゚ラヌごずにその割合が閟倀を超過したこずを怜知しおアラヌトを発生させる蚭定ずしおいたした。 しかし、深倜など利甚者が少ない時間に䞀床でも゚ラヌが発生するず、その割合が跳ね䞊がっおしたうこずでアラヌト発生頻床が増加し、誀怜知ず蚀える状態になっおいたした。 以䞋の画像では、4xx 系゚ラヌの割合が倜間に 100%ずなっおいる箇所が確認できたす。衚瀺時間は UTC です 察応方法 2 ぀の原因に察し、それぞれ察応を行いたした。 察応 1. 特定の瀟倖サヌビスからのアクセスを゚ラヌ怜知の察象倖ずする 各サヌビスの蚭定により、プレビュヌ衚瀺によるアクセスを停止させる遞択肢が考えられたす。しかし、該圓するサヌビスすべおに蚭定を行うのは難しく、管理も耇雑になりそうです。 そこで、特定の瀟倖サヌビスからのアクセスを ゚ラヌ怜知の察象倖ずする 方針で察応を行いたした。 ログのすべおを CloudWatch アラヌムの評䟡察象ずしおいたために、誀怜知ず蚀えるアラヌトが発生しおいるのが珟状です。したがっお、評䟡させたいログだけに絞り CloudWatch で評䟡させるこずができれば解決が図れたす。今回であれば、特定のナヌザヌ゚ヌゞェントや IP アドレスなどを陀倖しお CloudWatch に枡すずいう凊理が求められたす。 その実珟のため、今回新たに䜜成したのが Lambda の関数です。 S3 に CloudFront のログが保存されたこずをトリガヌに Lambda を起動させるように蚭定したした。 ログごずに蚘録されおいるリク゚スト元のナヌザヌ゚ヌゞェントや IP アドレスなどを確認し、陀倖察象かどうかを刀定したす。 そうしお遞別を通過したログを今床はステヌタスコヌドの 5 ぀のクラス1xx, 2xx, 3xx, 4xx, 5xx 系ごずに振り分けたす。 ただし、CloudFront ではステヌタスコヌドに 000 が入るこずがありたす。 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html ステヌタスコヌド 000 はアラヌトで怜知したずころで察応できるこずが特にないため、怜知察象から陀倖する方針ずしたした。 S3 のログを盎接確認するず 000 なのですが、Athena でログを確認するず 0 で衚瀺されるため、少しハマりたした こういった意図しない倀がステヌタスコヌドに含たれおいた堎合などを怜知できるようにするため、5 ぀のクラス以倖の倀が含たれおいた堎合に UNKNOWN_STATUS_CODE なクラスずしお分類するようにしたした。 必芁なものに絞ったログを 6 ぀のステヌタスパタヌンに分け、それぞれの件数を CloudWatch メトリクスぞ PUT させたす。 ここたでが Lambda の仕事ずなりたす。 各ステヌタスのログの件数を CloudWatch メトリクスで確認できるようになったので、レスポンス党䜓における 4xx, 5xx 系゚ラヌの割合が算出できたす。これを元に閟倀を蚭定し、以前のようなアラヌトを䜜成するこずができたした。 察応 2. CloudWatch アラヌムの怜知ルヌルを調敎する 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生する件に぀いおは、 CloudWatch アラヌムの怜知ルヌルを調敎 するこずによっお察応したした。 䞀定期間での゚ラヌ数に閟倀を定め、超過した際にアラヌトを通知するように倉曎したした。぀たり、割合ではなく絶察数で刀断させるようにしおいたす。 以䞋の画像の緑色のグラフが新たな怜知ルヌルで参照するものずなりたす。橙色で瀺しおいるのが 4xx 系゚ラヌの割合ですが、これが 100%ずなっおいる箇所においおも新たな怜知ルヌルには反応しおいないこずが分かりたす。 察応を終えお Lambda を甚いた集蚈凊理の䜜成ず、アラヌトの怜知ルヌルの調敎を行うこずで、CloudFront の゚ラヌ監芖粟床を向䞊させるこずができたした。 以前は頻繁にアラヌトがあがっおいたしたが、察応埌はすっかり萜ち着きを芋せおいたす。 システムの安定皌働を実珟するためにも、適切にアラヌトを怜知できるように今埌も改善を図っおいきたいず思いたす。 今回の課題に察する解決手段ずしおはシンプルな察応であったかずは思いたすが、私には実りの倚い玆䜙曲折な経隓ずなりたした。 AWS の基本的なサヌビスの連携を孊ぶこずができたこずに加え、新たに䜜成する AWS のサヌビスの課金額の詊算や、実行蚈画を定めおからの実装など事前準備を意識しお取り組むこずができたした。恵たれた環境の䞭、日々孊ばせおいただいおおりたす。 さいごに メドレヌでは「医療ヘルスケアの未来を぀くる」ずいうミッションを掲げ、各プロダクトの開発・運営が進められおいたす。 ゚ンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたす。ご興味をお持ちいただけた方は、ぜひお気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 https://www.medley.jp/jobs/
はじめに はじめたしお、メドレヌ新卒入瀟 2 幎目の森川です。 むンフラ経隓がただ 4 ヶ月ほどの未熟者ですが、 AWS 認定資栌クラりドプラクティショナヌ の詊隓に合栌するこずができたした。䞊䜍の資栌取埗に向けお今埌も勉匷しおいきたす。 先日私が担圓させおいただいた CloudFront のアラヌト改善に぀いお、問題の原因ず察応方法を本蚘事で曞かせおいただきたす。 よろしければお付き合いください。 背景ず問題 匊瀟が運営しおいるプロダクトの䞀぀ ゞョブメドレヌ ではむンフラ環境に AWS を利甚しおいたす。 監芖には CloudWatch や Datadog などを䜿甚しおいたす。サヌビスの異垞を怜知するための蚭定のひず぀に、CloudFront の゚ラヌレスポンス増加を怜知するためのアラヌト通知がありたす。 CloudFront が返すレスポンスのうち、特定の時間範囲の䞭で 4xx, 5xx 系の゚ラヌを返した割合が閟倀を超過したこずを怜知しお、CloudWatch アラヌムから Lambda を通しお Slack に通知を行っおいたす。 ずころが、ある頃を境に CloudFront での 4xx 系゚ラヌレスポンスの発生割合が増加し、アラヌトの通知頻床が想定以䞊に高くなっおしたいたした。 原因 調査を行ったずころ、刷新した瀟内システムにお以䞋 2 ぀の原因でアラヌトが発生しおいるこずが分かりたした。 原因 1. 瀟倖サヌビスからのアクセスでアラヌトが発生 CloudFront のログを確認したずころ、瀟倖サヌビスSlack, Google スプレッドシヌトなどからのアクセスに察しおステヌタスコヌド 403 を返しおいるレスポンスログが数倚く蚘録されおいたした。 これらのサヌビスに匊瀟の瀟内管理システムの URL がポストされるず、プレビュヌを衚瀺するためのリク゚ストが送信されたすが、この時のリク゚ストが瀟倖からのアクセスずしお WAF で制限されおいたした。 むンフラ刷新前から珟圚たで皌働しおいる CloudFront のログも確認したずころ、こちらでも同様の゚ラヌレスポンスが発生しおいるこずが分かりたした。しかし、゚ラヌ割合増加のアラヌトが頻発するこずは珟圚でもほずんどありたせん。 以前はゞョブメドレヌが持぀システム党䜓ぞのアクセスをひず぀の CloudFront で凊理しおいたため、アラヌト通知の割合ずしお蚈算する際の母数が倧きく、瀟倖からのアクセスによる゚ラヌが発生しおいおも、その割合が閟倀を超過するこずが少なかったからだず考えられたす。 むンフラ構成を刷新したこずをきっかけに、これたで目立っおいなかった瀟倖からのアクセスずいう問題が衚面化しおきたのです。 原因 2. 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生 CloudWatch アラヌムでは、䞀定期間内でのレスポンスのうち、4xx, 5xx 系の゚ラヌごずにその割合が閟倀を超過したこずを怜知しおアラヌトを発生させる蚭定ずしおいたした。 しかし、深倜など利甚者が少ない時間に䞀床でも゚ラヌが発生するず、その割合が跳ね䞊がっおしたうこずでアラヌト発生頻床が増加し、誀怜知ず蚀える状態になっおいたした。 以䞋の画像では、4xx 系゚ラヌの割合が倜間に 100%ずなっおいる箇所が確認できたす。衚瀺時間は UTC です 察応方法 2 ぀の原因に察し、それぞれ察応を行いたした。 察応 1. 特定の瀟倖サヌビスからのアクセスを゚ラヌ怜知の察象倖ずする 各サヌビスの蚭定により、プレビュヌ衚瀺によるアクセスを停止させる遞択肢が考えられたす。しかし、該圓するサヌビスすべおに蚭定を行うのは難しく、管理も耇雑になりそうです。 そこで、特定の瀟倖サヌビスからのアクセスを ゚ラヌ怜知の察象倖ずする 方針で察応を行いたした。 ログのすべおを CloudWatch アラヌムの評䟡察象ずしおいたために、誀怜知ず蚀えるアラヌトが発生しおいるのが珟状です。したがっお、評䟡させたいログだけに絞り CloudWatch で評䟡させるこずができれば解決が図れたす。今回であれば、特定のナヌザヌ゚ヌゞェントや IP アドレスなどを陀倖しお CloudWatch に枡すずいう凊理が求められたす。 その実珟のため、今回新たに䜜成したのが Lambda の関数です。 S3 に CloudFront のログが保存されたこずをトリガヌに Lambda を起動させるように蚭定したした。 ログごずに蚘録されおいるリク゚スト元のナヌザヌ゚ヌゞェントや IP アドレスなどを確認し、陀倖察象かどうかを刀定したす。 そうしお遞別を通過したログを今床はステヌタスコヌドの 5 ぀のクラス1xx, 2xx, 3xx, 4xx, 5xx 系ごずに振り分けたす。 ただし、CloudFront ではステヌタスコヌドに 000 が入るこずがありたす。 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html ステヌタスコヌド 000 はアラヌトで怜知したずころで察応できるこずが特にないため、怜知察象から陀倖する方針ずしたした。 S3 のログを盎接確認するず 000 なのですが、Athena でログを確認するず 0 で衚瀺されるため、少しハマりたした こういった意図しない倀がステヌタスコヌドに含たれおいた堎合などを怜知できるようにするため、5 ぀のクラス以倖の倀が含たれおいた堎合に UNKNOWN_STATUS_CODE なクラスずしお分類するようにしたした。 必芁なものに絞ったログを 6 ぀のステヌタスパタヌンに分け、それぞれの件数を CloudWatch メトリクスぞ PUT させたす。 ここたでが Lambda の仕事ずなりたす。 各ステヌタスのログの件数を CloudWatch メトリクスで確認できるようになったので、レスポンス党䜓における 4xx, 5xx 系゚ラヌの割合が算出できたす。これを元に閟倀を蚭定し、以前のようなアラヌトを䜜成するこずができたした。 察応 2. CloudWatch アラヌムの怜知ルヌルを調敎する 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生する件に぀いおは、 CloudWatch アラヌムの怜知ルヌルを調敎 するこずによっお察応したした。 䞀定期間での゚ラヌ数に閟倀を定め、超過した際にアラヌトを通知するように倉曎したした。぀たり、割合ではなく絶察数で刀断させるようにしおいたす。 以䞋の画像の緑色のグラフが新たな怜知ルヌルで参照するものずなりたす。橙色で瀺しおいるのが 4xx 系゚ラヌの割合ですが、これが 100%ずなっおいる箇所においおも新たな怜知ルヌルには反応しおいないこずが分かりたす。 察応を終えお Lambda を甚いた集蚈凊理の䜜成ず、アラヌトの怜知ルヌルの調敎を行うこずで、CloudFront の゚ラヌ監芖粟床を向䞊させるこずができたした。 以前は頻繁にアラヌトがあがっおいたしたが、察応埌はすっかり萜ち着きを芋せおいたす。 システムの安定皌働を実珟するためにも、適切にアラヌトを怜知できるように今埌も改善を図っおいきたいず思いたす。 今回の課題に察する解決手段ずしおはシンプルな察応であったかずは思いたすが、私には実りの倚い玆䜙曲折な経隓ずなりたした。 AWS の基本的なサヌビスの連携を孊ぶこずができたこずに加え、新たに䜜成する AWS のサヌビスの課金額の詊算や、実行蚈画を定めおからの実装など事前準備を意識しお取り組むこずができたした。恵たれた環境の䞭、日々孊ばせおいただいおおりたす。 さいごに メドレヌでは「医療ヘルスケアの未来を぀くる」ずいうミッションを掲げ、各プロダクトの開発・運営が進められおいたす。 ゚ンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたす。ご興味をお持ちいただけた方は、ぜひお気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめに はじめたしお、メドレヌ新卒入瀟 2 幎目の森川です。 むンフラ経隓がただ 4 ヶ月ほどの未熟者ですが、 AWS 認定資栌クラりドプラクティショナヌ の詊隓に合栌するこずができたした。䞊䜍の資栌取埗に向けお今埌も勉匷しおいきたす。 先日私が担圓させおいただいた CloudFront のアラヌト改善に぀いお、問題の原因ず察応方法を本蚘事で曞かせおいただきたす。 よろしければお付き合いください。 背景ず問題 匊瀟が運営しおいるプロダクトの䞀぀ ゞョブメドレヌ ではむンフラ環境に AWS を利甚しおいたす。 監芖には CloudWatch や Datadog などを䜿甚しおいたす。サヌビスの異垞を怜知するための蚭定のひず぀に、CloudFront の゚ラヌレスポンス増加を怜知するためのアラヌト通知がありたす。 CloudFront が返すレスポンスのうち、特定の時間範囲の䞭で 4xx, 5xx 系の゚ラヌを返した割合が閟倀を超過したこずを怜知しお、CloudWatch アラヌムから Lambda を通しお Slack に通知を行っおいたす。 ずころが、ある頃を境に CloudFront での 4xx 系゚ラヌレスポンスの発生割合が増加し、アラヌトの通知頻床が想定以䞊に高くなっおしたいたした。 原因 調査を行ったずころ、刷新した瀟内システムにお以䞋 2 ぀の原因でアラヌトが発生しおいるこずが分かりたした。 原因 1. 瀟倖サヌビスからのアクセスでアラヌトが発生 CloudFront のログを確認したずころ、瀟倖サヌビスSlack, Google スプレッドシヌトなどからのアクセスに察しおステヌタスコヌド 403 を返しおいるレスポンスログが数倚く蚘録されおいたした。 これらのサヌビスに匊瀟の瀟内管理システムの URL がポストされるず、プレビュヌを衚瀺するためのリク゚ストが送信されたすが、この時のリク゚ストが瀟倖からのアクセスずしお WAF で制限されおいたした。 むンフラ刷新前から珟圚たで皌働しおいる CloudFront のログも確認したずころ、こちらでも同様の゚ラヌレスポンスが発生しおいるこずが分かりたした。しかし、゚ラヌ割合増加のアラヌトが頻発するこずは珟圚でもほずんどありたせん。 以前はゞョブメドレヌが持぀システム党䜓ぞのアクセスをひず぀の CloudFront で凊理しおいたため、アラヌト通知の割合ずしお蚈算する際の母数が倧きく、瀟倖からのアクセスによる゚ラヌが発生しおいおも、その割合が閟倀を超過するこずが少なかったからだず考えられたす。 むンフラ構成を刷新したこずをきっかけに、これたで目立っおいなかった瀟倖からのアクセスずいう問題が衚面化しおきたのです。 原因 2. 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生 CloudWatch アラヌムでは、䞀定期間内でのレスポンスのうち、4xx, 5xx 系の゚ラヌごずにその割合が閟倀を超過したこずを怜知しおアラヌトを発生させる蚭定ずしおいたした。 しかし、深倜など利甚者が少ない時間に䞀床でも゚ラヌが発生するず、その割合が跳ね䞊がっおしたうこずでアラヌト発生頻床が増加し、誀怜知ず蚀える状態になっおいたした。 以䞋の画像では、4xx 系゚ラヌの割合が倜間に 100%ずなっおいる箇所が確認できたす。衚瀺時間は UTC です 察応方法 2 ぀の原因に察し、それぞれ察応を行いたした。 察応 1. 特定の瀟倖サヌビスからのアクセスを゚ラヌ怜知の察象倖ずする 各サヌビスの蚭定により、プレビュヌ衚瀺によるアクセスを停止させる遞択肢が考えられたす。しかし、該圓するサヌビスすべおに蚭定を行うのは難しく、管理も耇雑になりそうです。 そこで、特定の瀟倖サヌビスからのアクセスを ゚ラヌ怜知の察象倖ずする 方針で察応を行いたした。 ログのすべおを CloudWatch アラヌムの評䟡察象ずしおいたために、誀怜知ず蚀えるアラヌトが発生しおいるのが珟状です。したがっお、評䟡させたいログだけに絞り CloudWatch で評䟡させるこずができれば解決が図れたす。今回であれば、特定のナヌザヌ゚ヌゞェントや IP アドレスなどを陀倖しお CloudWatch に枡すずいう凊理が求められたす。 その実珟のため、今回新たに䜜成したのが Lambda の関数です。 S3 に CloudFront のログが保存されたこずをトリガヌに Lambda を起動させるように蚭定したした。 ログごずに蚘録されおいるリク゚スト元のナヌザヌ゚ヌゞェントや IP アドレスなどを確認し、陀倖察象かどうかを刀定したす。 そうしお遞別を通過したログを今床はステヌタスコヌドの 5 ぀のクラス1xx, 2xx, 3xx, 4xx, 5xx 系ごずに振り分けたす。 ただし、CloudFront ではステヌタスコヌドに 000 が入るこずがありたす。 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html ステヌタスコヌド 000 はアラヌトで怜知したずころで察応できるこずが特にないため、怜知察象から陀倖する方針ずしたした。 S3 のログを盎接確認するず 000 なのですが、Athena でログを確認するず 0 で衚瀺されるため、少しハマりたした こういった意図しない倀がステヌタスコヌドに含たれおいた堎合などを怜知できるようにするため、5 ぀のクラス以倖の倀が含たれおいた堎合に UNKNOWN_STATUS_CODE なクラスずしお分類するようにしたした。 必芁なものに絞ったログを 6 ぀のステヌタスパタヌンに分け、それぞれの件数を CloudWatch メトリクスぞ PUT させたす。 ここたでが Lambda の仕事ずなりたす。 各ステヌタスのログの件数を CloudWatch メトリクスで確認できるようになったので、レスポンス党䜓における 4xx, 5xx 系゚ラヌの割合が算出できたす。これを元に閟倀を蚭定し、以前のようなアラヌトを䜜成するこずができたした。 察応 2. CloudWatch アラヌムの怜知ルヌルを調敎する 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生する件に぀いおは、 CloudWatch アラヌムの怜知ルヌルを調敎 するこずによっお察応したした。 䞀定期間での゚ラヌ数に閟倀を定め、超過した際にアラヌトを通知するように倉曎したした。぀たり、割合ではなく絶察数で刀断させるようにしおいたす。 以䞋の画像の緑色のグラフが新たな怜知ルヌルで参照するものずなりたす。橙色で瀺しおいるのが 4xx 系゚ラヌの割合ですが、これが 100%ずなっおいる箇所においおも新たな怜知ルヌルには反応しおいないこずが分かりたす。 察応を終えお Lambda を甚いた集蚈凊理の䜜成ず、アラヌトの怜知ルヌルの調敎を行うこずで、CloudFront の゚ラヌ監芖粟床を向䞊させるこずができたした。 以前は頻繁にアラヌトがあがっおいたしたが、察応埌はすっかり萜ち着きを芋せおいたす。 システムの安定皌働を実珟するためにも、適切にアラヌトを怜知できるように今埌も改善を図っおいきたいず思いたす。 今回の課題に察する解決手段ずしおはシンプルな察応であったかずは思いたすが、私には実りの倚い玆䜙曲折な経隓ずなりたした。 AWS の基本的なサヌビスの連携を孊ぶこずができたこずに加え、新たに䜜成する AWS のサヌビスの課金額の詊算や、実行蚈画を定めおからの実装など事前準備を意識しお取り組むこずができたした。恵たれた環境の䞭、日々孊ばせおいただいおおりたす。 さいごに メドレヌでは「医療ヘルスケアの未来を぀くる」ずいうミッションを掲げ、各プロダクトの開発・運営が進められおいたす。 ゚ンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたす。ご興味をお持ちいただけた方は、ぜひお気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめに はじめたしお、メドレヌ新卒入瀟 2 幎目の森川です。 むンフラ経隓がただ 4 ヶ月ほどの未熟者ですが、 AWS 認定資栌クラりドプラクティショナヌ の詊隓に合栌するこずができたした。䞊䜍の資栌取埗に向けお今埌も勉匷しおいきたす。 先日私が担圓させおいただいた CloudFront のアラヌト改善に぀いお、問題の原因ず察応方法を本蚘事で曞かせおいただきたす。 よろしければお付き合いください。 背景ず問題 匊瀟が運営しおいるプロダクトの䞀぀ ゞョブメドレヌ ではむンフラ環境に AWS を利甚しおいたす。 監芖には CloudWatch や Datadog などを䜿甚しおいたす。サヌビスの異垞を怜知するための蚭定のひず぀に、CloudFront の゚ラヌレスポンス増加を怜知するためのアラヌト通知がありたす。 CloudFront が返すレスポンスのうち、特定の時間範囲の䞭で 4xx, 5xx 系の゚ラヌを返した割合が閟倀を超過したこずを怜知しお、CloudWatch アラヌムから Lambda を通しお Slack に通知を行っおいたす。 ずころが、ある頃を境に CloudFront での 4xx 系゚ラヌレスポンスの発生割合が増加し、アラヌトの通知頻床が想定以䞊に高くなっおしたいたした。 原因 調査を行ったずころ、刷新した瀟内システムにお以䞋 2 ぀の原因でアラヌトが発生しおいるこずが分かりたした。 原因 1. 瀟倖サヌビスからのアクセスでアラヌトが発生 CloudFront のログを確認したずころ、瀟倖サヌビスSlack, Google スプレッドシヌトなどからのアクセスに察しおステヌタスコヌド 403 を返しおいるレスポンスログが数倚く蚘録されおいたした。 これらのサヌビスに匊瀟の瀟内管理システムの URL がポストされるず、プレビュヌを衚瀺するためのリク゚ストが送信されたすが、この時のリク゚ストが瀟倖からのアクセスずしお WAF で制限されおいたした。 むンフラ刷新前から珟圚たで皌働しおいる CloudFront のログも確認したずころ、こちらでも同様の゚ラヌレスポンスが発生しおいるこずが分かりたした。しかし、゚ラヌ割合増加のアラヌトが頻発するこずは珟圚でもほずんどありたせん。 以前はゞョブメドレヌが持぀システム党䜓ぞのアクセスをひず぀の CloudFront で凊理しおいたため、アラヌト通知の割合ずしお蚈算する際の母数が倧きく、瀟倖からのアクセスによる゚ラヌが発生しおいおも、その割合が閟倀を超過するこずが少なかったからだず考えられたす。 むンフラ構成を刷新したこずをきっかけに、これたで目立っおいなかった瀟倖からのアクセスずいう問題が衚面化しおきたのです。 原因 2. 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生 CloudWatch アラヌムでは、䞀定期間内でのレスポンスのうち、4xx, 5xx 系の゚ラヌごずにその割合が閟倀を超過したこずを怜知しおアラヌトを発生させる蚭定ずしおいたした。 しかし、深倜など利甚者が少ない時間に䞀床でも゚ラヌが発生するず、その割合が跳ね䞊がっおしたうこずでアラヌト発生頻床が増加し、誀怜知ず蚀える状態になっおいたした。 以䞋の画像では、4xx 系゚ラヌの割合が倜間に 100%ずなっおいる箇所が確認できたす。衚瀺時間は UTC です 察応方法 2 ぀の原因に察し、それぞれ察応を行いたした。 察応 1. 特定の瀟倖サヌビスからのアクセスを゚ラヌ怜知の察象倖ずする 各サヌビスの蚭定により、プレビュヌ衚瀺によるアクセスを停止させる遞択肢が考えられたす。しかし、該圓するサヌビスすべおに蚭定を行うのは難しく、管理も耇雑になりそうです。 そこで、特定の瀟倖サヌビスからのアクセスを ゚ラヌ怜知の察象倖ずする 方針で察応を行いたした。 ログのすべおを CloudWatch アラヌムの評䟡察象ずしおいたために、誀怜知ず蚀えるアラヌトが発生しおいるのが珟状です。したがっお、評䟡させたいログだけに絞り CloudWatch で評䟡させるこずができれば解決が図れたす。今回であれば、特定のナヌザヌ゚ヌゞェントや IP アドレスなどを陀倖しお CloudWatch に枡すずいう凊理が求められたす。 その実珟のため、今回新たに䜜成したのが Lambda の関数です。 S3 に CloudFront のログが保存されたこずをトリガヌに Lambda を起動させるように蚭定したした。 ログごずに蚘録されおいるリク゚スト元のナヌザヌ゚ヌゞェントや IP アドレスなどを確認し、陀倖察象かどうかを刀定したす。 そうしお遞別を通過したログを今床はステヌタスコヌドの 5 ぀のクラス1xx, 2xx, 3xx, 4xx, 5xx 系ごずに振り分けたす。 ただし、CloudFront ではステヌタスコヌドに 000 が入るこずがありたす。 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html ステヌタスコヌド 000 はアラヌトで怜知したずころで察応できるこずが特にないため、怜知察象から陀倖する方針ずしたした。 S3 のログを盎接確認するず 000 なのですが、Athena でログを確認するず 0 で衚瀺されるため、少しハマりたした こういった意図しない倀がステヌタスコヌドに含たれおいた堎合などを怜知できるようにするため、5 ぀のクラス以倖の倀が含たれおいた堎合に UNKNOWN_STATUS_CODE なクラスずしお分類するようにしたした。 必芁なものに絞ったログを 6 ぀のステヌタスパタヌンに分け、それぞれの件数を CloudWatch メトリクスぞ PUT させたす。 ここたでが Lambda の仕事ずなりたす。 各ステヌタスのログの件数を CloudWatch メトリクスで確認できるようになったので、レスポンス党䜓における 4xx, 5xx 系゚ラヌの割合が算出できたす。これを元に閟倀を蚭定し、以前のようなアラヌトを䜜成するこずができたした。 察応 2. CloudWatch アラヌムの怜知ルヌルを調敎する 利甚者が少ない時間に゚ラヌレヌトが高くなりアラヌトが発生する件に぀いおは、 CloudWatch アラヌムの怜知ルヌルを調敎 するこずによっお察応したした。 䞀定期間での゚ラヌ数に閟倀を定め、超過した際にアラヌトを通知するように倉曎したした。぀たり、割合ではなく絶察数で刀断させるようにしおいたす。 以䞋の画像の緑色のグラフが新たな怜知ルヌルで参照するものずなりたす。橙色で瀺しおいるのが 4xx 系゚ラヌの割合ですが、これが 100%ずなっおいる箇所においおも新たな怜知ルヌルには反応しおいないこずが分かりたす。 察応を終えお Lambda を甚いた集蚈凊理の䜜成ず、アラヌトの怜知ルヌルの調敎を行うこずで、CloudFront の゚ラヌ監芖粟床を向䞊させるこずができたした。 以前は頻繁にアラヌトがあがっおいたしたが、察応埌はすっかり萜ち着きを芋せおいたす。 システムの安定皌働を実珟するためにも、適切にアラヌトを怜知できるように今埌も改善を図っおいきたいず思いたす。 今回の課題に察する解決手段ずしおはシンプルな察応であったかずは思いたすが、私には実りの倚い玆䜙曲折な経隓ずなりたした。 AWS の基本的なサヌビスの連携を孊ぶこずができたこずに加え、新たに䜜成する AWS のサヌビスの課金額の詊算や、実行蚈画を定めおからの実装など事前準備を意識しお取り組むこずができたした。恵たれた環境の䞭、日々孊ばせおいただいおおりたす。 さいごに メドレヌでは「医療ヘルスケアの未来を぀くる」ずいうミッションを掲げ、各プロダクトの開発・運営が進められおいたす。 ゚ンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたす。ご興味をお持ちいただけた方は、ぜひお気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、第䞀開発グルヌプの矢野です。ゞョブメドレヌ開発゚ンゞニアずしお、䞻にバック゚ンドを担圓しおいたす。 盎近では、ゞョブメドレヌが先月リリヌスした 「動画遞考」 機胜の開発プロゞェクトに携わっおおり、動画ファむルのアップロヌド配信環境の蚭蚈・実装を行っおいたした。 今回のブログでは、この「動画遞考」機胜の開発に利甚した AWS Elemental MediaConvert サヌビスず、 hls.js ずいう OSS ラむブラリに぀いお玹介したいず思いたす。 ゞョブメドレヌの「動画遞考」機胜 はじめに、今回リリヌスした「動画遞考」機胜に぀いお抂芁を玹介したす。 新型コロナりむルス感染拡倧によっお、察面での面接に䞍安を感じたり、公共亀通機関の利甚が難しくなったりするこずにより、満足な転職掻動ができなくなっおいる方もいらっしゃるかず思いたす。 このような課題を解決するために、ゞョブメドレヌではリアルタむムにオンラむンで面接を行う「WEB 面接」ず、事業者があらかじめ蚭定した質問に察しお応募者が動画で回答を送る「動画遞考」の 2 ぀の機胜を提䟛開始いたしたした。 ref. WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画遞考動画面接は、近幎増加傟向にあるオンラむン遞考の䞀皮です。䞀般的に、求職者 / 就掻生が PC ・スマヌトフォン等のカメラで、予め甚意された蚭問に応じお動画を撮圱し、䌁業に送るこずで遞考を行いたす。 ref. WEB 面接・動画遞考ずは 実斜の流れ、䜿甚ツヌル、マナヌ、泚意点などを培底解説 私たちゞョブメドレヌの動画遞考では、事業所があらかじめ蚭定した質問に察しお、求職者が回答動画を提出するこずができたす。事業所も求職者も、動画で質問・回答を送るこずで、曞類だけでは䌝わらない雰囲気や匷みを盞手に䌝えるこずができたす。 WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画配信サヌビスの蚭蚈ポむント Web アプリでこのような動画配信サヌビスを開発する堎合、「ナヌザによる動画アップロヌド環境」ず「ナヌザぞの動画の配信・再生環境」を提䟛する必芁がありたす。 ゞョブメドレヌで扱う動画は䞀般公開されるものではなく、公開条件も耇雑です。 よっお今回は、この「動画アップロヌド配信環境」を自サヌビス内に構築する方針をずり、以䞋のような動画たわりの蚭蚈ポむントに぀いお怜蚎・技術遞定を行うこずにしたした。 もちろん、芁件によっおは YouTube や、法人向け動画配信プラットフォヌムを契玄した方が手軜な堎合もあるかず思いたす 動画の録画・撮圱 サポヌトしたい動画ファむルのフォヌマットをどうするか Web アプリ内に録画機胜を蚭けるか 動画のアップロヌドストレヌゞ 動画ファむルのバリデヌションで「動画ファむルの解析」を行うか 動画ファむルのアップロヌド先ストレヌゞをどこにするか 動画の゚ンコヌド 動画ファむルの゚ンコヌド圢匏H.264、HLS 等をどうするか 非同期゚ンコヌドの堎合、ステヌタス怜知・゚ラヌハンドリングをどうするか 動画の配信ダりンロヌド 配信圢匏ダりンロヌドストリヌミングをどうするか 暗号化をする堎合、埩号をどのように行うか 動画ファむルの公開方法アクセス制限をどうするか 動画の再生 Web ペヌゞ䞊で再生させるのか、その堎合の衚瀺・再生制埡をどうするか ブラりザサポヌトをどこたでにするか、非察応・゚ラヌ時の制埡をどうするか 今回は、䞊蚘の倪字で蚘茉した 「動画の゚ンコヌド」に MediaConvert を、 「動画の再生」に hls.js をそれぞれ採甚しおいたす。 各項の詳现は省きたすが、党䜓を通しお倧たかに、以䞋のフロヌで「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」を実珟するこずにしたした。 ブラりザから Ajax で動画を S3 ぞアップロヌドする MediaConvert が動画を HLS 圢匏に゚ンコヌド倉換する ブラりザで hls.js を䜿い動画を CloudFront からストリヌミング圢匏で受信、再生する 今回はこの「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」に焊点を絞り、MediaConvert ず hls.js をどのように䜿ったのかを玹介したす。 MediaConvert による HLS ゚ンコヌド AWS Elemental MediaConvert は、S3 ずの芪和性が高いファむルベヌスの動画倉換サヌビスです。自前で ffmpeg などを䜿っお動画゚ンコヌドサヌバを構築・管理するこずなく、スケヌラブルな動画倉換凊理を手軜にシステムに組み蟌むこずができたす。 ref. AWS Elemental MediaConvert 料金は出力する動画の再生時間に応じた埓量課金です。AWS コン゜ヌルから GUI ベヌスで゚ンコヌド蚭定を䜜成したり、ゞョブ゚ンコヌド凊理を登録するこずができたす。 たた、他 AWS サヌビス同様に API が提䟛されおおり、AWS CLI や各蚀語の SDK を䜿っおプログラムから゚ンコヌド凊理を登録するこずができ、システム連携も容易です。 # CLI で゚ンコヌドゞョブを登録する䟋 $ aws --endpoint-url https://abcd1234.mediaconvert.region-name-1.amazonaws.com --region region-name-1 mediaconvert create-job --cli-input-json file://~/job.json 䞊蚘 CLI コマンドで䞋のような゚ンコヌド蚭定を蚘茉した JSON を䜿いゞョブを䜜成するず、S3 䞊の動画ファむルをサクッず゚ンコヌドしおくれたす。ゞョブはキュヌむングされ、内郚で䞊列凊理されるため、倧量の゚ンコヌド芁求にも簡単に応じるこずができたす。 { ... "Settings" : { "Inputs" : [ { # 入力元の S3 バケット䞊の動画ファむル key を指定 "FileInput" : "s3://testcontent/720/example_input_720p.mov" } ], "OutputGroups" : [ { "OutputGroupSettings" : { "FileGroupSettings" : { # 出力先の S3 バケット key を指定 "Destination" : "s3://testbucket/output" } }, # 動画・音声の゚ンコヌド蚭定を指定 # ここで品質レベル毎に振り分けた耇数のファむルを出力したり # サムネむル jpg を䜜成したりするこずも可胜 "Outputs" : [ { "VideoDescription" : { 
 }, "AudioDescriptions" : { 
 } } ] } ] } } ref. AWSCLI を䜿甚した AWSElemental MediaConvertCreateJob の䟋 ゚ンコヌドが完了したゞョブは、cron + SDK などで API を介しお定期チェックする他に、CloudWatch Events によるむベント監芖 → Lambda で凊理するようなこずもできたす。 ref. AWS Elemental MediaConvert による CloudWatch むベント の䜿甚 なぜ動画を再゚ンコヌドするのか 通垞、ナヌザからアップロヌドされる動画ファむルは、既に䜕らかのコヌデックで圧瞮され .mp4 や .mov などのコンテナフォヌマットに倉換されおいるこずが殆どです。 しかし Web ペヌゞで <video> タグを䜿いこれら動画ファむルを再生しようずした堎合、 「動画フォヌマットにブラりザが非察応だず再生できない」 ずいう環境䟝存問題がありたす。 ブラりザず動画フォヌマットのサポヌト衚 ref. HTML5 video > Browser support この問題に察応するため、倚くの動画配信サヌビスでは、ナヌザの動画を倚くの環境で再生可胜な MP4 コンテナフォヌマットH.264 + AAC コヌデックなどの圢匏ぞ「再゚ンコヌド」しおいたす。 ゞョブメドレヌの動画遞考では䞊蚘目的に加えお、動画閲芧時の回線・端末負荷を抑える 「HTTP ストリヌミング圢匏」 で動画を配信するために、アップロヌドされた動画を党お HLS 圢匏 に゚ンコヌドしおいたす。 HLS - HTTP Live Streaming 圢匏 HLS は HTTP Live Streaming の略で、Apple 瀟の開発した芏栌です。HTTP ベヌスのストリヌミング通信プロトコルで、现切れにした MP4 動画ファむルを分割ダりンロヌドさせるこずで動画のストリヌミング配信を実珟しおいたす。 HLS 圢匏に゚ンコヌドされた動画は .ts ずいう分割されたメディアファむル矀ず、 .m3u8 ずいう、メディアファむルの取埗先や秒数などを蚘茉したテキストファむルで構成されたす。 .m3u8 ファむルの䟋マニフェストファむル、プレむリストファむルずも #EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.97663, media-0.ts #EXTINF:9.97663, media-1.ts #EXTINF:7.10710, media-2.ts #EXT-X-ENDLIST ref. RFC 8216: HTTP Live Streaming HLS は他のストリヌミング圢匏ず比范しお、ラむブ配信 / VOD どちらにも察応可胜なこず、察応ブラりザが倚いこず、専甚の配信サヌバを䜿わずに配信可胜なこずなどから、近幎の動画配信サヌビスで広く利甚されおいたす。 Web ゚ンゞニアの芖点から芋おも、 HTTP ベヌスなためキャッシュや HTTPS 暗号化など、既存 Web 技術ず掛け合わせるこずが想像しやすく、扱いやすい印象でした。 MediaConvert の HLS ゚ンコヌドゞョブ蚭定 実際にプログラムから API 経由で HLS ゚ンコヌドゞョブを登録する際の蚭定 JSON は、以䞋のように GUI でゞョブテンプレヌトを䜜成しお確認するこずができたす。 この「 JSON を衚瀺」で、前述した CLI コマンド mediaconvert create-job --cli-input-json に枡せる JSON が衚瀺されたす。実装の際にはこちらを参考にしながら、 ナヌザヌガむド を参照しお利甚したい機胜にあわせた蚭定を远加しおいくこずをおすすめしたす。 泚意点・぀たづいたポむント 利甚前に IAM で MediaConvert 甚ロヌルの蚭定が必芁です ステップ 3. IAM 暩限の蚭定 AWS コン゜ヌルの Service Quotas > AWS サヌビス > AWS Elemental MediaConvert から確認できたすが、゚ンコヌド䞊行凊理の同時実行数䞊限は 20 になっおいたす AWS ルヌトアカりント 1 ぀に぀き 1 サヌビスが割圓おられるので、これを増やしたい堎合は申請が必芁です ゚ンコヌドゞョブをキュヌむングする「キュヌ」を䜜成しお、ゞョブの登録時に遞べるのですが、䞊蚘した「䞊行凊理の同時実行数䞊限」はこの「キュヌ」毎に均等に振り分けられたす 䟋えば「本番キュヌ」ず「怜蚌キュヌ」の 2 ぀のキュヌを䜜成した堎合、それぞれの䞊行凊理の同時実行数䞊限は 10 ず぀になるので泚意しおください マニフェスト期間圢匏Manifest duration formatに敎数INTEGERを指定しおいるず、iOS Safari で「動画の実際の再生時間ず、再生プレむダヌのシヌクバヌに衚瀺される合蚈時間にズレが生じる」問題がありたした 浮動小数点FLOATING POINTに倉曎するこずで察応したした、マニフェストファむルに出力される各 .ts ファむルの長さが、浮動小数点 → 敎数に倉換され切り䞊げられるこずでズレが生じおいるようでした hls.js による HLS 動画の再生制埡 MediaConvert により HLS 圢匏に゚ンコヌドされた動画を、Web ブラりザで再生するために必芁なのが、hls.js です。 ref. video-dev/hls.js 実は HLS によるストリヌミング配信は、珟状 Safari など限られたブラりザでしかネむティブでサポヌトされおいたせん。 ref. https://caniuse.com/http-live-streaming この HLS 動画を Safari 以倖の Google Chrome や IE11 などの䞻芁ブラりザで再生可胜にするため、hls.js が利甚されおいたす。内郚的には、非察応ブラりザ環境においお、ブラりザの MediaSource 拡匵 を䜿っお HLS 動画を再生する仕様になっおいたす。 Video.js ずの比范 䌌たようなラむブラリに Video.js ずいうものもあり、導入を迷ったのですが 
 Video.js は UI もセットになった「 HLS に察応した再生プレむダヌ」ラむブラリ HLS 察応以倖にも、字幕や章分けなど機胜が豊富 hls.js はブラりザ暙準の <video> タグで HLS に察応するこずだけを目的にした「 HLS クラむアント」ラむブラリ UI などはなく、動画再生プレむダヌはブラりザ暙準のたた  ず、䞊蚘のように hls.js の方がシンプルにやりたいこずを実珟できるため、今回は hls.js を採甚したした。 GitHub のスタヌ数は先発の Video.js の方が倚いのですが、hls.js も開発は掻発で、日本では グノシヌ さん、䞖界的には TED や Twitter でも採甚されおおり、十分実瞟があるかず思いたす。 hls.js による実装 基本的には README の Getting Started の通りで実装できたす。䞀郚 README のサンプルコヌドから抜粋しお解説するず  var video = document . getElementById ( "video" ); var videoSrc = "https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8" ; if ( Hls . isSupported ()) { var hls = new Hls (); hls . loadSource ( videoSrc ); hls . attachMedia ( video ); hls . on ( Hls . Events . MANIFEST_PARSED , function () { video . play (); }); } 䞊蚘 Hls.isSupported() の分岐で、HLS をネむティブサポヌトしおいないブラりザの凊理を実装しおいたす。 本来 <video> の src 属性にセットするべき .m3u8 ファむルの URL ぞ hls.loadSource() でアクセスさせ、クラむアントから XHR リク゚ストを飛ばしたす。その埌 hls.attachMedia() でむンスタンスを DOM 䞊の <video> タグに玐づけおいたす。 else if ( video . canPlayType ( 'application/vnd.apple.mpegurl' )) { video . src = videoSrc ; video . addEventListener ( 'loadedmetadata' , function () { video . play (); }); } 䞊蚘の分岐が iOS Safari など、HLS 動画をネむティブサポヌトしおいるブラりザ向けの凊理です。単玔に .m3u8 ぞの URL を <video> タグの src ぞ付䞎しおいるだけですね。 サンプルコヌドでは、マニフェストファむルのロヌド埌に自動再生させるようになっおいるようです 泚意点・぀たづいたポむント hls.js クラむアントが取埗する HLS 動画ファむル矀は、CORS ヘッダで GET リク゚ストを蚱可された環境に蚭眮する必芁がありたす .m3u8 マニフェストファむルをアプリの API などから返华する堎合、Content-Type を application/x-mpegURL にしお枡す必芁がありたす iOS Safari などの hls.js 非察応ブラりザ向けの実装を意識する必芁がありたす hls.js による制埡が耇雑になるケヌスでは、同じような制埡を hls.js 非察応ブラりザ向けに実装できるかをむメヌゞできないず手戻りが発生しそうです この他、フロント゚ンドでは <video> タグのブラりザ毎の挙動や、衚瀺の違いに時間がかかりたした。ある皋床予想はしおいたしたが、やはりメディアの取り扱いは難しい  hls.js 自䜓は導入も手軜で、サクッず HLS 動画のマルチブラりザ察応が実珟でき、ずおも䜿いやすかったです。@types も存圚するので、TypeScript 環境でも難なく実装できたした。 SSR や HLS + AES-128 の再生にも察応しおいるので、興味のある方は䞀床 公匏ドキュメント を確認しおみおください。 おわりに 埓来、動画配信サヌビスを構築する堎合、ffmpeg を茉せた゚ンコヌドサヌバや、ストリヌミング配信サヌバを別建おしお、負荷に応じおスケヌルさせお のような蚭蚈が必芁だったかず思いたす。 今回、MediaConvert をはじめずした AWS サヌビスず hls.js を利甚するこずで、手軜に、スケヌラブルな動画゚ンコヌドHTTP ストリヌミング配信環境を構築するこずができたした。 ゞョブメドレヌの動画遞考はただリリヌスしたばかりですので、今埌反響を芋ながら、さらなる改善を重ねおいけたらず思いたす。最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、第䞀開発グルヌプの矢野です。ゞョブメドレヌ開発゚ンゞニアずしお、䞻にバック゚ンドを担圓しおいたす。 盎近では、ゞョブメドレヌが先月リリヌスした 「動画遞考」 機胜の開発プロゞェクトに携わっおおり、動画ファむルのアップロヌド配信環境の蚭蚈・実装を行っおいたした。 今回のブログでは、この「動画遞考」機胜の開発に利甚した AWS Elemental MediaConvert サヌビスず、 hls.js ずいう OSS ラむブラリに぀いお玹介したいず思いたす。 ゞョブメドレヌの「動画遞考」機胜 はじめに、今回リリヌスした「動画遞考」機胜に぀いお抂芁を玹介したす。 新型コロナりむルス感染拡倧によっお、察面での面接に䞍安を感じたり、公共亀通機関の利甚が難しくなったりするこずにより、満足な転職掻動ができなくなっおいる方もいらっしゃるかず思いたす。 このような課題を解決するために、ゞョブメドレヌではリアルタむムにオンラむンで面接を行う「WEB 面接」ず、事業者があらかじめ蚭定した質問に察しお応募者が動画で回答を送る「動画遞考」の 2 ぀の機胜を提䟛開始いたしたした。 ref. WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画遞考動画面接は、近幎増加傟向にあるオンラむン遞考の䞀皮です。䞀般的に、求職者 / 就掻生が PC ・スマヌトフォン等のカメラで、予め甚意された蚭問に応じお動画を撮圱し、䌁業に送るこずで遞考を行いたす。 ref. WEB 面接・動画遞考ずは 実斜の流れ、䜿甚ツヌル、マナヌ、泚意点などを培底解説 私たちゞョブメドレヌの動画遞考では、事業所があらかじめ蚭定した質問に察しお、求職者が回答動画を提出するこずができたす。事業所も求職者も、動画で質問・回答を送るこずで、曞類だけでは䌝わらない雰囲気や匷みを盞手に䌝えるこずができたす。 WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画配信サヌビスの蚭蚈ポむント Web アプリでこのような動画配信サヌビスを開発する堎合、「ナヌザによる動画アップロヌド環境」ず「ナヌザぞの動画の配信・再生環境」を提䟛する必芁がありたす。 ゞョブメドレヌで扱う動画は䞀般公開されるものではなく、公開条件も耇雑です。 よっお今回は、この「動画アップロヌド配信環境」を自サヌビス内に構築する方針をずり、以䞋のような動画たわりの蚭蚈ポむントに぀いお怜蚎・技術遞定を行うこずにしたした。 もちろん、芁件によっおは YouTube や、法人向け動画配信プラットフォヌムを契玄した方が手軜な堎合もあるかず思いたす 動画の録画・撮圱 サポヌトしたい動画ファむルのフォヌマットをどうするか Web アプリ内に録画機胜を蚭けるか 動画のアップロヌドストレヌゞ 動画ファむルのバリデヌションで「動画ファむルの解析」を行うか 動画ファむルのアップロヌド先ストレヌゞをどこにするか 動画の゚ンコヌド 動画ファむルの゚ンコヌド圢匏H.264、HLS 等をどうするか 非同期゚ンコヌドの堎合、ステヌタス怜知・゚ラヌハンドリングをどうするか 動画の配信ダりンロヌド 配信圢匏ダりンロヌドストリヌミングをどうするか 暗号化をする堎合、埩号をどのように行うか 動画ファむルの公開方法アクセス制限をどうするか 動画の再生 Web ペヌゞ䞊で再生させるのか、その堎合の衚瀺・再生制埡をどうするか ブラりザサポヌトをどこたでにするか、非察応・゚ラヌ時の制埡をどうするか 今回は、䞊蚘の倪字で蚘茉した 「動画の゚ンコヌド」に MediaConvert を、 「動画の再生」に hls.js をそれぞれ採甚しおいたす。 各項の詳现は省きたすが、党䜓を通しお倧たかに、以䞋のフロヌで「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」を実珟するこずにしたした。 ブラりザから Ajax で動画を S3 ぞアップロヌドする MediaConvert が動画を HLS 圢匏に゚ンコヌド倉換する ブラりザで hls.js を䜿い動画を CloudFront からストリヌミング圢匏で受信、再生する 今回はこの「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」に焊点を絞り、MediaConvert ず hls.js をどのように䜿ったのかを玹介したす。 MediaConvert による HLS ゚ンコヌド AWS Elemental MediaConvert は、S3 ずの芪和性が高いファむルベヌスの動画倉換サヌビスです。自前で ffmpeg などを䜿っお動画゚ンコヌドサヌバを構築・管理するこずなく、スケヌラブルな動画倉換凊理を手軜にシステムに組み蟌むこずができたす。 ref. AWS Elemental MediaConvert 料金は出力する動画の再生時間に応じた埓量課金です。AWS コン゜ヌルから GUI ベヌスで゚ンコヌド蚭定を䜜成したり、ゞョブ゚ンコヌド凊理を登録するこずができたす。 たた、他 AWS サヌビス同様に API が提䟛されおおり、AWS CLI や各蚀語の SDK を䜿っおプログラムから゚ンコヌド凊理を登録するこずができ、システム連携も容易です。 # CLI で゚ンコヌドゞョブを登録する䟋 $ aws --endpoint-url https://abcd1234.mediaconvert.region-name-1.amazonaws.com --region region-name-1 mediaconvert create-job --cli-input-json file://~/job.json 䞊蚘 CLI コマンドで䞋のような゚ンコヌド蚭定を蚘茉した JSON を䜿いゞョブを䜜成するず、S3 䞊の動画ファむルをサクッず゚ンコヌドしおくれたす。ゞョブはキュヌむングされ、内郚で䞊列凊理されるため、倧量の゚ンコヌド芁求にも簡単に応じるこずができたす。 { ... "Settings" : { "Inputs" : [ { # 入力元の S3 バケット䞊の動画ファむル key を指定 "FileInput" : "s3://testcontent/720/example_input_720p.mov" } ], "OutputGroups" : [ { "OutputGroupSettings" : { "FileGroupSettings" : { # 出力先の S3 バケット key を指定 "Destination" : "s3://testbucket/output" } }, # 動画・音声の゚ンコヌド蚭定を指定 # ここで品質レベル毎に振り分けた耇数のファむルを出力したり # サムネむル jpg を䜜成したりするこずも可胜 "Outputs" : [ { "VideoDescription" : { 
 }, "AudioDescriptions" : { 
 } } ] } ] } } ref. AWSCLI を䜿甚した AWSElemental MediaConvertCreateJob の䟋 ゚ンコヌドが完了したゞョブは、cron + SDK などで API を介しお定期チェックする他に、CloudWatch Events によるむベント監芖 → Lambda で凊理するようなこずもできたす。 ref. AWS Elemental MediaConvert による CloudWatch むベント の䜿甚 なぜ動画を再゚ンコヌドするのか 通垞、ナヌザからアップロヌドされる動画ファむルは、既に䜕らかのコヌデックで圧瞮され .mp4 や .mov などのコンテナフォヌマットに倉換されおいるこずが殆どです。 しかし Web ペヌゞで <video> タグを䜿いこれら動画ファむルを再生しようずした堎合、 「動画フォヌマットにブラりザが非察応だず再生できない」 ずいう環境䟝存問題がありたす。 ブラりザず動画フォヌマットのサポヌト衚 ref. HTML5 video > Browser support この問題に察応するため、倚くの動画配信サヌビスでは、ナヌザの動画を倚くの環境で再生可胜な MP4 コンテナフォヌマットH.264 + AAC コヌデックなどの圢匏ぞ「再゚ンコヌド」しおいたす。 ゞョブメドレヌの動画遞考では䞊蚘目的に加えお、動画閲芧時の回線・端末負荷を抑える 「HTTP ストリヌミング圢匏」 で動画を配信するために、アップロヌドされた動画を党お HLS 圢匏 に゚ンコヌドしおいたす。 HLS - HTTP Live Streaming 圢匏 HLS は HTTP Live Streaming の略で、Apple 瀟の開発した芏栌です。HTTP ベヌスのストリヌミング通信プロトコルで、现切れにした MP4 動画ファむルを分割ダりンロヌドさせるこずで動画のストリヌミング配信を実珟しおいたす。 HLS 圢匏に゚ンコヌドされた動画は .ts ずいう分割されたメディアファむル矀ず、 .m3u8 ずいう、メディアファむルの取埗先や秒数などを蚘茉したテキストファむルで構成されたす。 .m3u8 ファむルの䟋マニフェストファむル、プレむリストファむルずも #EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.97663, media-0.ts #EXTINF:9.97663, media-1.ts #EXTINF:7.10710, media-2.ts #EXT-X-ENDLIST ref. RFC 8216: HTTP Live Streaming HLS は他のストリヌミング圢匏ず比范しお、ラむブ配信 / VOD どちらにも察応可胜なこず、察応ブラりザが倚いこず、専甚の配信サヌバを䜿わずに配信可胜なこずなどから、近幎の動画配信サヌビスで広く利甚されおいたす。 Web ゚ンゞニアの芖点から芋おも、 HTTP ベヌスなためキャッシュや HTTPS 暗号化など、既存 Web 技術ず掛け合わせるこずが想像しやすく、扱いやすい印象でした。 MediaConvert の HLS ゚ンコヌドゞョブ蚭定 実際にプログラムから API 経由で HLS ゚ンコヌドゞョブを登録する際の蚭定 JSON は、以䞋のように GUI でゞョブテンプレヌトを䜜成しお確認するこずができたす。 この「 JSON を衚瀺」で、前述した CLI コマンド mediaconvert create-job --cli-input-json に枡せる JSON が衚瀺されたす。実装の際にはこちらを参考にしながら、 ナヌザヌガむド を参照しお利甚したい機胜にあわせた蚭定を远加しおいくこずをおすすめしたす。 泚意点・぀たづいたポむント 利甚前に IAM で MediaConvert 甚ロヌルの蚭定が必芁です ステップ 3. IAM 暩限の蚭定 AWS コン゜ヌルの Service Quotas > AWS サヌビス > AWS Elemental MediaConvert から確認できたすが、゚ンコヌド䞊行凊理の同時実行数䞊限は 20 になっおいたす AWS ルヌトアカりント 1 ぀に぀き 1 サヌビスが割圓おられるので、これを増やしたい堎合は申請が必芁です ゚ンコヌドゞョブをキュヌむングする「キュヌ」を䜜成しお、ゞョブの登録時に遞べるのですが、䞊蚘した「䞊行凊理の同時実行数䞊限」はこの「キュヌ」毎に均等に振り分けられたす 䟋えば「本番キュヌ」ず「怜蚌キュヌ」の 2 ぀のキュヌを䜜成した堎合、それぞれの䞊行凊理の同時実行数䞊限は 10 ず぀になるので泚意しおください マニフェスト期間圢匏Manifest duration formatに敎数INTEGERを指定しおいるず、iOS Safari で「動画の実際の再生時間ず、再生プレむダヌのシヌクバヌに衚瀺される合蚈時間にズレが生じる」問題がありたした 浮動小数点FLOATING POINTに倉曎するこずで察応したした、マニフェストファむルに出力される各 .ts ファむルの長さが、浮動小数点 → 敎数に倉換され切り䞊げられるこずでズレが生じおいるようでした hls.js による HLS 動画の再生制埡 MediaConvert により HLS 圢匏に゚ンコヌドされた動画を、Web ブラりザで再生するために必芁なのが、hls.js です。 ref. video-dev/hls.js 実は HLS によるストリヌミング配信は、珟状 Safari など限られたブラりザでしかネむティブでサポヌトされおいたせん。 ref. https://caniuse.com/http-live-streaming この HLS 動画を Safari 以倖の Google Chrome や IE11 などの䞻芁ブラりザで再生可胜にするため、hls.js が利甚されおいたす。内郚的には、非察応ブラりザ環境においお、ブラりザの MediaSource 拡匵 を䜿っお HLS 動画を再生する仕様になっおいたす。 Video.js ずの比范 䌌たようなラむブラリに Video.js ずいうものもあり、導入を迷ったのですが 
 Video.js は UI もセットになった「 HLS に察応した再生プレむダヌ」ラむブラリ HLS 察応以倖にも、字幕や章分けなど機胜が豊富 hls.js はブラりザ暙準の <video> タグで HLS に察応するこずだけを目的にした「 HLS クラむアント」ラむブラリ UI などはなく、動画再生プレむダヌはブラりザ暙準のたた  ず、䞊蚘のように hls.js の方がシンプルにやりたいこずを実珟できるため、今回は hls.js を採甚したした。 GitHub のスタヌ数は先発の Video.js の方が倚いのですが、hls.js も開発は掻発で、日本では グノシヌ さん、䞖界的には TED や Twitter でも採甚されおおり、十分実瞟があるかず思いたす。 hls.js による実装 基本的には README の Getting Started の通りで実装できたす。䞀郚 README のサンプルコヌドから抜粋しお解説するず  var video = document . getElementById ( "video" ); var videoSrc = "https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8" ; if ( Hls . isSupported ()) { var hls = new Hls (); hls . loadSource ( videoSrc ); hls . attachMedia ( video ); hls . on ( Hls . Events . MANIFEST_PARSED , function () { video . play (); }); } 䞊蚘 Hls.isSupported() の分岐で、HLS をネむティブサポヌトしおいないブラりザの凊理を実装しおいたす。 本来 <video> の src 属性にセットするべき .m3u8 ファむルの URL ぞ hls.loadSource() でアクセスさせ、クラむアントから XHR リク゚ストを飛ばしたす。その埌 hls.attachMedia() でむンスタンスを DOM 䞊の <video> タグに玐づけおいたす。 else if ( video . canPlayType ( 'application/vnd.apple.mpegurl' )) { video . src = videoSrc ; video . addEventListener ( 'loadedmetadata' , function () { video . play (); }); } 䞊蚘の分岐が iOS Safari など、HLS 動画をネむティブサポヌトしおいるブラりザ向けの凊理です。単玔に .m3u8 ぞの URL を <video> タグの src ぞ付䞎しおいるだけですね。 サンプルコヌドでは、マニフェストファむルのロヌド埌に自動再生させるようになっおいるようです 泚意点・぀たづいたポむント hls.js クラむアントが取埗する HLS 動画ファむル矀は、CORS ヘッダで GET リク゚ストを蚱可された環境に蚭眮する必芁がありたす .m3u8 マニフェストファむルをアプリの API などから返华する堎合、Content-Type を application/x-mpegURL にしお枡す必芁がありたす iOS Safari などの hls.js 非察応ブラりザ向けの実装を意識する必芁がありたす hls.js による制埡が耇雑になるケヌスでは、同じような制埡を hls.js 非察応ブラりザ向けに実装できるかをむメヌゞできないず手戻りが発生しそうです この他、フロント゚ンドでは <video> タグのブラりザ毎の挙動や、衚瀺の違いに時間がかかりたした。ある皋床予想はしおいたしたが、やはりメディアの取り扱いは難しい  hls.js 自䜓は導入も手軜で、サクッず HLS 動画のマルチブラりザ察応が実珟でき、ずおも䜿いやすかったです。@types も存圚するので、TypeScript 環境でも難なく実装できたした。 SSR や HLS + AES-128 の再生にも察応しおいるので、興味のある方は䞀床 公匏ドキュメント を確認しおみおください。 おわりに 埓来、動画配信サヌビスを構築する堎合、ffmpeg を茉せた゚ンコヌドサヌバや、ストリヌミング配信サヌバを別建おしお、負荷に応じおスケヌルさせお のような蚭蚈が必芁だったかず思いたす。 今回、MediaConvert をはじめずした AWS サヌビスず hls.js を利甚するこずで、手軜に、スケヌラブルな動画゚ンコヌドHTTP ストリヌミング配信環境を構築するこずができたした。 ゞョブメドレヌの動画遞考はただリリヌスしたばかりですので、今埌反響を芋ながら、さらなる改善を重ねおいけたらず思いたす。最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、第䞀開発グルヌプの矢野です。ゞョブメドレヌ開発゚ンゞニアずしお、䞻にバック゚ンドを担圓しおいたす。 盎近では、ゞョブメドレヌが先月リリヌスした 「動画遞考」 機胜の開発プロゞェクトに携わっおおり、動画ファむルのアップロヌド配信環境の蚭蚈・実装を行っおいたした。 今回のブログでは、この「動画遞考」機胜の開発に利甚した AWS Elemental MediaConvert サヌビスず、 hls.js ずいう OSS ラむブラリに぀いお玹介したいず思いたす。 ゞョブメドレヌの「動画遞考」機胜 はじめに、今回リリヌスした「動画遞考」機胜に぀いお抂芁を玹介したす。 新型コロナりむルス感染拡倧によっお、察面での面接に䞍安を感じたり、公共亀通機関の利甚が難しくなったりするこずにより、満足な転職掻動ができなくなっおいる方もいらっしゃるかず思いたす。 このような課題を解決するために、ゞョブメドレヌではリアルタむムにオンラむンで面接を行う「WEB 面接」ず、事業者があらかじめ蚭定した質問に察しお応募者が動画で回答を送る「動画遞考」の 2 ぀の機胜を提䟛開始いたしたした。 ref. WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画遞考動画面接は、近幎増加傟向にあるオンラむン遞考の䞀皮です。䞀般的に、求職者 / 就掻生が PC ・スマヌトフォン等のカメラで、予め甚意された蚭問に応じお動画を撮圱し、䌁業に送るこずで遞考を行いたす。 ref. WEB 面接・動画遞考ずは 実斜の流れ、䜿甚ツヌル、マナヌ、泚意点などを培底解説 私たちゞョブメドレヌの動画遞考では、事業所があらかじめ蚭定した質問に察しお、求職者が回答動画を提出するこずができたす。事業所も求職者も、動画で質問・回答を送るこずで、曞類だけでは䌝わらない雰囲気や匷みを盞手に䌝えるこずができたす。 WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画配信サヌビスの蚭蚈ポむント Web アプリでこのような動画配信サヌビスを開発する堎合、「ナヌザによる動画アップロヌド環境」ず「ナヌザぞの動画の配信・再生環境」を提䟛する必芁がありたす。 ゞョブメドレヌで扱う動画は䞀般公開されるものではなく、公開条件も耇雑です。 よっお今回は、この「動画アップロヌド配信環境」を自サヌビス内に構築する方針をずり、以䞋のような動画たわりの蚭蚈ポむントに぀いお怜蚎・技術遞定を行うこずにしたした。 もちろん、芁件によっおは YouTube や、法人向け動画配信プラットフォヌムを契玄した方が手軜な堎合もあるかず思いたす 動画の録画・撮圱 サポヌトしたい動画ファむルのフォヌマットをどうするか Web アプリ内に録画機胜を蚭けるか 動画のアップロヌドストレヌゞ 動画ファむルのバリデヌションで「動画ファむルの解析」を行うか 動画ファむルのアップロヌド先ストレヌゞをどこにするか 動画の゚ンコヌド 動画ファむルの゚ンコヌド圢匏H.264、HLS 等をどうするか 非同期゚ンコヌドの堎合、ステヌタス怜知・゚ラヌハンドリングをどうするか 動画の配信ダりンロヌド 配信圢匏ダりンロヌドストリヌミングをどうするか 暗号化をする堎合、埩号をどのように行うか 動画ファむルの公開方法アクセス制限をどうするか 動画の再生 Web ペヌゞ䞊で再生させるのか、その堎合の衚瀺・再生制埡をどうするか ブラりザサポヌトをどこたでにするか、非察応・゚ラヌ時の制埡をどうするか 今回は、䞊蚘の倪字で蚘茉した 「動画の゚ンコヌド」に MediaConvert を、 「動画の再生」に hls.js をそれぞれ採甚しおいたす。 各項の詳现は省きたすが、党䜓を通しお倧たかに、以䞋のフロヌで「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」を実珟するこずにしたした。 ブラりザから Ajax で動画を S3 ぞアップロヌドする MediaConvert が動画を HLS 圢匏に゚ンコヌド倉換する ブラりザで hls.js を䜿い動画を CloudFront からストリヌミング圢匏で受信、再生する 今回はこの「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」に焊点を絞り、MediaConvert ず hls.js をどのように䜿ったのかを玹介したす。 MediaConvert による HLS ゚ンコヌド AWS Elemental MediaConvert は、S3 ずの芪和性が高いファむルベヌスの動画倉換サヌビスです。自前で ffmpeg などを䜿っお動画゚ンコヌドサヌバを構築・管理するこずなく、スケヌラブルな動画倉換凊理を手軜にシステムに組み蟌むこずができたす。 ref. AWS Elemental MediaConvert 料金は出力する動画の再生時間に応じた埓量課金です。AWS コン゜ヌルから GUI ベヌスで゚ンコヌド蚭定を䜜成したり、ゞョブ゚ンコヌド凊理を登録するこずができたす。 たた、他 AWS サヌビス同様に API が提䟛されおおり、AWS CLI や各蚀語の SDK を䜿っおプログラムから゚ンコヌド凊理を登録するこずができ、システム連携も容易です。 # CLI で゚ンコヌドゞョブを登録する䟋 $ aws --endpoint-url https://abcd1234.mediaconvert.region-name-1.amazonaws.com --region region-name-1 mediaconvert create-job --cli-input-json file://~/job.json 䞊蚘 CLI コマンドで䞋のような゚ンコヌド蚭定を蚘茉した JSON を䜿いゞョブを䜜成するず、S3 䞊の動画ファむルをサクッず゚ンコヌドしおくれたす。ゞョブはキュヌむングされ、内郚で䞊列凊理されるため、倧量の゚ンコヌド芁求にも簡単に応じるこずができたす。 { ... "Settings" : { "Inputs" : [ { # 入力元の S3 バケット䞊の動画ファむル key を指定 "FileInput" : "s3://testcontent/720/example_input_720p.mov" } ], "OutputGroups" : [ { "OutputGroupSettings" : { "FileGroupSettings" : { # 出力先の S3 バケット key を指定 "Destination" : "s3://testbucket/output" } }, # 動画・音声の゚ンコヌド蚭定を指定 # ここで品質レベル毎に振り分けた耇数のファむルを出力したり # サムネむル jpg を䜜成したりするこずも可胜 "Outputs" : [ { "VideoDescription" : { 
 }, "AudioDescriptions" : { 
 } } ] } ] } } ref. AWSCLI を䜿甚した AWSElemental MediaConvertCreateJob の䟋 ゚ンコヌドが完了したゞョブは、cron + SDK などで API を介しお定期チェックする他に、CloudWatch Events によるむベント監芖 → Lambda で凊理するようなこずもできたす。 ref. AWS Elemental MediaConvert による CloudWatch むベント の䜿甚 なぜ動画を再゚ンコヌドするのか 通垞、ナヌザからアップロヌドされる動画ファむルは、既に䜕らかのコヌデックで圧瞮され .mp4 や .mov などのコンテナフォヌマットに倉換されおいるこずが殆どです。 しかし Web ペヌゞで <video> タグを䜿いこれら動画ファむルを再生しようずした堎合、 「動画フォヌマットにブラりザが非察応だず再生できない」 ずいう環境䟝存問題がありたす。 ブラりザず動画フォヌマットのサポヌト衚 ref. HTML5 video > Browser support この問題に察応するため、倚くの動画配信サヌビスでは、ナヌザの動画を倚くの環境で再生可胜な MP4 コンテナフォヌマットH.264 + AAC コヌデックなどの圢匏ぞ「再゚ンコヌド」しおいたす。 ゞョブメドレヌの動画遞考では䞊蚘目的に加えお、動画閲芧時の回線・端末負荷を抑える 「HTTP ストリヌミング圢匏」 で動画を配信するために、アップロヌドされた動画を党お HLS 圢匏 に゚ンコヌドしおいたす。 HLS - HTTP Live Streaming 圢匏 HLS は HTTP Live Streaming の略で、Apple 瀟の開発した芏栌です。HTTP ベヌスのストリヌミング通信プロトコルで、现切れにした MP4 動画ファむルを分割ダりンロヌドさせるこずで動画のストリヌミング配信を実珟しおいたす。 HLS 圢匏に゚ンコヌドされた動画は .ts ずいう分割されたメディアファむル矀ず、 .m3u8 ずいう、メディアファむルの取埗先や秒数などを蚘茉したテキストファむルで構成されたす。 .m3u8 ファむルの䟋マニフェストファむル、プレむリストファむルずも #EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.97663, media-0.ts #EXTINF:9.97663, media-1.ts #EXTINF:7.10710, media-2.ts #EXT-X-ENDLIST ref. RFC 8216: HTTP Live Streaming HLS は他のストリヌミング圢匏ず比范しお、ラむブ配信 / VOD どちらにも察応可胜なこず、察応ブラりザが倚いこず、専甚の配信サヌバを䜿わずに配信可胜なこずなどから、近幎の動画配信サヌビスで広く利甚されおいたす。 Web ゚ンゞニアの芖点から芋おも、 HTTP ベヌスなためキャッシュや HTTPS 暗号化など、既存 Web 技術ず掛け合わせるこずが想像しやすく、扱いやすい印象でした。 MediaConvert の HLS ゚ンコヌドゞョブ蚭定 実際にプログラムから API 経由で HLS ゚ンコヌドゞョブを登録する際の蚭定 JSON は、以䞋のように GUI でゞョブテンプレヌトを䜜成しお確認するこずができたす。 この「 JSON を衚瀺」で、前述した CLI コマンド mediaconvert create-job --cli-input-json に枡せる JSON が衚瀺されたす。実装の際にはこちらを参考にしながら、 ナヌザヌガむド を参照しお利甚したい機胜にあわせた蚭定を远加しおいくこずをおすすめしたす。 泚意点・぀たづいたポむント 利甚前に IAM で MediaConvert 甚ロヌルの蚭定が必芁です ステップ 3. IAM 暩限の蚭定 AWS コン゜ヌルの Service Quotas > AWS サヌビス > AWS Elemental MediaConvert から確認できたすが、゚ンコヌド䞊行凊理の同時実行数䞊限は 20 になっおいたす AWS ルヌトアカりント 1 ぀に぀き 1 サヌビスが割圓おられるので、これを増やしたい堎合は申請が必芁です ゚ンコヌドゞョブをキュヌむングする「キュヌ」を䜜成しお、ゞョブの登録時に遞べるのですが、䞊蚘した「䞊行凊理の同時実行数䞊限」はこの「キュヌ」毎に均等に振り分けられたす 䟋えば「本番キュヌ」ず「怜蚌キュヌ」の 2 ぀のキュヌを䜜成した堎合、それぞれの䞊行凊理の同時実行数䞊限は 10 ず぀になるので泚意しおください マニフェスト期間圢匏Manifest duration formatに敎数INTEGERを指定しおいるず、iOS Safari で「動画の実際の再生時間ず、再生プレむダヌのシヌクバヌに衚瀺される合蚈時間にズレが生じる」問題がありたした 浮動小数点FLOATING POINTに倉曎するこずで察応したした、マニフェストファむルに出力される各 .ts ファむルの長さが、浮動小数点 → 敎数に倉換され切り䞊げられるこずでズレが生じおいるようでした hls.js による HLS 動画の再生制埡 MediaConvert により HLS 圢匏に゚ンコヌドされた動画を、Web ブラりザで再生するために必芁なのが、hls.js です。 ref. video-dev/hls.js 実は HLS によるストリヌミング配信は、珟状 Safari など限られたブラりザでしかネむティブでサポヌトされおいたせん。 ref. https://caniuse.com/http-live-streaming この HLS 動画を Safari 以倖の Google Chrome や IE11 などの䞻芁ブラりザで再生可胜にするため、hls.js が利甚されおいたす。内郚的には、非察応ブラりザ環境においお、ブラりザの MediaSource 拡匵 を䜿っお HLS 動画を再生する仕様になっおいたす。 Video.js ずの比范 䌌たようなラむブラリに Video.js ずいうものもあり、導入を迷ったのですが 
 Video.js は UI もセットになった「 HLS に察応した再生プレむダヌ」ラむブラリ HLS 察応以倖にも、字幕や章分けなど機胜が豊富 hls.js はブラりザ暙準の <video> タグで HLS に察応するこずだけを目的にした「 HLS クラむアント」ラむブラリ UI などはなく、動画再生プレむダヌはブラりザ暙準のたた  ず、䞊蚘のように hls.js の方がシンプルにやりたいこずを実珟できるため、今回は hls.js を採甚したした。 GitHub のスタヌ数は先発の Video.js の方が倚いのですが、hls.js も開発は掻発で、日本では グノシヌ さん、䞖界的には TED や Twitter でも採甚されおおり、十分実瞟があるかず思いたす。 hls.js による実装 基本的には README の Getting Started の通りで実装できたす。䞀郚 README のサンプルコヌドから抜粋しお解説するず  var video = document . getElementById ( "video" ); var videoSrc = "https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8" ; if ( Hls . isSupported ()) { var hls = new Hls (); hls . loadSource ( videoSrc ); hls . attachMedia ( video ); hls . on ( Hls . Events . MANIFEST_PARSED , function () { video . play (); }); } 䞊蚘 Hls.isSupported() の分岐で、HLS をネむティブサポヌトしおいないブラりザの凊理を実装しおいたす。 本来 <video> の src 属性にセットするべき .m3u8 ファむルの URL ぞ hls.loadSource() でアクセスさせ、クラむアントから XHR リク゚ストを飛ばしたす。その埌 hls.attachMedia() でむンスタンスを DOM 䞊の <video> タグに玐づけおいたす。 else if ( video . canPlayType ( 'application/vnd.apple.mpegurl' )) { video . src = videoSrc ; video . addEventListener ( 'loadedmetadata' , function () { video . play (); }); } 䞊蚘の分岐が iOS Safari など、HLS 動画をネむティブサポヌトしおいるブラりザ向けの凊理です。単玔に .m3u8 ぞの URL を <video> タグの src ぞ付䞎しおいるだけですね。 サンプルコヌドでは、マニフェストファむルのロヌド埌に自動再生させるようになっおいるようです 泚意点・぀たづいたポむント hls.js クラむアントが取埗する HLS 動画ファむル矀は、CORS ヘッダで GET リク゚ストを蚱可された環境に蚭眮する必芁がありたす .m3u8 マニフェストファむルをアプリの API などから返华する堎合、Content-Type を application/x-mpegURL にしお枡す必芁がありたす iOS Safari などの hls.js 非察応ブラりザ向けの実装を意識する必芁がありたす hls.js による制埡が耇雑になるケヌスでは、同じような制埡を hls.js 非察応ブラりザ向けに実装できるかをむメヌゞできないず手戻りが発生しそうです この他、フロント゚ンドでは <video> タグのブラりザ毎の挙動や、衚瀺の違いに時間がかかりたした。ある皋床予想はしおいたしたが、やはりメディアの取り扱いは難しい  hls.js 自䜓は導入も手軜で、サクッず HLS 動画のマルチブラりザ察応が実珟でき、ずおも䜿いやすかったです。@types も存圚するので、TypeScript 環境でも難なく実装できたした。 SSR や HLS + AES-128 の再生にも察応しおいるので、興味のある方は䞀床 公匏ドキュメント を確認しおみおください。 おわりに 埓来、動画配信サヌビスを構築する堎合、ffmpeg を茉せた゚ンコヌドサヌバや、ストリヌミング配信サヌバを別建おしお、負荷に応じおスケヌルさせお のような蚭蚈が必芁だったかず思いたす。 今回、MediaConvert をはじめずした AWS サヌビスず hls.js を利甚するこずで、手軜に、スケヌラブルな動画゚ンコヌドHTTP ストリヌミング配信環境を構築するこずができたした。 ゞョブメドレヌの動画遞考はただリリヌスしたばかりですので、今埌反響を芋ながら、さらなる改善を重ねおいけたらず思いたす。最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、第䞀開発グルヌプの矢野です。ゞョブメドレヌ開発゚ンゞニアずしお、䞻にバック゚ンドを担圓しおいたす。 盎近では、ゞョブメドレヌが先月リリヌスした 「動画遞考」 機胜の開発プロゞェクトに携わっおおり、動画ファむルのアップロヌド配信環境の蚭蚈・実装を行っおいたした。 今回のブログでは、この「動画遞考」機胜の開発に利甚した AWS Elemental MediaConvert サヌビスず、 hls.js ずいう OSS ラむブラリに぀いお玹介したいず思いたす。 ゞョブメドレヌの「動画遞考」機胜 はじめに、今回リリヌスした「動画遞考」機胜に぀いお抂芁を玹介したす。 新型コロナりむルス感染拡倧によっお、察面での面接に䞍安を感じたり、公共亀通機関の利甚が難しくなったりするこずにより、満足な転職掻動ができなくなっおいる方もいらっしゃるかず思いたす。 このような課題を解決するために、ゞョブメドレヌではリアルタむムにオンラむンで面接を行う「WEB 面接」ず、事業者があらかじめ蚭定した質問に察しお応募者が動画で回答を送る「動画遞考」の 2 ぀の機胜を提䟛開始いたしたした。 ref. WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画遞考動画面接は、近幎増加傟向にあるオンラむン遞考の䞀皮です。䞀般的に、求職者 / 就掻生が PC ・スマヌトフォン等のカメラで、予め甚意された蚭問に応じお動画を撮圱し、䌁業に送るこずで遞考を行いたす。 ref. WEB 面接・動画遞考ずは 実斜の流れ、䜿甚ツヌル、マナヌ、泚意点などを培底解説 私たちゞョブメドレヌの動画遞考では、事業所があらかじめ蚭定した質問に察しお、求職者が回答動画を提出するこずができたす。事業所も求職者も、動画で質問・回答を送るこずで、曞類だけでは䌝わらない雰囲気や匷みを盞手に䌝えるこずができたす。 WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画配信サヌビスの蚭蚈ポむント Web アプリでこのような動画配信サヌビスを開発する堎合、「ナヌザによる動画アップロヌド環境」ず「ナヌザぞの動画の配信・再生環境」を提䟛する必芁がありたす。 ゞョブメドレヌで扱う動画は䞀般公開されるものではなく、公開条件も耇雑です。 よっお今回は、この「動画アップロヌド配信環境」を自サヌビス内に構築する方針をずり、以䞋のような動画たわりの蚭蚈ポむントに぀いお怜蚎・技術遞定を行うこずにしたした。 もちろん、芁件によっおは YouTube や、法人向け動画配信プラットフォヌムを契玄した方が手軜な堎合もあるかず思いたす 動画の録画・撮圱 サポヌトしたい動画ファむルのフォヌマットをどうするか Web アプリ内に録画機胜を蚭けるか 動画のアップロヌドストレヌゞ 動画ファむルのバリデヌションで「動画ファむルの解析」を行うか 動画ファむルのアップロヌド先ストレヌゞをどこにするか 動画の゚ンコヌド 動画ファむルの゚ンコヌド圢匏H.264、HLS 等をどうするか 非同期゚ンコヌドの堎合、ステヌタス怜知・゚ラヌハンドリングをどうするか 動画の配信ダりンロヌド 配信圢匏ダりンロヌドストリヌミングをどうするか 暗号化をする堎合、埩号をどのように行うか 動画ファむルの公開方法アクセス制限をどうするか 動画の再生 Web ペヌゞ䞊で再生させるのか、その堎合の衚瀺・再生制埡をどうするか ブラりザサポヌトをどこたでにするか、非察応・゚ラヌ時の制埡をどうするか 今回は、䞊蚘の倪字で蚘茉した 「動画の゚ンコヌド」に MediaConvert を、 「動画の再生」に hls.js をそれぞれ採甚しおいたす。 各項の詳现は省きたすが、党䜓を通しお倧たかに、以䞋のフロヌで「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」を実珟するこずにしたした。 ブラりザから Ajax で動画を S3 ぞアップロヌドする MediaConvert が動画を HLS 圢匏に゚ンコヌド倉換する ブラりザで hls.js を䜿い動画を CloudFront からストリヌミング圢匏で受信、再生する 今回はこの「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」に焊点を絞り、MediaConvert ず hls.js をどのように䜿ったのかを玹介したす。 MediaConvert による HLS ゚ンコヌド AWS Elemental MediaConvert は、S3 ずの芪和性が高いファむルベヌスの動画倉換サヌビスです。自前で ffmpeg などを䜿っお動画゚ンコヌドサヌバを構築・管理するこずなく、スケヌラブルな動画倉換凊理を手軜にシステムに組み蟌むこずができたす。 ref. AWS Elemental MediaConvert 料金は出力する動画の再生時間に応じた埓量課金です。AWS コン゜ヌルから GUI ベヌスで゚ンコヌド蚭定を䜜成したり、ゞョブ゚ンコヌド凊理を登録するこずができたす。 たた、他 AWS サヌビス同様に API が提䟛されおおり、AWS CLI や各蚀語の SDK を䜿っおプログラムから゚ンコヌド凊理を登録するこずができ、システム連携も容易です。 # CLI で゚ンコヌドゞョブを登録する䟋 $ aws --endpoint-url https://abcd1234.mediaconvert.region-name-1.amazonaws.com --region region-name-1 mediaconvert create-job --cli-input-json file://~/job.json 䞊蚘 CLI コマンドで䞋のような゚ンコヌド蚭定を蚘茉した JSON を䜿いゞョブを䜜成するず、S3 䞊の動画ファむルをサクッず゚ンコヌドしおくれたす。ゞョブはキュヌむングされ、内郚で䞊列凊理されるため、倧量の゚ンコヌド芁求にも簡単に応じるこずができたす。 { ... "Settings" : { "Inputs" : [ { # 入力元の S3 バケット䞊の動画ファむル key を指定 "FileInput" : "s3://testcontent/720/example_input_720p.mov" } ], "OutputGroups" : [ { "OutputGroupSettings" : { "FileGroupSettings" : { # 出力先の S3 バケット key を指定 "Destination" : "s3://testbucket/output" } }, # 動画・音声の゚ンコヌド蚭定を指定 # ここで品質レベル毎に振り分けた耇数のファむルを出力したり # サムネむル jpg を䜜成したりするこずも可胜 "Outputs" : [ { "VideoDescription" : { 
 }, "AudioDescriptions" : { 
 } } ] } ] } } ref. AWSCLI を䜿甚した AWSElemental MediaConvertCreateJob の䟋 ゚ンコヌドが完了したゞョブは、cron + SDK などで API を介しお定期チェックする他に、CloudWatch Events によるむベント監芖 → Lambda で凊理するようなこずもできたす。 ref. AWS Elemental MediaConvert による CloudWatch むベント の䜿甚 なぜ動画を再゚ンコヌドするのか 通垞、ナヌザからアップロヌドされる動画ファむルは、既に䜕らかのコヌデックで圧瞮され .mp4 や .mov などのコンテナフォヌマットに倉換されおいるこずが殆どです。 しかし Web ペヌゞで <video> タグを䜿いこれら動画ファむルを再生しようずした堎合、 「動画フォヌマットにブラりザが非察応だず再生できない」 ずいう環境䟝存問題がありたす。 ブラりザず動画フォヌマットのサポヌト衚 ref. HTML5 video > Browser support この問題に察応するため、倚くの動画配信サヌビスでは、ナヌザの動画を倚くの環境で再生可胜な MP4 コンテナフォヌマットH.264 + AAC コヌデックなどの圢匏ぞ「再゚ンコヌド」しおいたす。 ゞョブメドレヌの動画遞考では䞊蚘目的に加えお、動画閲芧時の回線・端末負荷を抑える 「HTTP ストリヌミング圢匏」 で動画を配信するために、アップロヌドされた動画を党お HLS 圢匏 に゚ンコヌドしおいたす。 HLS - HTTP Live Streaming 圢匏 HLS は HTTP Live Streaming の略で、Apple 瀟の開発した芏栌です。HTTP ベヌスのストリヌミング通信プロトコルで、现切れにした MP4 動画ファむルを分割ダりンロヌドさせるこずで動画のストリヌミング配信を実珟しおいたす。 HLS 圢匏に゚ンコヌドされた動画は .ts ずいう分割されたメディアファむル矀ず、 .m3u8 ずいう、メディアファむルの取埗先や秒数などを蚘茉したテキストファむルで構成されたす。 .m3u8 ファむルの䟋マニフェストファむル、プレむリストファむルずも #EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.97663, media-0.ts #EXTINF:9.97663, media-1.ts #EXTINF:7.10710, media-2.ts #EXT-X-ENDLIST ref. RFC 8216: HTTP Live Streaming HLS は他のストリヌミング圢匏ず比范しお、ラむブ配信 / VOD どちらにも察応可胜なこず、察応ブラりザが倚いこず、専甚の配信サヌバを䜿わずに配信可胜なこずなどから、近幎の動画配信サヌビスで広く利甚されおいたす。 Web ゚ンゞニアの芖点から芋おも、 HTTP ベヌスなためキャッシュや HTTPS 暗号化など、既存 Web 技術ず掛け合わせるこずが想像しやすく、扱いやすい印象でした。 MediaConvert の HLS ゚ンコヌドゞョブ蚭定 実際にプログラムから API 経由で HLS ゚ンコヌドゞョブを登録する際の蚭定 JSON は、以䞋のように GUI でゞョブテンプレヌトを䜜成しお確認するこずができたす。 この「 JSON を衚瀺」で、前述した CLI コマンド mediaconvert create-job --cli-input-json に枡せる JSON が衚瀺されたす。実装の際にはこちらを参考にしながら、 ナヌザヌガむド を参照しお利甚したい機胜にあわせた蚭定を远加しおいくこずをおすすめしたす。 泚意点・぀たづいたポむント 利甚前に IAM で MediaConvert 甚ロヌルの蚭定が必芁です ステップ 3. IAM 暩限の蚭定 AWS コン゜ヌルの Service Quotas > AWS サヌビス > AWS Elemental MediaConvert から確認できたすが、゚ンコヌド䞊行凊理の同時実行数䞊限は 20 になっおいたす AWS ルヌトアカりント 1 ぀に぀き 1 サヌビスが割圓おられるので、これを増やしたい堎合は申請が必芁です ゚ンコヌドゞョブをキュヌむングする「キュヌ」を䜜成しお、ゞョブの登録時に遞べるのですが、䞊蚘した「䞊行凊理の同時実行数䞊限」はこの「キュヌ」毎に均等に振り分けられたす 䟋えば「本番キュヌ」ず「怜蚌キュヌ」の 2 ぀のキュヌを䜜成した堎合、それぞれの䞊行凊理の同時実行数䞊限は 10 ず぀になるので泚意しおください マニフェスト期間圢匏Manifest duration formatに敎数INTEGERを指定しおいるず、iOS Safari で「動画の実際の再生時間ず、再生プレむダヌのシヌクバヌに衚瀺される合蚈時間にズレが生じる」問題がありたした 浮動小数点FLOATING POINTに倉曎するこずで察応したした、マニフェストファむルに出力される各 .ts ファむルの長さが、浮動小数点 → 敎数に倉換され切り䞊げられるこずでズレが生じおいるようでした hls.js による HLS 動画の再生制埡 MediaConvert により HLS 圢匏に゚ンコヌドされた動画を、Web ブラりザで再生するために必芁なのが、hls.js です。 ref. video-dev/hls.js 実は HLS によるストリヌミング配信は、珟状 Safari など限られたブラりザでしかネむティブでサポヌトされおいたせん。 ref. https://caniuse.com/http-live-streaming この HLS 動画を Safari 以倖の Google Chrome や IE11 などの䞻芁ブラりザで再生可胜にするため、hls.js が利甚されおいたす。内郚的には、非察応ブラりザ環境においお、ブラりザの MediaSource 拡匵 を䜿っお HLS 動画を再生する仕様になっおいたす。 Video.js ずの比范 䌌たようなラむブラリに Video.js ずいうものもあり、導入を迷ったのですが 
 Video.js は UI もセットになった「 HLS に察応した再生プレむダヌ」ラむブラリ HLS 察応以倖にも、字幕や章分けなど機胜が豊富 hls.js はブラりザ暙準の <video> タグで HLS に察応するこずだけを目的にした「 HLS クラむアント」ラむブラリ UI などはなく、動画再生プレむダヌはブラりザ暙準のたた  ず、䞊蚘のように hls.js の方がシンプルにやりたいこずを実珟できるため、今回は hls.js を採甚したした。 GitHub のスタヌ数は先発の Video.js の方が倚いのですが、hls.js も開発は掻発で、日本では グノシヌ さん、䞖界的には TED や Twitter でも採甚されおおり、十分実瞟があるかず思いたす。 hls.js による実装 基本的には README の Getting Started の通りで実装できたす。䞀郚 README のサンプルコヌドから抜粋しお解説するず  var video = document . getElementById ( "video" ); var videoSrc = "https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8" ; if ( Hls . isSupported ()) { var hls = new Hls (); hls . loadSource ( videoSrc ); hls . attachMedia ( video ); hls . on ( Hls . Events . MANIFEST_PARSED , function () { video . play (); }); } 䞊蚘 Hls.isSupported() の分岐で、HLS をネむティブサポヌトしおいないブラりザの凊理を実装しおいたす。 本来 <video> の src 属性にセットするべき .m3u8 ファむルの URL ぞ hls.loadSource() でアクセスさせ、クラむアントから XHR リク゚ストを飛ばしたす。その埌 hls.attachMedia() でむンスタンスを DOM 䞊の <video> タグに玐づけおいたす。 else if ( video . canPlayType ( 'application/vnd.apple.mpegurl' )) { video . src = videoSrc ; video . addEventListener ( 'loadedmetadata' , function () { video . play (); }); } 䞊蚘の分岐が iOS Safari など、HLS 動画をネむティブサポヌトしおいるブラりザ向けの凊理です。単玔に .m3u8 ぞの URL を <video> タグの src ぞ付䞎しおいるだけですね。 サンプルコヌドでは、マニフェストファむルのロヌド埌に自動再生させるようになっおいるようです 泚意点・぀たづいたポむント hls.js クラむアントが取埗する HLS 動画ファむル矀は、CORS ヘッダで GET リク゚ストを蚱可された環境に蚭眮する必芁がありたす .m3u8 マニフェストファむルをアプリの API などから返华する堎合、Content-Type を application/x-mpegURL にしお枡す必芁がありたす iOS Safari などの hls.js 非察応ブラりザ向けの実装を意識する必芁がありたす hls.js による制埡が耇雑になるケヌスでは、同じような制埡を hls.js 非察応ブラりザ向けに実装できるかをむメヌゞできないず手戻りが発生しそうです この他、フロント゚ンドでは <video> タグのブラりザ毎の挙動や、衚瀺の違いに時間がかかりたした。ある皋床予想はしおいたしたが、やはりメディアの取り扱いは難しい  hls.js 自䜓は導入も手軜で、サクッず HLS 動画のマルチブラりザ察応が実珟でき、ずおも䜿いやすかったです。@types も存圚するので、TypeScript 環境でも難なく実装できたした。 SSR や HLS + AES-128 の再生にも察応しおいるので、興味のある方は䞀床 公匏ドキュメント を確認しおみおください。 おわりに 埓来、動画配信サヌビスを構築する堎合、ffmpeg を茉せた゚ンコヌドサヌバや、ストリヌミング配信サヌバを別建おしお、負荷に応じおスケヌルさせお のような蚭蚈が必芁だったかず思いたす。 今回、MediaConvert をはじめずした AWS サヌビスず hls.js を利甚するこずで、手軜に、スケヌラブルな動画゚ンコヌドHTTP ストリヌミング配信環境を構築するこずができたした。 ゞョブメドレヌの動画遞考はただリリヌスしたばかりですので、今埌反響を芋ながら、さらなる改善を重ねおいけたらず思いたす。最埌たでお読みいただきありがずうございたした。 https://www.medley.jp/jobs/
こんにちは、第䞀開発グルヌプの矢野です。ゞョブメドレヌ開発゚ンゞニアずしお、䞻にバック゚ンドを担圓しおいたす。 盎近では、ゞョブメドレヌが先月リリヌスした 「動画遞考」 機胜の開発プロゞェクトに携わっおおり、動画ファむルのアップロヌド配信環境の蚭蚈・実装を行っおいたした。 今回のブログでは、この「動画遞考」機胜の開発に利甚した AWS Elemental MediaConvert サヌビスず、 hls.js ずいう OSS ラむブラリに぀いお玹介したいず思いたす。 ゞョブメドレヌの「動画遞考」機胜 はじめに、今回リリヌスした「動画遞考」機胜に぀いお抂芁を玹介したす。 新型コロナりむルス感染拡倧によっお、察面での面接に䞍安を感じたり、公共亀通機関の利甚が難しくなったりするこずにより、満足な転職掻動ができなくなっおいる方もいらっしゃるかず思いたす。 このような課題を解決するために、ゞョブメドレヌではリアルタむムにオンラむンで面接を行う「WEB 面接」ず、事業者があらかじめ蚭定した質問に察しお応募者が動画で回答を送る「動画遞考」の 2 ぀の機胜を提䟛開始いたしたした。 ref. WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画遞考動画面接は、近幎増加傟向にあるオンラむン遞考の䞀皮です。䞀般的に、求職者 / 就掻生が PC ・スマヌトフォン等のカメラで、予め甚意された蚭問に応じお動画を撮圱し、䌁業に送るこずで遞考を行いたす。 ref. WEB 面接・動画遞考ずは 実斜の流れ、䜿甚ツヌル、マナヌ、泚意点などを培底解説 私たちゞョブメドレヌの動画遞考では、事業所があらかじめ蚭定した質問に察しお、求職者が回答動画を提出するこずができたす。事業所も求職者も、動画で質問・回答を送るこずで、曞類だけでは䌝わらない雰囲気や匷みを盞手に䌝えるこずができたす。 WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画配信サヌビスの蚭蚈ポむント Web アプリでこのような動画配信サヌビスを開発する堎合、「ナヌザによる動画アップロヌド環境」ず「ナヌザぞの動画の配信・再生環境」を提䟛する必芁がありたす。 ゞョブメドレヌで扱う動画は䞀般公開されるものではなく、公開条件も耇雑です。 よっお今回は、この「動画アップロヌド配信環境」を自サヌビス内に構築する方針をずり、以䞋のような動画たわりの蚭蚈ポむントに぀いお怜蚎・技術遞定を行うこずにしたした。 もちろん、芁件によっおは YouTube や、法人向け動画配信プラットフォヌムを契玄した方が手軜な堎合もあるかず思いたす 動画の録画・撮圱 サポヌトしたい動画ファむルのフォヌマットをどうするか Web アプリ内に録画機胜を蚭けるか 動画のアップロヌドストレヌゞ 動画ファむルのバリデヌションで「動画ファむルの解析」を行うか 動画ファむルのアップロヌド先ストレヌゞをどこにするか 動画の゚ンコヌド 動画ファむルの゚ンコヌド圢匏H.264、HLS 等をどうするか 非同期゚ンコヌドの堎合、ステヌタス怜知・゚ラヌハンドリングをどうするか 動画の配信ダりンロヌド 配信圢匏ダりンロヌドストリヌミングをどうするか 暗号化をする堎合、埩号をどのように行うか 動画ファむルの公開方法アクセス制限をどうするか 動画の再生 Web ペヌゞ䞊で再生させるのか、その堎合の衚瀺・再生制埡をどうするか ブラりザサポヌトをどこたでにするか、非察応・゚ラヌ時の制埡をどうするか 今回は、䞊蚘の倪字で蚘茉した 「動画の゚ンコヌド」に MediaConvert を、 「動画の再生」に hls.js をそれぞれ採甚しおいたす。 各項の詳现は省きたすが、党䜓を通しお倧たかに、以䞋のフロヌで「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」を実珟するこずにしたした。 ブラりザから Ajax で動画を S3 ぞアップロヌドする MediaConvert が動画を HLS 圢匏に゚ンコヌド倉換する ブラりザで hls.js を䜿い動画を CloudFront からストリヌミング圢匏で受信、再生する 今回はこの「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」に焊点を絞り、MediaConvert ず hls.js をどのように䜿ったのかを玹介したす。 MediaConvert による HLS ゚ンコヌド AWS Elemental MediaConvert は、S3 ずの芪和性が高いファむルベヌスの動画倉換サヌビスです。自前で ffmpeg などを䜿っお動画゚ンコヌドサヌバを構築・管理するこずなく、スケヌラブルな動画倉換凊理を手軜にシステムに組み蟌むこずができたす。 ref. AWS Elemental MediaConvert 料金は出力する動画の再生時間に応じた埓量課金です。AWS コン゜ヌルから GUI ベヌスで゚ンコヌド蚭定を䜜成したり、ゞョブ゚ンコヌド凊理を登録するこずができたす。 たた、他 AWS サヌビス同様に API が提䟛されおおり、AWS CLI や各蚀語の SDK を䜿っおプログラムから゚ンコヌド凊理を登録するこずができ、システム連携も容易です。 # CLI で゚ンコヌドゞョブを登録する䟋 $ aws --endpoint-url https://abcd1234.mediaconvert.region-name-1.amazonaws.com --region region-name-1 mediaconvert create-job --cli-input-json file://~/job.json 䞊蚘 CLI コマンドで䞋のような゚ンコヌド蚭定を蚘茉した JSON を䜿いゞョブを䜜成するず、S3 䞊の動画ファむルをサクッず゚ンコヌドしおくれたす。ゞョブはキュヌむングされ、内郚で䞊列凊理されるため、倧量の゚ンコヌド芁求にも簡単に応じるこずができたす。 { ... "Settings" : { "Inputs" : [ { # 入力元の S3 バケット䞊の動画ファむル key を指定 "FileInput" : "s3://testcontent/720/example_input_720p.mov" } ], "OutputGroups" : [ { "OutputGroupSettings" : { "FileGroupSettings" : { # 出力先の S3 バケット key を指定 "Destination" : "s3://testbucket/output" } }, # 動画・音声の゚ンコヌド蚭定を指定 # ここで品質レベル毎に振り分けた耇数のファむルを出力したり # サムネむル jpg を䜜成したりするこずも可胜 "Outputs" : [ { "VideoDescription" : { 
 }, "AudioDescriptions" : { 
 } } ] } ] } } ref. AWSCLI を䜿甚した AWSElemental MediaConvertCreateJob の䟋 ゚ンコヌドが完了したゞョブは、cron + SDK などで API を介しお定期チェックする他に、CloudWatch Events によるむベント監芖 → Lambda で凊理するようなこずもできたす。 ref. AWS Elemental MediaConvert による CloudWatch むベント の䜿甚 なぜ動画を再゚ンコヌドするのか 通垞、ナヌザからアップロヌドされる動画ファむルは、既に䜕らかのコヌデックで圧瞮され .mp4 や .mov などのコンテナフォヌマットに倉換されおいるこずが殆どです。 しかし Web ペヌゞで <video> タグを䜿いこれら動画ファむルを再生しようずした堎合、 「動画フォヌマットにブラりザが非察応だず再生できない」 ずいう環境䟝存問題がありたす。 ブラりザず動画フォヌマットのサポヌト衚 ref. HTML5 video > Browser support この問題に察応するため、倚くの動画配信サヌビスでは、ナヌザの動画を倚くの環境で再生可胜な MP4 コンテナフォヌマットH.264 + AAC コヌデックなどの圢匏ぞ「再゚ンコヌド」しおいたす。 ゞョブメドレヌの動画遞考では䞊蚘目的に加えお、動画閲芧時の回線・端末負荷を抑える 「HTTP ストリヌミング圢匏」 で動画を配信するために、アップロヌドされた動画を党お HLS 圢匏 に゚ンコヌドしおいたす。 HLS - HTTP Live Streaming 圢匏 HLS は HTTP Live Streaming の略で、Apple 瀟の開発した芏栌です。HTTP ベヌスのストリヌミング通信プロトコルで、现切れにした MP4 動画ファむルを分割ダりンロヌドさせるこずで動画のストリヌミング配信を実珟しおいたす。 HLS 圢匏に゚ンコヌドされた動画は .ts ずいう分割されたメディアファむル矀ず、 .m3u8 ずいう、メディアファむルの取埗先や秒数などを蚘茉したテキストファむルで構成されたす。 .m3u8 ファむルの䟋マニフェストファむル、プレむリストファむルずも #EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.97663, media-0.ts #EXTINF:9.97663, media-1.ts #EXTINF:7.10710, media-2.ts #EXT-X-ENDLIST ref. RFC 8216: HTTP Live Streaming HLS は他のストリヌミング圢匏ず比范しお、ラむブ配信 / VOD どちらにも察応可胜なこず、察応ブラりザが倚いこず、専甚の配信サヌバを䜿わずに配信可胜なこずなどから、近幎の動画配信サヌビスで広く利甚されおいたす。 Web ゚ンゞニアの芖点から芋おも、 HTTP ベヌスなためキャッシュや HTTPS 暗号化など、既存 Web 技術ず掛け合わせるこずが想像しやすく、扱いやすい印象でした。 MediaConvert の HLS ゚ンコヌドゞョブ蚭定 実際にプログラムから API 経由で HLS ゚ンコヌドゞョブを登録する際の蚭定 JSON は、以䞋のように GUI でゞョブテンプレヌトを䜜成しお確認するこずができたす。 この「 JSON を衚瀺」で、前述した CLI コマンド mediaconvert create-job --cli-input-json に枡せる JSON が衚瀺されたす。実装の際にはこちらを参考にしながら、 ナヌザヌガむド を参照しお利甚したい機胜にあわせた蚭定を远加しおいくこずをおすすめしたす。 泚意点・぀たづいたポむント 利甚前に IAM で MediaConvert 甚ロヌルの蚭定が必芁です ステップ 3. IAM 暩限の蚭定 AWS コン゜ヌルの Service Quotas > AWS サヌビス > AWS Elemental MediaConvert から確認できたすが、゚ンコヌド䞊行凊理の同時実行数䞊限は 20 になっおいたす AWS ルヌトアカりント 1 ぀に぀き 1 サヌビスが割圓おられるので、これを増やしたい堎合は申請が必芁です ゚ンコヌドゞョブをキュヌむングする「キュヌ」を䜜成しお、ゞョブの登録時に遞べるのですが、䞊蚘した「䞊行凊理の同時実行数䞊限」はこの「キュヌ」毎に均等に振り分けられたす 䟋えば「本番キュヌ」ず「怜蚌キュヌ」の 2 ぀のキュヌを䜜成した堎合、それぞれの䞊行凊理の同時実行数䞊限は 10 ず぀になるので泚意しおください マニフェスト期間圢匏Manifest duration formatに敎数INTEGERを指定しおいるず、iOS Safari で「動画の実際の再生時間ず、再生プレむダヌのシヌクバヌに衚瀺される合蚈時間にズレが生じる」問題がありたした 浮動小数点FLOATING POINTに倉曎するこずで察応したした、マニフェストファむルに出力される各 .ts ファむルの長さが、浮動小数点 → 敎数に倉換され切り䞊げられるこずでズレが生じおいるようでした hls.js による HLS 動画の再生制埡 MediaConvert により HLS 圢匏に゚ンコヌドされた動画を、Web ブラりザで再生するために必芁なのが、hls.js です。 ref. video-dev/hls.js 実は HLS によるストリヌミング配信は、珟状 Safari など限られたブラりザでしかネむティブでサポヌトされおいたせん。 ref. https://caniuse.com/http-live-streaming この HLS 動画を Safari 以倖の Google Chrome や IE11 などの䞻芁ブラりザで再生可胜にするため、hls.js が利甚されおいたす。内郚的には、非察応ブラりザ環境においお、ブラりザの MediaSource 拡匵 を䜿っお HLS 動画を再生する仕様になっおいたす。 Video.js ずの比范 䌌たようなラむブラリに Video.js ずいうものもあり、導入を迷ったのですが 
 Video.js は UI もセットになった「 HLS に察応した再生プレむダヌ」ラむブラリ HLS 察応以倖にも、字幕や章分けなど機胜が豊富 hls.js はブラりザ暙準の <video> タグで HLS に察応するこずだけを目的にした「 HLS クラむアント」ラむブラリ UI などはなく、動画再生プレむダヌはブラりザ暙準のたた  ず、䞊蚘のように hls.js の方がシンプルにやりたいこずを実珟できるため、今回は hls.js を採甚したした。 GitHub のスタヌ数は先発の Video.js の方が倚いのですが、hls.js も開発は掻発で、日本では グノシヌ さん、䞖界的には TED や Twitter でも採甚されおおり、十分実瞟があるかず思いたす。 hls.js による実装 基本的には README の Getting Started の通りで実装できたす。䞀郚 README のサンプルコヌドから抜粋しお解説するず  var video = document . getElementById ( "video" ); var videoSrc = "https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8" ; if ( Hls . isSupported ()) { var hls = new Hls (); hls . loadSource ( videoSrc ); hls . attachMedia ( video ); hls . on ( Hls . Events . MANIFEST_PARSED , function () { video . play (); }); } 䞊蚘 Hls.isSupported() の分岐で、HLS をネむティブサポヌトしおいないブラりザの凊理を実装しおいたす。 本来 <video> の src 属性にセットするべき .m3u8 ファむルの URL ぞ hls.loadSource() でアクセスさせ、クラむアントから XHR リク゚ストを飛ばしたす。その埌 hls.attachMedia() でむンスタンスを DOM 䞊の <video> タグに玐づけおいたす。 else if ( video . canPlayType ( 'application/vnd.apple.mpegurl' )) { video . src = videoSrc ; video . addEventListener ( 'loadedmetadata' , function () { video . play (); }); } 䞊蚘の分岐が iOS Safari など、HLS 動画をネむティブサポヌトしおいるブラりザ向けの凊理です。単玔に .m3u8 ぞの URL を <video> タグの src ぞ付䞎しおいるだけですね。 サンプルコヌドでは、マニフェストファむルのロヌド埌に自動再生させるようになっおいるようです 泚意点・぀たづいたポむント hls.js クラむアントが取埗する HLS 動画ファむル矀は、CORS ヘッダで GET リク゚ストを蚱可された環境に蚭眮する必芁がありたす .m3u8 マニフェストファむルをアプリの API などから返华する堎合、Content-Type を application/x-mpegURL にしお枡す必芁がありたす iOS Safari などの hls.js 非察応ブラりザ向けの実装を意識する必芁がありたす hls.js による制埡が耇雑になるケヌスでは、同じような制埡を hls.js 非察応ブラりザ向けに実装できるかをむメヌゞできないず手戻りが発生しそうです この他、フロント゚ンドでは <video> タグのブラりザ毎の挙動や、衚瀺の違いに時間がかかりたした。ある皋床予想はしおいたしたが、やはりメディアの取り扱いは難しい  hls.js 自䜓は導入も手軜で、サクッず HLS 動画のマルチブラりザ察応が実珟でき、ずおも䜿いやすかったです。@types も存圚するので、TypeScript 環境でも難なく実装できたした。 SSR や HLS + AES-128 の再生にも察応しおいるので、興味のある方は䞀床 公匏ドキュメント を確認しおみおください。 おわりに 埓来、動画配信サヌビスを構築する堎合、ffmpeg を茉せた゚ンコヌドサヌバや、ストリヌミング配信サヌバを別建おしお、負荷に応じおスケヌルさせお のような蚭蚈が必芁だったかず思いたす。 今回、MediaConvert をはじめずした AWS サヌビスず hls.js を利甚するこずで、手軜に、スケヌラブルな動画゚ンコヌドHTTP ストリヌミング配信環境を構築するこずができたした。 ゞョブメドレヌの動画遞考はただリリヌスしたばかりですので、今埌反響を芋ながら、さらなる改善を重ねおいけたらず思いたす。最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、第䞀開発グルヌプの矢野です。ゞョブメドレヌ開発゚ンゞニアずしお、䞻にバック゚ンドを担圓しおいたす。 盎近では、ゞョブメドレヌが先月リリヌスした 「動画遞考」 機胜の開発プロゞェクトに携わっおおり、動画ファむルのアップロヌド配信環境の蚭蚈・実装を行っおいたした。 今回のブログでは、この「動画遞考」機胜の開発に利甚した AWS Elemental MediaConvert サヌビスず、 hls.js ずいう OSS ラむブラリに぀いお玹介したいず思いたす。 ゞョブメドレヌの「動画遞考」機胜 はじめに、今回リリヌスした「動画遞考」機胜に぀いお抂芁を玹介したす。 新型コロナりむルス感染拡倧によっお、察面での面接に䞍安を感じたり、公共亀通機関の利甚が難しくなったりするこずにより、満足な転職掻動ができなくなっおいる方もいらっしゃるかず思いたす。 このような課題を解決するために、ゞョブメドレヌではリアルタむムにオンラむンで面接を行う「WEB 面接」ず、事業者があらかじめ蚭定した質問に察しお応募者が動画で回答を送る「動画遞考」の 2 ぀の機胜を提䟛開始いたしたした。 ref. WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画遞考動画面接は、近幎増加傟向にあるオンラむン遞考の䞀皮です。䞀般的に、求職者 / 就掻生が PC ・スマヌトフォン等のカメラで、予め甚意された蚭問に応じお動画を撮圱し、䌁業に送るこずで遞考を行いたす。 ref. WEB 面接・動画遞考ずは 実斜の流れ、䜿甚ツヌル、マナヌ、泚意点などを培底解説 私たちゞョブメドレヌの動画遞考では、事業所があらかじめ蚭定した質問に察しお、求職者が回答動画を提出するこずができたす。事業所も求職者も、動画で質問・回答を送るこずで、曞類だけでは䌝わらない雰囲気や匷みを盞手に䌝えるこずができたす。 WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画配信サヌビスの蚭蚈ポむント Web アプリでこのような動画配信サヌビスを開発する堎合、「ナヌザによる動画アップロヌド環境」ず「ナヌザぞの動画の配信・再生環境」を提䟛する必芁がありたす。 ゞョブメドレヌで扱う動画は䞀般公開されるものではなく、公開条件も耇雑です。 よっお今回は、この「動画アップロヌド配信環境」を自サヌビス内に構築する方針をずり、以䞋のような動画たわりの蚭蚈ポむントに぀いお怜蚎・技術遞定を行うこずにしたした。 もちろん、芁件によっおは YouTube や、法人向け動画配信プラットフォヌムを契玄した方が手軜な堎合もあるかず思いたす 動画の録画・撮圱 サポヌトしたい動画ファむルのフォヌマットをどうするか Web アプリ内に録画機胜を蚭けるか 動画のアップロヌドストレヌゞ 動画ファむルのバリデヌションで「動画ファむルの解析」を行うか 動画ファむルのアップロヌド先ストレヌゞをどこにするか 動画の゚ンコヌド 動画ファむルの゚ンコヌド圢匏H.264、HLS 等をどうするか 非同期゚ンコヌドの堎合、ステヌタス怜知・゚ラヌハンドリングをどうするか 動画の配信ダりンロヌド 配信圢匏ダりンロヌドストリヌミングをどうするか 暗号化をする堎合、埩号をどのように行うか 動画ファむルの公開方法アクセス制限をどうするか 動画の再生 Web ペヌゞ䞊で再生させるのか、その堎合の衚瀺・再生制埡をどうするか ブラりザサポヌトをどこたでにするか、非察応・゚ラヌ時の制埡をどうするか 今回は、䞊蚘の倪字で蚘茉した 「動画の゚ンコヌド」に MediaConvert を、 「動画の再生」に hls.js をそれぞれ採甚しおいたす。 各項の詳现は省きたすが、党䜓を通しお倧たかに、以䞋のフロヌで「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」を実珟するこずにしたした。 ブラりザから Ajax で動画を S3 ぞアップロヌドする MediaConvert が動画を HLS 圢匏に゚ンコヌド倉換する ブラりザで hls.js を䜿い動画を CloudFront からストリヌミング圢匏で受信、再生する 今回はこの「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」に焊点を絞り、MediaConvert ず hls.js をどのように䜿ったのかを玹介したす。 MediaConvert による HLS ゚ンコヌド AWS Elemental MediaConvert は、S3 ずの芪和性が高いファむルベヌスの動画倉換サヌビスです。自前で ffmpeg などを䜿っお動画゚ンコヌドサヌバを構築・管理するこずなく、スケヌラブルな動画倉換凊理を手軜にシステムに組み蟌むこずができたす。 ref. AWS Elemental MediaConvert 料金は出力する動画の再生時間に応じた埓量課金です。AWS コン゜ヌルから GUI ベヌスで゚ンコヌド蚭定を䜜成したり、ゞョブ゚ンコヌド凊理を登録するこずができたす。 たた、他 AWS サヌビス同様に API が提䟛されおおり、AWS CLI や各蚀語の SDK を䜿っおプログラムから゚ンコヌド凊理を登録するこずができ、システム連携も容易です。 # CLI で゚ンコヌドゞョブを登録する䟋 $ aws --endpoint-url https://abcd1234.mediaconvert.region-name-1.amazonaws.com --region region-name-1 mediaconvert create-job --cli-input-json file://~/job.json 䞊蚘 CLI コマンドで䞋のような゚ンコヌド蚭定を蚘茉した JSON を䜿いゞョブを䜜成するず、S3 䞊の動画ファむルをサクッず゚ンコヌドしおくれたす。ゞョブはキュヌむングされ、内郚で䞊列凊理されるため、倧量の゚ンコヌド芁求にも簡単に応じるこずができたす。 { ... "Settings" : { "Inputs" : [ { # 入力元の S3 バケット䞊の動画ファむル key を指定 "FileInput" : "s3://testcontent/720/example_input_720p.mov" } ], "OutputGroups" : [ { "OutputGroupSettings" : { "FileGroupSettings" : { # 出力先の S3 バケット key を指定 "Destination" : "s3://testbucket/output" } }, # 動画・音声の゚ンコヌド蚭定を指定 # ここで品質レベル毎に振り分けた耇数のファむルを出力したり # サムネむル jpg を䜜成したりするこずも可胜 "Outputs" : [ { "VideoDescription" : { 
 }, "AudioDescriptions" : { 
 } } ] } ] } } ref. AWSCLI を䜿甚した AWSElemental MediaConvertCreateJob の䟋 ゚ンコヌドが完了したゞョブは、cron + SDK などで API を介しお定期チェックする他に、CloudWatch Events によるむベント監芖 → Lambda で凊理するようなこずもできたす。 ref. AWS Elemental MediaConvert による CloudWatch むベント の䜿甚 なぜ動画を再゚ンコヌドするのか 通垞、ナヌザからアップロヌドされる動画ファむルは、既に䜕らかのコヌデックで圧瞮され .mp4 や .mov などのコンテナフォヌマットに倉換されおいるこずが殆どです。 しかし Web ペヌゞで <video> タグを䜿いこれら動画ファむルを再生しようずした堎合、 「動画フォヌマットにブラりザが非察応だず再生できない」 ずいう環境䟝存問題がありたす。 ブラりザず動画フォヌマットのサポヌト衚 ref. HTML5 video > Browser support この問題に察応するため、倚くの動画配信サヌビスでは、ナヌザの動画を倚くの環境で再生可胜な MP4 コンテナフォヌマットH.264 + AAC コヌデックなどの圢匏ぞ「再゚ンコヌド」しおいたす。 ゞョブメドレヌの動画遞考では䞊蚘目的に加えお、動画閲芧時の回線・端末負荷を抑える 「HTTP ストリヌミング圢匏」 で動画を配信するために、アップロヌドされた動画を党お HLS 圢匏 に゚ンコヌドしおいたす。 HLS - HTTP Live Streaming 圢匏 HLS は HTTP Live Streaming の略で、Apple 瀟の開発した芏栌です。HTTP ベヌスのストリヌミング通信プロトコルで、现切れにした MP4 動画ファむルを分割ダりンロヌドさせるこずで動画のストリヌミング配信を実珟しおいたす。 HLS 圢匏に゚ンコヌドされた動画は .ts ずいう分割されたメディアファむル矀ず、 .m3u8 ずいう、メディアファむルの取埗先や秒数などを蚘茉したテキストファむルで構成されたす。 .m3u8 ファむルの䟋マニフェストファむル、プレむリストファむルずも #EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.97663, media-0.ts #EXTINF:9.97663, media-1.ts #EXTINF:7.10710, media-2.ts #EXT-X-ENDLIST ref. RFC 8216: HTTP Live Streaming HLS は他のストリヌミング圢匏ず比范しお、ラむブ配信 / VOD どちらにも察応可胜なこず、察応ブラりザが倚いこず、専甚の配信サヌバを䜿わずに配信可胜なこずなどから、近幎の動画配信サヌビスで広く利甚されおいたす。 Web ゚ンゞニアの芖点から芋おも、 HTTP ベヌスなためキャッシュや HTTPS 暗号化など、既存 Web 技術ず掛け合わせるこずが想像しやすく、扱いやすい印象でした。 MediaConvert の HLS ゚ンコヌドゞョブ蚭定 実際にプログラムから API 経由で HLS ゚ンコヌドゞョブを登録する際の蚭定 JSON は、以䞋のように GUI でゞョブテンプレヌトを䜜成しお確認するこずができたす。 この「 JSON を衚瀺」で、前述した CLI コマンド mediaconvert create-job --cli-input-json に枡せる JSON が衚瀺されたす。実装の際にはこちらを参考にしながら、 ナヌザヌガむド を参照しお利甚したい機胜にあわせた蚭定を远加しおいくこずをおすすめしたす。 泚意点・぀たづいたポむント 利甚前に IAM で MediaConvert 甚ロヌルの蚭定が必芁です ステップ 3. IAM 暩限の蚭定 AWS コン゜ヌルの Service Quotas > AWS サヌビス > AWS Elemental MediaConvert から確認できたすが、゚ンコヌド䞊行凊理の同時実行数䞊限は 20 になっおいたす AWS ルヌトアカりント 1 ぀に぀き 1 サヌビスが割圓おられるので、これを増やしたい堎合は申請が必芁です ゚ンコヌドゞョブをキュヌむングする「キュヌ」を䜜成しお、ゞョブの登録時に遞べるのですが、䞊蚘した「䞊行凊理の同時実行数䞊限」はこの「キュヌ」毎に均等に振り分けられたす 䟋えば「本番キュヌ」ず「怜蚌キュヌ」の 2 ぀のキュヌを䜜成した堎合、それぞれの䞊行凊理の同時実行数䞊限は 10 ず぀になるので泚意しおください マニフェスト期間圢匏Manifest duration formatに敎数INTEGERを指定しおいるず、iOS Safari で「動画の実際の再生時間ず、再生プレむダヌのシヌクバヌに衚瀺される合蚈時間にズレが生じる」問題がありたした 浮動小数点FLOATING POINTに倉曎するこずで察応したした、マニフェストファむルに出力される各 .ts ファむルの長さが、浮動小数点 → 敎数に倉換され切り䞊げられるこずでズレが生じおいるようでした hls.js による HLS 動画の再生制埡 MediaConvert により HLS 圢匏に゚ンコヌドされた動画を、Web ブラりザで再生するために必芁なのが、hls.js です。 ref. video-dev/hls.js 実は HLS によるストリヌミング配信は、珟状 Safari など限られたブラりザでしかネむティブでサポヌトされおいたせん。 ref. https://caniuse.com/http-live-streaming この HLS 動画を Safari 以倖の Google Chrome や IE11 などの䞻芁ブラりザで再生可胜にするため、hls.js が利甚されおいたす。内郚的には、非察応ブラりザ環境においお、ブラりザの MediaSource 拡匵 を䜿っお HLS 動画を再生する仕様になっおいたす。 Video.js ずの比范 䌌たようなラむブラリに Video.js ずいうものもあり、導入を迷ったのですが 
 Video.js は UI もセットになった「 HLS に察応した再生プレむダヌ」ラむブラリ HLS 察応以倖にも、字幕や章分けなど機胜が豊富 hls.js はブラりザ暙準の <video> タグで HLS に察応するこずだけを目的にした「 HLS クラむアント」ラむブラリ UI などはなく、動画再生プレむダヌはブラりザ暙準のたた  ず、䞊蚘のように hls.js の方がシンプルにやりたいこずを実珟できるため、今回は hls.js を採甚したした。 GitHub のスタヌ数は先発の Video.js の方が倚いのですが、hls.js も開発は掻発で、日本では グノシヌ さん、䞖界的には TED や Twitter でも採甚されおおり、十分実瞟があるかず思いたす。 hls.js による実装 基本的には README の Getting Started の通りで実装できたす。䞀郚 README のサンプルコヌドから抜粋しお解説するず  var video = document . getElementById ( "video" ); var videoSrc = "https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8" ; if ( Hls . isSupported ()) { var hls = new Hls (); hls . loadSource ( videoSrc ); hls . attachMedia ( video ); hls . on ( Hls . Events . MANIFEST_PARSED , function () { video . play (); }); } 䞊蚘 Hls.isSupported() の分岐で、HLS をネむティブサポヌトしおいないブラりザの凊理を実装しおいたす。 本来 <video> の src 属性にセットするべき .m3u8 ファむルの URL ぞ hls.loadSource() でアクセスさせ、クラむアントから XHR リク゚ストを飛ばしたす。その埌 hls.attachMedia() でむンスタンスを DOM 䞊の <video> タグに玐づけおいたす。 else if ( video . canPlayType ( 'application/vnd.apple.mpegurl' )) { video . src = videoSrc ; video . addEventListener ( 'loadedmetadata' , function () { video . play (); }); } 䞊蚘の分岐が iOS Safari など、HLS 動画をネむティブサポヌトしおいるブラりザ向けの凊理です。単玔に .m3u8 ぞの URL を <video> タグの src ぞ付䞎しおいるだけですね。 サンプルコヌドでは、マニフェストファむルのロヌド埌に自動再生させるようになっおいるようです 泚意点・぀たづいたポむント hls.js クラむアントが取埗する HLS 動画ファむル矀は、CORS ヘッダで GET リク゚ストを蚱可された環境に蚭眮する必芁がありたす .m3u8 マニフェストファむルをアプリの API などから返华する堎合、Content-Type を application/x-mpegURL にしお枡す必芁がありたす iOS Safari などの hls.js 非察応ブラりザ向けの実装を意識する必芁がありたす hls.js による制埡が耇雑になるケヌスでは、同じような制埡を hls.js 非察応ブラりザ向けに実装できるかをむメヌゞできないず手戻りが発生しそうです この他、フロント゚ンドでは <video> タグのブラりザ毎の挙動や、衚瀺の違いに時間がかかりたした。ある皋床予想はしおいたしたが、やはりメディアの取り扱いは難しい  hls.js 自䜓は導入も手軜で、サクッず HLS 動画のマルチブラりザ察応が実珟でき、ずおも䜿いやすかったです。@types も存圚するので、TypeScript 環境でも難なく実装できたした。 SSR や HLS + AES-128 の再生にも察応しおいるので、興味のある方は䞀床 公匏ドキュメント を確認しおみおください。 おわりに 埓来、動画配信サヌビスを構築する堎合、ffmpeg を茉せた゚ンコヌドサヌバや、ストリヌミング配信サヌバを別建おしお、負荷に応じおスケヌルさせお のような蚭蚈が必芁だったかず思いたす。 今回、MediaConvert をはじめずした AWS サヌビスず hls.js を利甚するこずで、手軜に、スケヌラブルな動画゚ンコヌドHTTP ストリヌミング配信環境を構築するこずができたした。 ゞョブメドレヌの動画遞考はただリリヌスしたばかりですので、今埌反響を芋ながら、さらなる改善を重ねおいけたらず思いたす。最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、第䞀開発グルヌプの矢野です。ゞョブメドレヌ開発゚ンゞニアずしお、䞻にバック゚ンドを担圓しおいたす。 盎近では、ゞョブメドレヌが先月リリヌスした 「動画遞考」 機胜の開発プロゞェクトに携わっおおり、動画ファむルのアップロヌド配信環境の蚭蚈・実装を行っおいたした。 今回のブログでは、この「動画遞考」機胜の開発に利甚した AWS Elemental MediaConvert サヌビスず、 hls.js ずいう OSS ラむブラリに぀いお玹介したいず思いたす。 ゞョブメドレヌの「動画遞考」機胜 はじめに、今回リリヌスした「動画遞考」機胜に぀いお抂芁を玹介したす。 新型コロナりむルス感染拡倧によっお、察面での面接に䞍安を感じたり、公共亀通機関の利甚が難しくなったりするこずにより、満足な転職掻動ができなくなっおいる方もいらっしゃるかず思いたす。 このような課題を解決するために、ゞョブメドレヌではリアルタむムにオンラむンで面接を行う「WEB 面接」ず、事業者があらかじめ蚭定した質問に察しお応募者が動画で回答を送る「動画遞考」の 2 ぀の機胜を提䟛開始いたしたした。 ref. WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画遞考動画面接は、近幎増加傟向にあるオンラむン遞考の䞀皮です。䞀般的に、求職者 / 就掻生が PC ・スマヌトフォン等のカメラで、予め甚意された蚭問に応じお動画を撮圱し、䌁業に送るこずで遞考を行いたす。 ref. WEB 面接・動画遞考ずは 実斜の流れ、䜿甚ツヌル、マナヌ、泚意点などを培底解説 私たちゞョブメドレヌの動画遞考では、事業所があらかじめ蚭定した質問に察しお、求職者が回答動画を提出するこずができたす。事業所も求職者も、動画で質問・回答を送るこずで、曞類だけでは䌝わらない雰囲気や匷みを盞手に䌝えるこずができたす。 WEB 面接・動画遞考機胜のリリヌスのお知らせ 動画配信サヌビスの蚭蚈ポむント Web アプリでこのような動画配信サヌビスを開発する堎合、「ナヌザによる動画アップロヌド環境」ず「ナヌザぞの動画の配信・再生環境」を提䟛する必芁がありたす。 ゞョブメドレヌで扱う動画は䞀般公開されるものではなく、公開条件も耇雑です。 よっお今回は、この「動画アップロヌド配信環境」を自サヌビス内に構築する方針をずり、以䞋のような動画たわりの蚭蚈ポむントに぀いお怜蚎・技術遞定を行うこずにしたした。 もちろん、芁件によっおは YouTube や、法人向け動画配信プラットフォヌムを契玄した方が手軜な堎合もあるかず思いたす 動画の録画・撮圱 サポヌトしたい動画ファむルのフォヌマットをどうするか Web アプリ内に録画機胜を蚭けるか 動画のアップロヌドストレヌゞ 動画ファむルのバリデヌションで「動画ファむルの解析」を行うか 動画ファむルのアップロヌド先ストレヌゞをどこにするか 動画の゚ンコヌド 動画ファむルの゚ンコヌド圢匏H.264、HLS 等をどうするか 非同期゚ンコヌドの堎合、ステヌタス怜知・゚ラヌハンドリングをどうするか 動画の配信ダりンロヌド 配信圢匏ダりンロヌドストリヌミングをどうするか 暗号化をする堎合、埩号をどのように行うか 動画ファむルの公開方法アクセス制限をどうするか 動画の再生 Web ペヌゞ䞊で再生させるのか、その堎合の衚瀺・再生制埡をどうするか ブラりザサポヌトをどこたでにするか、非察応・゚ラヌ時の制埡をどうするか 今回は、䞊蚘の倪字で蚘茉した 「動画の゚ンコヌド」に MediaConvert を、 「動画の再生」に hls.js をそれぞれ採甚しおいたす。 各項の詳现は省きたすが、党䜓を通しお倧たかに、以䞋のフロヌで「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」を実珟するこずにしたした。 ブラりザから Ajax で動画を S3 ぞアップロヌドする MediaConvert が動画を HLS 圢匏に゚ンコヌド倉換する ブラりザで hls.js を䜿い動画を CloudFront からストリヌミング圢匏で受信、再生する 今回はこの「動画アップロヌド → ゚ンコヌド倉換→ 配信・再生」に焊点を絞り、MediaConvert ず hls.js をどのように䜿ったのかを玹介したす。 MediaConvert による HLS ゚ンコヌド AWS Elemental MediaConvert は、S3 ずの芪和性が高いファむルベヌスの動画倉換サヌビスです。自前で ffmpeg などを䜿っお動画゚ンコヌドサヌバを構築・管理するこずなく、スケヌラブルな動画倉換凊理を手軜にシステムに組み蟌むこずができたす。 ref. AWS Elemental MediaConvert 料金は出力する動画の再生時間に応じた埓量課金です。AWS コン゜ヌルから GUI ベヌスで゚ンコヌド蚭定を䜜成したり、ゞョブ゚ンコヌド凊理を登録するこずができたす。 たた、他 AWS サヌビス同様に API が提䟛されおおり、AWS CLI や各蚀語の SDK を䜿っおプログラムから゚ンコヌド凊理を登録するこずができ、システム連携も容易です。 # CLI で゚ンコヌドゞョブを登録する䟋 $ aws --endpoint-url https://abcd1234.mediaconvert.region-name-1.amazonaws.com --region region-name-1 mediaconvert create-job --cli-input-json file://~/job.json 䞊蚘 CLI コマンドで䞋のような゚ンコヌド蚭定を蚘茉した JSON を䜿いゞョブを䜜成するず、S3 䞊の動画ファむルをサクッず゚ンコヌドしおくれたす。ゞョブはキュヌむングされ、内郚で䞊列凊理されるため、倧量の゚ンコヌド芁求にも簡単に応じるこずができたす。 { ... "Settings" : { "Inputs" : [ { # 入力元の S3 バケット䞊の動画ファむル key を指定 "FileInput" : "s3://testcontent/720/example_input_720p.mov" } ], "OutputGroups" : [ { "OutputGroupSettings" : { "FileGroupSettings" : { # 出力先の S3 バケット key を指定 "Destination" : "s3://testbucket/output" } }, # 動画・音声の゚ンコヌド蚭定を指定 # ここで品質レベル毎に振り分けた耇数のファむルを出力したり # サムネむル jpg を䜜成したりするこずも可胜 "Outputs" : [ { "VideoDescription" : { 
 }, "AudioDescriptions" : { 
 } } ] } ] } } ref. AWSCLI を䜿甚した AWSElemental MediaConvertCreateJob の䟋 ゚ンコヌドが完了したゞョブは、cron + SDK などで API を介しお定期チェックする他に、CloudWatch Events によるむベント監芖 → Lambda で凊理するようなこずもできたす。 ref. AWS Elemental MediaConvert による CloudWatch むベント の䜿甚 なぜ動画を再゚ンコヌドするのか 通垞、ナヌザからアップロヌドされる動画ファむルは、既に䜕らかのコヌデックで圧瞮され .mp4 や .mov などのコンテナフォヌマットに倉換されおいるこずが殆どです。 しかし Web ペヌゞで <video> タグを䜿いこれら動画ファむルを再生しようずした堎合、 「動画フォヌマットにブラりザが非察応だず再生できない」 ずいう環境䟝存問題がありたす。 ブラりザず動画フォヌマットのサポヌト衚 ref. HTML5 video > Browser support この問題に察応するため、倚くの動画配信サヌビスでは、ナヌザの動画を倚くの環境で再生可胜な MP4 コンテナフォヌマットH.264 + AAC コヌデックなどの圢匏ぞ「再゚ンコヌド」しおいたす。 ゞョブメドレヌの動画遞考では䞊蚘目的に加えお、動画閲芧時の回線・端末負荷を抑える 「HTTP ストリヌミング圢匏」 で動画を配信するために、アップロヌドされた動画を党お HLS 圢匏 に゚ンコヌドしおいたす。 HLS - HTTP Live Streaming 圢匏 HLS は HTTP Live Streaming の略で、Apple 瀟の開発した芏栌です。HTTP ベヌスのストリヌミング通信プロトコルで、现切れにした MP4 動画ファむルを分割ダりンロヌドさせるこずで動画のストリヌミング配信を実珟しおいたす。 HLS 圢匏に゚ンコヌドされた動画は .ts ずいう分割されたメディアファむル矀ず、 .m3u8 ずいう、メディアファむルの取埗先や秒数などを蚘茉したテキストファむルで構成されたす。 .m3u8 ファむルの䟋マニフェストファむル、プレむリストファむルずも #EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.97663, media-0.ts #EXTINF:9.97663, media-1.ts #EXTINF:7.10710, media-2.ts #EXT-X-ENDLIST ref. RFC 8216: HTTP Live Streaming HLS は他のストリヌミング圢匏ず比范しお、ラむブ配信 / VOD どちらにも察応可胜なこず、察応ブラりザが倚いこず、専甚の配信サヌバを䜿わずに配信可胜なこずなどから、近幎の動画配信サヌビスで広く利甚されおいたす。 Web ゚ンゞニアの芖点から芋おも、 HTTP ベヌスなためキャッシュや HTTPS 暗号化など、既存 Web 技術ず掛け合わせるこずが想像しやすく、扱いやすい印象でした。 MediaConvert の HLS ゚ンコヌドゞョブ蚭定 実際にプログラムから API 経由で HLS ゚ンコヌドゞョブを登録する際の蚭定 JSON は、以䞋のように GUI でゞョブテンプレヌトを䜜成しお確認するこずができたす。 この「 JSON を衚瀺」で、前述した CLI コマンド mediaconvert create-job --cli-input-json に枡せる JSON が衚瀺されたす。実装の際にはこちらを参考にしながら、 ナヌザヌガむド を参照しお利甚したい機胜にあわせた蚭定を远加しおいくこずをおすすめしたす。 泚意点・぀たづいたポむント 利甚前に IAM で MediaConvert 甚ロヌルの蚭定が必芁です ステップ 3. IAM 暩限の蚭定 AWS コン゜ヌルの Service Quotas > AWS サヌビス > AWS Elemental MediaConvert から確認できたすが、゚ンコヌド䞊行凊理の同時実行数䞊限は 20 になっおいたす AWS ルヌトアカりント 1 ぀に぀き 1 サヌビスが割圓おられるので、これを増やしたい堎合は申請が必芁です ゚ンコヌドゞョブをキュヌむングする「キュヌ」を䜜成しお、ゞョブの登録時に遞べるのですが、䞊蚘した「䞊行凊理の同時実行数䞊限」はこの「キュヌ」毎に均等に振り分けられたす 䟋えば「本番キュヌ」ず「怜蚌キュヌ」の 2 ぀のキュヌを䜜成した堎合、それぞれの䞊行凊理の同時実行数䞊限は 10 ず぀になるので泚意しおください マニフェスト期間圢匏Manifest duration formatに敎数INTEGERを指定しおいるず、iOS Safari で「動画の実際の再生時間ず、再生プレむダヌのシヌクバヌに衚瀺される合蚈時間にズレが生じる」問題がありたした 浮動小数点FLOATING POINTに倉曎するこずで察応したした、マニフェストファむルに出力される各 .ts ファむルの長さが、浮動小数点 → 敎数に倉換され切り䞊げられるこずでズレが生じおいるようでした hls.js による HLS 動画の再生制埡 MediaConvert により HLS 圢匏に゚ンコヌドされた動画を、Web ブラりザで再生するために必芁なのが、hls.js です。 ref. video-dev/hls.js 実は HLS によるストリヌミング配信は、珟状 Safari など限られたブラりザでしかネむティブでサポヌトされおいたせん。 ref. https://caniuse.com/http-live-streaming この HLS 動画を Safari 以倖の Google Chrome や IE11 などの䞻芁ブラりザで再生可胜にするため、hls.js が利甚されおいたす。内郚的には、非察応ブラりザ環境においお、ブラりザの MediaSource 拡匵 を䜿っお HLS 動画を再生する仕様になっおいたす。 Video.js ずの比范 䌌たようなラむブラリに Video.js ずいうものもあり、導入を迷ったのですが 
 Video.js は UI もセットになった「 HLS に察応した再生プレむダヌ」ラむブラリ HLS 察応以倖にも、字幕や章分けなど機胜が豊富 hls.js はブラりザ暙準の <video> タグで HLS に察応するこずだけを目的にした「 HLS クラむアント」ラむブラリ UI などはなく、動画再生プレむダヌはブラりザ暙準のたた  ず、䞊蚘のように hls.js の方がシンプルにやりたいこずを実珟できるため、今回は hls.js を採甚したした。 GitHub のスタヌ数は先発の Video.js の方が倚いのですが、hls.js も開発は掻発で、日本では グノシヌ さん、䞖界的には TED や Twitter でも採甚されおおり、十分実瞟があるかず思いたす。 hls.js による実装 基本的には README の Getting Started の通りで実装できたす。䞀郚 README のサンプルコヌドから抜粋しお解説するず  var video = document . getElementById ( "video" ); var videoSrc = "https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8" ; if ( Hls . isSupported ()) { var hls = new Hls (); hls . loadSource ( videoSrc ); hls . attachMedia ( video ); hls . on ( Hls . Events . MANIFEST_PARSED , function () { video . play (); }); } 䞊蚘 Hls.isSupported() の分岐で、HLS をネむティブサポヌトしおいないブラりザの凊理を実装しおいたす。 本来 <video> の src 属性にセットするべき .m3u8 ファむルの URL ぞ hls.loadSource() でアクセスさせ、クラむアントから XHR リク゚ストを飛ばしたす。その埌 hls.attachMedia() でむンスタンスを DOM 䞊の <video> タグに玐づけおいたす。 else if ( video . canPlayType ( 'application/vnd.apple.mpegurl' )) { video . src = videoSrc ; video . addEventListener ( 'loadedmetadata' , function () { video . play (); }); } 䞊蚘の分岐が iOS Safari など、HLS 動画をネむティブサポヌトしおいるブラりザ向けの凊理です。単玔に .m3u8 ぞの URL を <video> タグの src ぞ付䞎しおいるだけですね。 サンプルコヌドでは、マニフェストファむルのロヌド埌に自動再生させるようになっおいるようです 泚意点・぀たづいたポむント hls.js クラむアントが取埗する HLS 動画ファむル矀は、CORS ヘッダで GET リク゚ストを蚱可された環境に蚭眮する必芁がありたす .m3u8 マニフェストファむルをアプリの API などから返华する堎合、Content-Type を application/x-mpegURL にしお枡す必芁がありたす iOS Safari などの hls.js 非察応ブラりザ向けの実装を意識する必芁がありたす hls.js による制埡が耇雑になるケヌスでは、同じような制埡を hls.js 非察応ブラりザ向けに実装できるかをむメヌゞできないず手戻りが発生しそうです この他、フロント゚ンドでは <video> タグのブラりザ毎の挙動や、衚瀺の違いに時間がかかりたした。ある皋床予想はしおいたしたが、やはりメディアの取り扱いは難しい  hls.js 自䜓は導入も手軜で、サクッず HLS 動画のマルチブラりザ察応が実珟でき、ずおも䜿いやすかったです。@types も存圚するので、TypeScript 環境でも難なく実装できたした。 SSR や HLS + AES-128 の再生にも察応しおいるので、興味のある方は䞀床 公匏ドキュメント を確認しおみおください。 おわりに 埓来、動画配信サヌビスを構築する堎合、ffmpeg を茉せた゚ンコヌドサヌバや、ストリヌミング配信サヌバを別建おしお、負荷に応じおスケヌルさせお のような蚭蚈が必芁だったかず思いたす。 今回、MediaConvert をはじめずした AWS サヌビスず hls.js を利甚するこずで、手軜に、スケヌラブルな動画゚ンコヌドHTTP ストリヌミング配信環境を構築するこずができたした。 ゞョブメドレヌの動画遞考はただリリヌスしたばかりですので、今埌反響を芋ながら、さらなる改善を重ねおいけたらず思いたす。最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp