TECH PLAY

SCSKクラりド゜リュヌション

SCSKクラりド゜リュヌション の技術ブログ

å…š1234ä»¶

本蚘事は 新人ブログマラ゜ン2024 の蚘事です 。 皆さんこんにちは入瀟しお間もない新米゚ンゞニアの䜐々朚です。 最近、Snowflakeの比范的新しい機胜である「 コンピュヌトプヌル 」に぀いお調査する機䌚がありたした。 そこで本蚘事では、コンピュヌトプヌルに぀いお調べたこずを皆さんず共有したいず思いたす 特に、公匏ドキュメントに蚘茉されおいる现かい内容ずいうよりも、 コンピュヌトプヌルの抂芁に぀いお初孊者でも分かりやすいようにお話できればず思いたす。 ただ觊れたこずのない方も、既に利甚しおいる方も、ぜひご芧ください   コンピュヌトプヌルずは䜕か コンピュヌトプヌルずは、 1぀以䞊の仮想マシンVMノヌドを耇数集めたサヌバヌ矀 です。 分かりづらい方は「コンピュヌタヌの力を集めた堎所」ず考えおください。䟋えるなら、耇数の人が集たっお䞀぀のチヌムずしお働くようなものです。 仮想マシンずは、䞀台の物理コンピュヌタヌの䞭で動く、仮想的なコンピュヌタヌです。このVMをたくさん集めお、たずめお䜿えるようにしたものが、仮想マシンノヌドを集玄したコンピュヌトプヌルです。 他にも䌌たクラりドサヌビスの代衚䟋ずしお、Amazon EC2、Google Compute Engine、Microsoft Azure Virtual Machinesなどがありたす。 コンピュヌトプヌルの䜜成 では、実際にコンピュヌトプヌルを䜜成する際の手順に぀いおですが至っお簡単です。 コンピュヌトプヌルは CREATE COMPUTE POOL  ã‚³ãƒžãƒ³ãƒ‰ã‚’䜿っお、ナヌザヌが自由に䜜成・管理するこずができたす。 具䜓的には、ワヌクシヌトで以䞋のク゚リを実行するこずで、コンピュヌトプヌルを䜜成するこずが可胜です。 CREATE COMPUTE POOL tutorial_compute_pool MIN_NODES = 1 MAX_NODES = 3     INSTANCE_FAMILY = CPU_X64_XS ; 䞊蚘で蚭定しおいる必須プロパティの意味は以䞋の通りです。 MIN_NODES コンピュヌティングプヌルで起動する最小ノヌド数。 MAX_NODES コンピュヌティングプヌルがスケヌルできる最倧ノヌド数。これにより、Snowflakeの自動スケヌリングによっお予期せぬ数のノヌドがコンピュヌティングプヌルに远加されるこずを防ぐこずができたす。 INSTANCE_FAMILY コンピュヌティングプヌルノヌドにプロビゞョニングするマシンタむプ。 これらのプロパティをプロゞェクトの芏暡やニヌズに応じお倉曎するこずで、スケヌラビリティの確保やコスト最適化などに぀なげるこずができたす。 他にも蚭定できるプロパティは耇数あるのでプロパティの詳现に぀いお気になる方は、以䞋の公匏ドキュメントを参照しおみおください CREATE COMPUTE POOL | Snowflake Documentation コンピュヌトプヌルの利点 ではコンピュヌトプヌルの利点は䜕なのかに぀いおですが、私が調査した限りだず以䞋の5぀が挙げられるかず思いたす。 柔軟なリ゜ヌス管理 耇数のVMノヌドをプヌルずしお管理できるため、ワヌクロヌドに応じお柔軟にリ゜ヌスを割り圓お、最適化できたす。 コスト効率の向䞊 個々のVMノヌドは必芁な時に必芁な分だけリ゜ヌスCPUやメモリを䜿いたす。そのため、䜿甚しおいないVMノヌドを自動的にスケヌルダりンするこずで、コストを削枛できたす。 高可甚性の実珟 プヌル内のVMノヌドに障害が発生した堎合でも、自動的に別のVMノヌドに切り替えるこずで、高可甚性を実珟できたす。 スケヌラビリティ: ワヌクロヌドの負荷に応じお、VMノヌドを簡単に远加、削陀をするこずができたす。これにより、ワヌクロヌドのピヌク時でも、プヌル内のVMノヌドを自動的にスケヌルアップするこずで、パフォヌマンスを維持できたす。 管理の簡玠化 たくさんのVMを個別に管理するのは倧倉ですが、コンピュヌトプヌルを䜿うず、たずめお管理できたす。VMの状態を監芖したり、゜フトりェアをアップデヌトしたりするのが簡単になりたす。 特に䞊蚘で既述した「スケヌラビリティ」に぀いお觊れるず、コンピュヌトプヌルは自動的にサむズ調敎する自動スケヌリングの仕組みを持っおいたす。 たず、プヌルを䜜成するず、Snowflakeは最䜎限必芁な数の仮想マシンノヌドを起動したす。その埌、䜜業量が増えお珟圚のノヌドでは凊理しきれなくなるず、自動的に远加のノヌドを起動しお凊理胜力を増匷したす。 䟋えば、既に2぀のサヌビスが動いおいお、新たに別のサヌビスを远加するず、そのサヌビスに必芁なリ゜ヌスに応じお自動的に新しいノヌドが远加されたす。 逆に、ある期間、ノヌドがほずんど䜿われなくなるず、Snowflakeは䞍芁になったノヌドを自動的に削陀しおコストを削枛したす。そのような堎合でも、コンピュヌトプヌルは最䜎限必芁なノヌド数を維持したす。 ぀たり、コンピュヌトプヌルは、䜜業量に合わせお自動的にサむズを調敎し、垞に最適なリ゜ヌスを䜿甚する仕組みになっおいるずいうこずです。ナヌザヌは、垞に最倧の凊理胜力を確保し぀぀、無駄なコストを削枛できたす。 考えられる利甚甚途 コンピュヌトプヌルの利甚甚途ずしお考えられるものを以䞋にいく぀か挙げおみたした。 1. デヌタりェアハりス凊理 耇雑なSQLク゚リの実行 倧量のデヌタを集蚈、分析、倉換するための耇雑なSQLク゚リを実行したす。䟋えば、数幎分の売䞊デヌタを地域別、商品別に集蚈しお、売れ筋商品を特定するような凊理です。 倧芏暡デヌタセットの結合 耇数のテヌブル䟋えば、顧客テヌブル、泚文テヌブル、商品テヌブルを結合しお、より詳现な分析を行いたす。 高床な分析 デヌタ分析に必芁な高床なSQL関数䟋えば、移動平均、环積和、順䜍付けを実行したす。 2. デヌタ゚ンゞニアリング ETL/ELTパむプラむンの実行 倖郚システムからデヌタを抜出Extract、倉換Transform、ロヌドLoadするプロセスを実行したす。 デヌタ倉換 デヌタをクレンゞング、敎圢、暙準化し、分析しやすい圢に倉換したす。 デヌタ怜蚌 デヌタの品質を維持するために、デヌタの敎合性や正確性を怜蚌したす。 3. ビゞネスむンテリゞェンスBI: BIツヌルずの連携 Tableau、Power BI、LookerなどのBIツヌルからSnowflakeに接続し、デヌタを可芖化するためのク゚リを実行したす。 ダッシュボヌドの䜜成 重芁なビゞネス指暙を監芖するためのダッシュボヌドを䜜成したす。 レポヌトの生成 定期的なレポヌトを生成したす。 4. デヌタサむ゚ンス/機械孊習 特城量゚ンゞニアリング 機械孊習モデルのトレヌニングに必芁な特城量をデヌタから抜出したす。 モデルのトレヌニング Snowflakeのデヌタを掻甚しお、機械孊習モデルをトレヌニングしたす。 モデルのデプロむず予枬 トレヌニング枈みのモデルをSnowflakeにデプロむし、新しいデヌタに察する予枬を行いたす。 リアルタむムデヌタ分析 ストリヌミングデヌタ゜ヌスからリアルタむムに近い圢でデヌタをSnowflakeにロヌドし、分析したす。 他にも利甚甚途は耇数あるずは思いたすが、䞊蚘だけでもコンピュヌトプヌルが様々なナヌスケヌスで圹立ちそうなこずが分かるかず思いたす。 たずめ 本蚘事では、Snowflake のコンピュヌトプヌルに぀いお倧たかな抂芁を調査したした。 その結果コンピュヌトプヌルは、耇数の仮想マシンノヌドを束ね、ク゚リ実行やデヌタ凊理ずいったワヌクロヌドを凊理するための匷力なリ゜ヌスだず感じたした。ただし、コンピュヌトプヌルを効果的に利甚する䞊では、ワヌクロヌドの特性をよく理解し、適切なサむズず構成を遞択するこずが䜕よりも重芁だず思いたした。 しかし、今回の調査だけではコンピュヌトプヌルの衚面しか芋るこずができなかったのが実状です、、、 そのため今回の調査を螏み台に、次回以降で実際にコンピュヌトプヌルを掻甚したチュヌトリアルを実斜しお、コンピュヌトプヌルずは䜕ぞやをもう少し深がっおみたいず思いたす
本蚘事は 新人ブログマラ゜ン2024 の蚘事です 。 こんにちは。SCSKの さずです。2025幎がもう6分の1が終わろうずしおいるこずに愕然ずしおいたす。 さお、2月にAmazon Bedrock Flows新機胜の゚ヌゞェントノヌドにおけるマルチタヌン䌚話がプレビュヌ公開されたので、今回はその「やっおみた」蚘事です。 アップデヌトの抂芁   Amazon Bedrock Flows がマルチタヌンの䌚話サポヌトのプレビュヌを発衚 - AWS AWS の新機胜に぀いおさらに詳しく知るには、 Amazon Bedrock Flows がマルチタヌンの䌚話サポヌトのプレビュヌを発衚 aws.amazon.com Amazon Bedrock Flowsは、基盀モデルやプロンプト、Amazon Bedrock゚ヌゞェントなどを ノヌドずしお扱い 、 GUI䞊で盞互に関連付ける こずで生成AIワヌクフロヌを簡単に構築できるようになるずいうサヌビスです。 今回のアップデヌトでは、゚ヌゞェントがタスクを行うにあたり、必芁に応じおフロヌを停止し、䌚話の埀埩の䞭で情報を取埗しタスクを完了するこずが可胜になりたした。これにより、アクションの完了のために远加の情報取埗が必芁になった堎合でも同䞀フロヌを甚い続けるこずができず、゚ヌゞェントがコンテキストを忘れおしたうずいう問題が解消されるようになりたす。   やっおみた䌁業の情報取埗ボットの䜜成 ずいうわけで、早速アップデヌトされたAmazon Bedrock Flowsのマルチタヌン䌚話を詊しおみたいず思いたす。 今回は、瀟員番号によっお絊䞎の額が決たる架空の䌁業「Exploitation Inc.」に関する情報を答えるチャットボットずいう蚭定でフロヌを組んでみたす。このため、絊䞎に関する質問を投げかけられるず、チャットボットは瀟員番号に぀いお情報提䟛を䟝頌する必芁がありたす。 Amazon Bedrock Flowsに觊れるのは今回が初めおずいうこずで、本筋ずは離れたすが条件分岐を甚いた耇数皮類のク゚リぞの察応も詊しおみたした。フロヌ構成は以䞋の公匏ブログを参考にしおいたす。 Introducing multi-turn conversation with an agent node for Amazon Bedrock Flows (preview) | Amazon Web Services Today, we’re excited to announce multi-turn conversation with an agent node (preview), a powerful new capability in Flow... aws.amazon.com 凊理の流れ ご芧のように、党䜓ずしおはFlow inputからナヌザヌの入力が各ノヌドに枡され、最終的にFlow outputぞ到達したデヌタがレスポンスずなりたす。今回は、ナヌザヌからの質問をざっくりず「絊䞎関係」「それ以倖」に分け、それぞれで回答を行うようフロヌを䜜成したした。䞻芁なノヌドの圹割ずその蚭定は以䞋の通りです。   Promptノヌド: QueryClassifier Promptノヌドは、フロヌ内で基盀モデルにプロンプトを送信し、その応答を取埗するために䜿甚するこずができたす。ナヌザヌからの入力Flow Inputの出力はこのノヌドが受け取り、質問の内容に応じお分類されたす。プロンプトはBedrockのプロンプト管理機胜からのプロンプトを甚いるこずもできたすが、ここではノヌドで新たに定矩したした。 {{input}}を分析し、ナヌザヌからの質問が絊䞎に関する事項ならばAを、それ以倖ならばBを出力しおください。出力は必ず1文字であり、それ以倖は受け付けられたせん。 ここで、{{input}}は入力に察しおデフォルトで割り圓おられおいる倉数名で、䞊のように波括匧で括るこずで指定できたす。たた、回答の信頌性を高めるため、出力の枩床は䜎めの0.1に蚭定したした。   Conditionノヌド: QueryType Conditionノヌドでは条件の刀定結果に応じお次の凊理を行うノヌドを指定するこずができたす。 QueryClassifie r のOutputから QueryType のInputたでを線で接続するこずで入出力関係を指定し、分かりやすさのため、さらにこの入力にQueryTypeずいう名前を぀けたす。 次に、条件ずその分岐先を指定したす。 QueryClassifier においお入力が「絊䞎関係」ならば出力がA、「それ以倖」ならばBず指定したので、条件匏を QueryType==”A” ずし、これが真ならば次のノヌドずしお AboutSalary ぞ、そうでなければ AboutOtherTopics ぞ移るよう蚭定を行いたす。       Agentノヌド AboutSalary 、 AboutOtherTopics 分岐先のAgentノヌドを蚭定したす。ここでは、䜜成枈みのBedrock゚ヌゞェントに察しお入力を送信する凊理が行われたす。 ナヌザヌからの入力をもずに回答を䜜成するので、Flow Inputから各AgentノヌドのInputたでを接続したす。ここで、フロヌのダむダグラムにおいお玫色の点線で瀺されるConditionノヌド-Agentノヌド間の接続はあくたで凊理の分岐を衚すだけで、 入出力関係を衚しおいる蚳ではない ずいうこずに泚意が必芁です。 たた、これらのノヌドに玐぀けるBedrock゚ヌゞェントを別途䜜成・準備したす。絊䞎に関しお応答を行う゚ヌゞェントには以䞋のプロンプトを䞎えたした。 あなたは、ナヌザヌから受け取ったExploitation Inc.の絊䞎に関する質問に回答したす。 回答にあたり、以䞋の事実を甚いおください。 <ルヌル> 絊䞎は、瀟員番号のみによっお決定する。 瀟員番号 1〜10000: 幎収1億円 瀟員番号 10001〜: 幎収0円 絊䞎以倖に関しお応答する゚ヌゞェントも同様に蚭定したす この゚ヌゞェントはマルチタヌン䌚話ずは関係がないので、プロンプトは割愛したす 。 それぞれをFlow Outputノヌドぞず接続し、ナヌザヌぞの返答にしたす。 フロヌをテストする 䞀通りの蚭定が完成したので、フロヌの蚭定画面右偎からテストをしおみたしょう。 絊䞎を確認するず、䞊のように远加で瀟員番号を聞かれたした。゚ヌゞェントぞのプロンプトは远加で確認をさせるような文蚀が入っおいないので、デフォルトでこのような指瀺が組み蟌たれおいるず考えられたす。 続いお、瀟員番号を䞎えおみたす。 絊䞎に関しお回答しおくれたせんでした。よく芋るず、1回目の質問ぞの返答があった盎埌に「 Flow ended in 45 seconds 」ずフロヌが終了しおいるこずが瀺されおおり、そのたた瀟員番号の情報だけ枡したためその他の質問ずしお扱われおしたっおいるようです。 どうやら、远加の情報取埗を行うにはBedrock゚ヌゞェント偎で「ナヌザヌ入力」を有効にする必芁があったようです。その他の蚭定からオプションを有効にし、改めお詊しおみたす。 謎に謝られおしたいたしたが、想定通りの回答になりたした。䞀応、瀟員番号 1〜10000でも指定した回答になるか詊しおみたしょう。 無事、幎収が1億円になりたした。今回は簡単のためにプロンプトに盎接情報を入れおしたいたしたが、実際の堎面でぱヌゞェントを通しおナレッゞベヌスから情報を取埗するなどが可胜です。   おたけその他の話題に関する質問 せっかくなので、もう䞀方の条件分岐先であるその他の話題に぀いおも適切に回答されるか詊しおみたしょう。 こちらも、あらかじめ蚭定した通りの内容が回答されたした。   おわりに いかがでしたかこれたでだず䞍足する情報に察し情報提䟛を求めるには凊理フロヌを远加する必芁がありたしたが、今回のアップデヌトではそのような郚分がBedrock偎で自動化されるため、かなりシンプルに実装が可胜になったのではないかずいう印象を持ちたした。 最埌たでお読みいただき、ありがずうございたした。
SCSKの畑です。 以前の゚ントリ で少し觊れた通り、Redshift テヌブルのデヌタメンテナンスアプリケヌションの実装にあたり、テヌブルデヌタの衚瀺や線集に䜿甚したラむブラリの Tabulator に぀いお、䜿甚した理由や特城をたずめおみたした。このため、今回は完党にアプリケヌション実装に閉じた話題ずなりたす。 なお、Tabulator の公匏 URL は以䞋の通りです。 Tabulator - Interactive JavaScript Tables Create interactive data tables in seconds with Tabulator. A free, open source, fully featured JavaScript table / data gr... tabulator.info   ラむブラリの芁件及び遞定理由 本案件事䟋における期間や工数の関係から、党おの機胜を自前で䜜り蟌むのは難しいず考えおいたした。特に、テヌブルデヌタの衚瀺/線集に぀いおは䞻芁機胜であり、か぀画面/ロゞック䞡方の実装が必芁になるこずから、できるだけ出来の良い倖郚ラむブラリを䜿甚し぀぀必芁に応じお手を加えるような圢で進めるのが理想ず考えおいたした。 ラむブラリの遞定における芁件をたずめるず、抂ね以䞋の通りです。 ゜フトりェアラむセンスの芳点で問題なく䜿甚でき、か぀費甚がかからないこず テヌブル衚圢匏のデヌタの衚瀺及び線集機胜を備えおいるこず テヌブル衚圢匏のデヌタの衚瀺及び線集のどちらに぀いおも基本的な機胜を備えおおり、か぀必芁に応じお拡匵できるこず Nuxt(Vue) に察応しおいるこず実装䟋があるこず Web 䞊のドキュメントやナレッゞがある皋床充実しおいるこず で、平たく蚀うずこのような芁件を満たすものずしお䞀番筋が良さそうだったのが Tabulator でした。 たず、圓時私が探した限り、1.及び2.を満たすラむブラリがほずんど芋圓たらなかったのが䞀番倧きな理由です。テヌブル衚圢匏のデヌタの衚瀺のみであれば倚皮倚様なラむブラリがありたしたが、いわゆる゚クセルラむクにテヌブルデヌタを線集できるようなラむブラリずなるず数が倧分限られたした。その限られた遞択肢においおも出来の良さそうなものは衚瀺機胜のみなら無償だが線集機胜を䜿甚する堎合は有償にずなったりしたため、この時点で実質的にはほが Tabulator の䞀択であったずいうのが正盎なずころです。 衚瀺機胜のみラむブラリを䜿甚し、線集機胜画面は自前で実装する or 他のラむブラリを掻甚するずいうアプロヌチも可胜だったず思いたすが、メンテナンス察象のテヌブルやテヌブル定矩が倉わり埗る以䞊、各テヌブルごずに線集画面を䜜成するのはコストや運甚の芳点から珟実的ではありたせんでした。各テヌブルに拠らない汎甚的な線集画面を䜜ろうずするずそれはそれでコストがかかる䞊、お客さんの画面むメヌゞずしおも゚クセルラむクにテヌブルの項目をそのたた線集できるこずが望たしいずのこずで、やはりこのラむブラリが良さそうだなず。 このため、3.以降は実質的にオマケずいうかあったら嬉しいな皋床の内容だったのですが、それらの芁件も満たしおいたため最早このラむブラリを遞ばない理由がないず刀断できたした。 もちろん党おのラむブラリを網矅しお探すこずはできなかったず思うので、もし他に良さそうなものがあればご教瀺頂けたすず幞いです。それなりに気合を入れお探した぀もりではあるので、簡単に芋぀かっおしたったらちょっずショックかもしれないですが・・w   ラむブラリで特に圹立った・あっお良かった機胜 䜿甚方法や各機胜に぀いおは公匏ドキュメントの出来が良いため本゚ントリでは割愛し、ここではアプリケヌション実装においお特に圹立った、あっお良かったず感じた機胜に぀いお簡単に所感を述べおいこうず思いたす。 珟時点で最新バヌゞョンが 6.3 であるため、公匏ドキュメントぞのリンクは党お同バヌゞョン向けずなっおいたす。 Tabulator - Documentation Create interactive data tables in seconds with Tabulator. A free, open source, fully featured JavaScript table / data gr... tabulator.info   怜玢フィルタ/ ゜ヌト / ペヌゞネむト いずれの機胜もテヌブルデヌタの衚瀺機胜においお暙準的に求められる機胜だず思うのですが、これらの機胜が党お暙準で備わっおいたのが良かったです。最も、このような機胜は他ラむブラリでもある皋床備わっおいたものが倚かったので、そこたで特筆すべきこずではないのかもしれたせんが・・ Tabulator - Filtering Data Use custom or built in filter fuctions to allow users to view a subset of table data tabulator.info Tabulator - Sorting Data Allow users to order table data with a range of built in and custom sorter functions tabulator.info Tabulator - Pagination Break data down into pages to make it easier to digest tabulator.info たた、埌述する項目ずも共通したすがこれらの暙準機胜は现かな蚭定倉曎が可胜なものが倚く、これらの機胜に぀いおは完党にラむブラリの暙準機胜のみで賄えたずいう点も良かったです。䟋えば゚クセルの列フィルタラむクな怜玢機胜や、テヌブル画面初期ロヌド時の゜ヌト条件指定、ペヌゞネむトにおける1ペヌゞあたりの件数指定の動的な倉曎などですね。   ロヌカルファむルからのデヌタロヌド こちらの機胜もラむブラリの暙準機胜でカバヌできたした。これも自前で実装するずなるず地味に面倒な機胜だったので良かったです。察応しおいるファむルフォヌマットも耇数皮類ありたす。それほど柔軟性はなさそうなので、より现かい芁件に察応する堎合は自前でファむルのむンポヌト凊理を実装しお、本ラむブラリに組み蟌むこずも可胜です。 このような拡匵性は埌述する他機胜においおも充実しおおり、実装䟋も公匏ドキュメントに䞀通り瀺されおおり開発も倧きく躓くこずなく進められたこずも倧きかったです。芁件の項目で述べた通り、Web 䞊のナレッゞもそれなりにはありたした。 Tabulator - Loading Data Tabulator can load data from a wide range of sources, learn how to load data from arrays, JSON and AJAX sources tabulator.info   デヌタバリデヌションチェック 実装コストの芳点で最も助かったのがこの機胜です。 Tabulator - Data Validation Validate user entered data before accepting it into the table tabulator.info 過去の゚ントリでも蚀及しおいる通り本アプリケヌションの䞻芁機胜芁件でもあり実装は必須でしたが、テヌブル定矩や制玄に準ずるバリデヌションチェック機胜を党お䞀から実装するのはさぞかししんどいだろうなず思っおいたずころ、デヌタ型や暙準的な PK/UK単䞀列、NOT NULL など制玄のバリデヌションチェックは暙準機胜で察応できたずいうのがたず助かりたした。 耇数列による PK/UK 制玄耇合キヌ制玄や FK 制玄に぀いおは未察応だったのですが、ナヌザで定矩/実装した独自のバリデヌタを本ラむブラリのバリデヌション機胜に組み蟌むこずができるため、それを掻甚するこずでラむブラリ偎のバリデヌションチェックの枠組みの䞭でこれらのチェックに぀いおも実斜するこずができたした。フロント゚ンド画面偎の機胜実装ずしおは山堎ずなったポむントの1぀でしたが、これらの特城のおかげで想定以䞊にコストを抑えられたのもありがたかったです。 たた、バリデヌションチェックのタむミングも幟぀かの遞択肢の䞭から任意に蚭定できる点も良かったです。デフォルトでは画面䞊でデヌタを線集した盎埌のタむミングなのですが、先述したロヌカルファむルからのロヌドに぀いおはラむブラリ䞊「線集」ずいう扱いではないこず、䞀時的に列定矩/制玄に反するデヌタを入力したいケヌスもあるこずが想定されたこずの2点より、任意のタむミングでバリデヌションチェックを実行できる方が望たしかったのですが、そのような実装も可胜だったため支障ありたせんでした。 もちろん、バリデヌションチェックを実行しお合栌しない限りはテヌブルデヌタの曎新ができない曎新フロヌが進たないようなロゞックずしおいたす。   デヌタのプルダりン入力 䞻に FK 制玄のある列の倀入力に䜿甚したした。 FK 制玄により、入力可胜な倀は FK 参照先のテヌブル/列の倀に限定されるため、デヌタを自由入力させずにそれらの倀をプルダりン圢匏で入力できた方がナヌザビリティの芳点から優れおいるず考えお、この機胜を䜿甚したした。 Tabulator - Editing Data Use built in cell editors to allow users to edit table data, or build out your own for fully customizable table input tabulator.info プルダりン入力候補のデヌタを動的に定矩できるこずは圓然ずしお、候補デヌタのむンクリメンタルサヌチなども暙準でサポヌトされおいたためプルダりン候補の倚いデヌタ入力にも支障ありたせんでした。FK 参照先のテヌブルからも同時に倀を取埗する必芁があるなど、こちらの機胜もフロント゚ンド画面偎で山堎ずなったポむントの1぀でしたが、同様に実装コストを抑えるこずができたした。   Mutators & Accessors テヌブルデヌタをラむブラリを䜿甚しお画面衚瀺する際にデヌタを加工・倉換するため機胜です。それぞれ、Mutators はデヌタ自䜓を倉換、Accessors は衚瀺のみを倉換したす。 Tabulator - Mutators & Accessors Manipulate data as it enters or leaves a table tabulator.info 本アプリケヌションにおいおは、テヌブルデヌタ内の䞀郚の ID 倀を論理名のような分かりやすい衚瀺に倉換するために䜿甚しおいたす。具䜓的には以䞋のような甚途です。 FK 制玄のある列に入る倀FK 参照先テヌブルの ID 列の倀を、アプリケヌションマスタで定矩した論理名に倉換 論理名自䜓も FK 参照先テヌブルの倀を䜿甚しおいたす。䟋えば、囜マスタの ID を囜名論理名に倉換するような凊理が可胜です。 曎新察象行の䜜成者/曎新者列に入る倀ナヌザ IDを、ナヌザの氏名衚瀺に倉換 ナヌスケヌスに応じお Mutators/Accessors を䜿い分けられる点も含めお機胜自䜓が䟿利なこずはもちろん、デヌタの加工・倉換ロゞックは自由に実装できるようなラむブラリの䜜りずなっおいたため、FK 制玄のようにやや耇雑な倉換ロゞックにも察応できたした。たた、倉換ロゞックに該圓しないようなデヌタはそのたた倉換せず衚瀺するこずも可胜であるため、柔軟性も持たせるこずができおいたす。   たずめ 正盎、このラむブラリなしでの本アプリケヌションの実装はなかなか厳しかったのでは、ず感じるレベルではお䞖話になりたした。テヌブル/衚の線集機胜が必芁ずなるようなアプリケヌションの実装では今埌積極的に䜿甚しおいこうず思えるレベルで䜜りが良かったです。 最も、躓いた点もいく぀かあったこずはあったので、機䌚があれば別゚ントリでたずめおみたいず思いたす。 本蚘事がどなたかの圹に立おば幞いです。
こんにちは、 池田です。 LifeKeeperの賌入前に、「LifeKeeper」がどういう補品か知りたいこずっおありたすよね ネットで怜玢したり、メヌカヌ公匏ホヌムペヌゞを芳たり、TechHarmonyを芳たり、様々な確認方法があるかず思いたすが、補品仕様の现かなずころなどはどうしおも蚘茉されおいないケヌスがあるず思いたす。 賌入前なのに質問できたす そんな時はなんず賌入前でも、メヌカヌであるサむオステクノロゞヌ瀟のサポヌトに質問するこずができるんです サポヌトぞのお問い合わせ方法 – SIOS LifeKeeper/DataKeeper User Portal たず、䌚瀟名、郚眲名、氏名、メヌルアドレス、連絡先電話番号を入力しおください。 その埌に「お問い合わせ内容のカテゎリ」を遞択したす。 遞択肢は以䞋の通りです。 ■お問い合わせ内容のカテゎリ ・䟡栌/構成 ・機胜/動䜜 ・構築環境 ・実瞟/事䟋 ・その他 「お問い合わせ内容」を蚘茉しお、個人情報の提䟛にチェックを入れお、最埌に「私はロボットではありたせん」の手続きを螏んでください。 たったこれだけで、サむオステクノゞヌ瀟からお問い合わせに察する回答を埗られたす。 たた䜕らかのミドルりェアの構築をご怜蚎でしたら、LifeKeeperのSI&サポヌトパヌトナヌ(ゎヌルド)のSCSKたでメヌルにおお問合せください。 SCSK株匏䌚瀟 LifeKeeperチヌム メヌルアドレス LK@scsk.jp 公匏ホヌムペヌゞ 「LifeKeeper」で安定皌働を実珟  SCSK株匏䌚瀟 お問い合わせ・ご盞談 HAクラスタヌ゜フトりェア「LifeKeeper」 お問い合わせ SCSK株匏䌚瀟 20幎以䞊に枡る豊富な蚭蚈、構築、サポヌト実瞟から、お客様の求める可甚性の実珟のお手䌝いをさせおいただきたす。 それぞれの䜿い分けずしおは、補品仕様など最新情報の入手時にはサむオステクノロゞヌ瀟のWebフォヌムから、 SIをご垌望、構築可胜な構成、LifeKeeperに留たらない様々なパタヌンの可甚性提案をご垌望されるような時にはぞ問い合わせするなどしおいただければず思いたす。 もし LifeKeeperチヌムでお答えできない堎合でも、瀟内の有識者やサむオステクノロゞヌ瀟ず連携しながら、お客様の疑問にお答えさせおいただきたす たずめ 今回は、賌入前の問い合わせ方法に぀いおご玹介したした。 問い合わせ方法は倧きく぀ありたす。 ・サむオステクノロゞヌ瀟の公匏サむトのWebフォヌムから問い合わせる ・のメヌルアドレスに問い合わせる ・の公匏サむトのお問い合わせ・ご盞談Webフォヌムから問い合わせ
Amazon EC2 の倖からOSコマンドを実行させるには、AWS Systems Manager (SSM) の SendCommand を甚いるのが垞道だず思いたすが、環境䞊の制玄で䜿甚できない堎合もあるかず思いたす。そこでSSMを䜿甚するこずなく、OSコマンドを実行させるシンプルな仕組みを䜜っおみたす。 (sshでのコマンド実行は自明ですし、AWSに関係ないのでここでは觊れたせん。)   Systems Manager(SSM)ずSendCommandに぀いお 先ずはSSMずSendCommandに぀いお軜く觊れたす。 SSMの SendCommand ずは、SSMのマネヌゞドノヌドずなっおいるEC2に察しお、EC2の倖からOSコマンドを送っお実行できたす。 「倖から送っお」ず曞くず、EC2に倖からコマンドが入っおくる圢のように思えたすが、実際にはEC2で皌働しおいるssm-agent がSSMの゚ンドポむントに察しおポヌリングしおおり、 コマンドを取っおくる 圢になっおいるず思われたす。 (そうでなければEC2ぞのむンバりンド通信蚱可を必芁ずするはずですが、実際にはそんなこずはしたせん。) この構成を真䌌するこずにしたす。  æ§‹æˆã®æŠ‚èЁ 䞊図の構成ずしたす。SSMの䜍眮にSQSを配眮し、そこにOSコマンドを入れる。EC2はQueueを定期的に監芖するシェルスクリプトを垞駐させお、キュヌにコマンドが入っおいればそれをフェッチしお実行したす。芁するにssm-agentの簡易版で眮き換えた圢だずいうだけです。(がっかりした人はすみたせんm(_ _)m ) 以䞋、EC2ずSQSの内容に぀いお簡単に述べおおきたす。 SQSに぀いお キュヌは以䞋の構成ずしたす。 暙準キュヌであるずいうこずず、メッセヌゞ保持を1分にしおいたす。あたり長くするずagent圹のshellの障害時などにキュヌにコマンドがたたり、思わぬ昔のコマンドが実行されおしたうこずを防いでいたす。1分以䞊フェッチされなければそのコマンドは実行されたせんが、そこは割り切っおいたす。たた、キュヌポリシヌは適圓に蚭定したす。 EC2に぀いお シェルが動けば䜕でもいいですが、䞊蚘SQSキュヌに察しお、 sqs:ReceiveMessage および sqs:DeleteMessage の暩限が必芁ですので、EC2にアタッチするIAMロヌルに付䞎しおおきたす。   ポヌリングスクリプトずサヌビス化 ポヌリングスクリプト ポヌリングシェルは以䞋のように䜜成しおみたした。シェルの詳现に぀いおはこの話題の䞻題ではありたせんので现かくは觊れたせん。 #!/bin/bash # SQSキュヌURL (適宜倉曎) QUEUE_URL="https://sqs.ap-northeast-1.amazonaws.com/xxxxyyyyzzzz/TestQueue" # ログディレクトリずファむル蚭定 LOG_DIR="/var/log/command-execution" LOG_FILE="$LOG_DIR/command_execution.log" # ログディレクトリの䜜成 if [ ! -d "$LOG_DIR" ]; then sudo mkdir -p "$LOG_DIR" sudo chown ec2-user:ec2-user "$LOG_DIR" sudo chmod 755 "$LOG_DIR" fi # ログファむル䜜成 touch "$LOG_FILE" chmod 644 "$LOG_FILE" echo "[$(date)] SQS polling service started." >> "$LOG_FILE" while true; do # SQSからメッセヌゞ取埗 RESPONSE=$(aws sqs receive-message \ --queue-url "$QUEUE_URL" \ --max-number-of-messages 10 \ --wait-time-seconds 10 \ --output json 2>/dev/null ) # RESPONSEが空ならデフォルト倀を蚭定 if [ -z "$RESPONSE" ]; then MESSAGE_COUNT=0 else MESSAGE_COUNT=$(echo "$RESPONSE" | jq '.Messages | length' 2>/dev/null) if [ -z "$MESSAGE_COUNT" ]; then MESSAGE_COUNT=0 fi fi if [ "$MESSAGE_COUNT" -gt 0 ]; then echo "$RESPONSE" | jq -c '.Messages[]' | while IFS= read -r MESSAGE; do # ReceiptHandleずBodyを安党に取埗 RECEIPT_HANDLE=$(echo "$MESSAGE" | jq -r '.ReceiptHandle' 2>/dev/null) COMMAND=$(echo "$MESSAGE" | jq -r '.Body | @sh' 2>/dev/null | sed "s/^'//;s/'$//") # 無効メッセヌゞ刀定 if [ -z "$RECEIPT_HANDLE" ] || [ -z "$COMMAND" ]; then echo "[$(date)] Warning: Invalid message detected. Skipping..." | tee -a "$LOG_FILE" continue fi # コマンド実行 TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S") echo "[$TIMESTAMP] Executing command: $COMMAND" | tee -a "$LOG_FILE" { echo "----- START: $COMMAND -----" eval "$COMMAND" EXIT_CODE=$? echo "Exit Code: $EXIT_CODE" echo "----- END: $COMMAND -----" } >> "$LOG_FILE" 2>&1 # メッセヌゞ削陀 DELETE_RESPONSE=$(aws sqs delete-message --queue-url "$QUEUE_URL" --receipt-handle "$RECEIPT_HANDLE" 2>&1) if [ $? -eq 0 ]; then echo "[$(date)] Command executed and message deleted." | tee -a "$LOG_FILE" else echo "[$(date)] Error deleting message: $DELETE_RESPONSE" | tee -a "$LOG_FILE" fi done fi sleep 5 done 5秒(sleep 5)ごずに指定のキュヌからメッセヌゞの取埗を詊みたす。この倀はSQSの料金に圱響したす。 コマンド実行埌はメッセヌゞを削陀しおいたす。 たた、受け取ったコマンドず実行結果をログに出力するようにしおいたす。オプションでこのログをCloudWatch Logs に連携しおもいいでしょう。配眮堎所は/usr/local/bin/sqs-polling.sh ずしたす。パヌミッションは適圓に぀けおおきたす。 サヌビス化 䞊蚘スクリプトをサヌビス化するため、systemdのナニットファむルを䜜成したす。 [Unit] Description=SQS Polling Service After=network.target [Service] ExecStart=/usr/local/bin/sqs-polling.sh Restart=no User=ec2-user Environment="PATH=/usr/bin:/usr/local/bin" [Install] WantedBy=multi-user.target 䞊蚘を/etc/systemd/system/sqs-polling.service ずしお保存しお、以䞋コマンドでサヌビス起動・確認したす。active(running)を確認しおください。 sudo systemctl daemon-reload sudo systemctl start sqs-polling.service sudo systemctl status sqs-polling.service 動䜜確認 ではキュヌにコマンドを眮いおみたす。簡単にSQSのマネコンから実行したす。loggerコマンドで/var/log/messagesに文字列を吐き出しおみたす。   /var/log/messages Feb 28 14:25:59 ip-10-0-0-210 sqs-polling.sh[5414]: [2025-02-28 14:25:59] Executing command: logger "hello . Tech Harmony!!!!!!!!!!!!!!!!!!!!!!!!!!" Feb 28 14:25:59 ip-10-0-0-210 ec2-user[5415]: hello . Tech Harmony!!!!!!!!!!!!!!!!!!!!!!!!!! Feb 28 14:26:01 ip-10-0-0-210 sqs-polling.sh[5422]: [Fri Feb 28 02:26:01 PM JST 2025] Command executed and message deleted. シェルのログファむル [2025-02-28 14:25:59] Executing command: logger "hello . Tech Harmony!!!!!!!!!!!!!!!!!!!!!!!!!!" ----- START: logger "hello . Tech Harmony!!!!!!!!!!!!!!!!!!!!!!!!!!" ----- Exit Code: 0 ----- END: logger "hello . Tech Harmony!!!!!!!!!!!!!!!!!!!!!!!!!!" ----- [Fri Feb 28 02:26:01 PM JST 2025] Command executed and message deleted. ずなっお動䜜が確認できたした。 キュヌにコマンドを眮くこずができれば䜕でもいいので、䟋えばLambda関数が該圓キュヌにOSコマンドをputすれば、Lambdaが間接的にEC2のOSコマンドを打ったこずになりたす。 最埌に EC2から他のAWSサヌビスぞの連携はAWS CLIなどを䜿えば容易なのですが、AWSサヌビスからEC2(の䞭)ぞの連携は手段が限られおいるように感じたしたので、少し考えお䜜成しおみたした。 芁点は、EC2から倖郚の状態を取りに行く、ずいう点です。ここではSQSを䟋にしたしたが、S3などを考えおも面癜いでしょう。 (定期的にS3のあるオブゞェクトの存圚を確認し、存圚すればダりンロヌドしお(以䞋略)) やったこずはssm-agentの超簡易版を䜜成したに過ぎたせんが、そこたで耇雑でないこずはわかっおいただけたず思いたす。 コマンドの結果をサヌビス偎で知るにはもうちょっず考える必芁はありそうです。 SSMが䜿えるならそちらを䜿うべきだずは思いたすが、色々な制限でそれが叶わない堎合の遞択肢ずしお、皆様の参考になれば幞いです。 コヌドの䜿甚は自己責任でお願いいたしたす。
本蚘事は 新人ブログマラ゜ン2024 の蚘事です 。 こんにちは。入瀟䞀幎目の曲枕です。 珟圚はAWSの技術習埗に向けお勉匷しおいる最䞭です。その際に AWS Cloud9 を䜿ったAWSのハンズオンを実斜したのですが、私のAWSアカりントではCloud9が䜿甚できなくなっおいたした。そこで本蚘事では、私ず同じような状況になっおいる方や今幎入瀟される方の参考になればず思い、Cloud9に代わるサヌビスをご玹介させおいただこうず思いたす。 背景 AWS Cloud9 ずは AWSが提䟛するサヌビスの䞀぀で、 ブラりザを通じおクラりドベヌスでコヌドの蚘述、実行、デバッグができる統合開発環境(IDE) です。利点ずしお、リアルタむムで共同䜜業ができるこずや必芁なツヌルなどがあらかじめ蚭定されおおり、開発環境のセットアップが簡単なこずが挙げられたす。 そんなCloud9ですが、私のAWSアカりントでサヌビスにアクセスしようずするず、以䞋のような衚瀺が出たす。   原因は AWSが2024幎7月25日以降のCloud9を含むいく぀かのサヌビスで新芏利甚受付を終了 したためです。そのため、新人の方で私のように配属された埌にAWSアカりントを䜜成した堎合は、Cloud9が䜿甚できなくなっおいたす。もしかするず案件などでお客様偎からAWSアカりントを払い出しおもらった方も同じ状況かもしれたせん。 2024幎7月25日以前にAWSアカりントでCloud9を䜿甚されおいた方は珟圚でも利甚可胜です この問題を解決するために、この蚘事ではCloud9の代替策ずなる3぀のサヌビスの抂芁に぀いお蚘述したす。   Cloud9の代替えサヌビス ご玹介させおいただくサヌビスは以䞋の3぀です。   Amazon SageMaker Studio コヌド゚ディタ 抂芁 Amazon SageMaker Studio コヌド゚ディタはAmazon SageMakerの機胜の䞀郚です。任意のVPC内に眮くこずができたりなど、ほがCloud9ず同等の環境を構築するこずができるずいうメリットがありたす。デメリットずしおは起動・削陀に時間がかかるこずやリ゜ヌスを消したい堎合にドメむンやナヌザヌの削陀も必芁な点が少し面倒です。たた、デフォルトでdocker コマンドが䜿えないため、コンテナを䜿うためにDockerfileのむメヌゞをリポゞトリにプッシュしたいずきなどはdockerコマンドのむンストヌルが別途必芁になりたす。   AWS CloudShell 抂芁 AWS CloudShell は Amazon Linux 2023 ベヌスのブラりザから操䜜できるシェル環境です。無料で䜿甚するこずができ、すぐに実行できるずいうメリットがありたす。ファむルのアップロヌド、ダりンロヌドも可胜です。しかし、デフォルトのディスク容量が1GBのみのため、倧きなファむルを実行するのには䞍向きずいうデメリットがありたす。たた、任意のVPC内に眮くこずもできたせん。   Amazon CodeCatalyst 抂芁 Amazon CodeCatalystは開発者が゜フトりェアを迅速に構築、テスト、およびデプロむできるように蚭蚈された統合゜フトりェア開発サヌビスです。CI/CDパむプラむン (゜フトりェアの倉曎を自動でテストし、ビルドし、デプロむするプロセス)を簡単に実珟するこずができ、Cloud9のむンスタンスを立ち䞊げるこずができるメリットがありたす。しかし、珟圚2025幎2月25日は東京リヌゞョンで䜿甚するこずができず、米囜オレゎンリヌゞョンず欧州アむルランドリヌゞョンのみで䜿甚可胜ずなっおいたす。たたAWS Builder IDの䜜成などの初期蚭定が必芁ずいうデメリットがありたす。   たずめ 今回はCloud9の代替サヌビスの抂芁に぀いお簡単にたずめおみたした。案件によっおは䜿えないサヌビスなどもあるかず思いたすが、勉匷のためのハンズオンの参考になれば幞いです。構築手順に぀いおは参考資料を芋おいただければず思いたす。たた、Cloud9のほかに以䞋のサヌビスも新芏利甚の受付を終了しおいるようです。 S3 Select CloudSerch SimpleDB Forecast Data Pipeline CodeCommit   参考資料 AWS Cloud9が突然、新芏利甚䞍可に 代替策「SageMaker Studio コヌド゚ディタ」の利甚手順 #cloud9 – Qiita AWS CloudShell を早速䜿っおみたした #reinvent – Qiita 【CodeCatalyst 入門①】CodeCatalystの初期蚭定方法 | わかるブログ Amazon CodeCatalyst 觊っおみた! #AWS – Qiita
こんにちは、SCSK株匏䌚瀟の谷です。 前回、新たに私たちの郚眲に新入瀟員ずしお加わった嶋谷さんが、 Mackerel を䜿っおAWS環境のDocker情報を可芖化する方法ず結果 に぀いおの蚘事を掲茉したした。 ご芧になっおいない方は、ぜひ目を通しおみおください。 Mackerel で Docker を監芖しおみた – TechHarmony 今回は、MackerelにおAWSのサヌバヌレスサヌビスを監芖し可芖化したした。 監芖察象のシステムに぀いお 今回の怜蚌のため、AWSが提䟛しおいるハンズオンから簡易的なWebアプリを構築したした。 名前を入力しボタンを遞択するず、「Hello from Lambda」で始たり入力したテキストが続くメッセヌゞが衚瀺されるWebアプリです。 Webアプリの構成は以䞋の図になりたす。   構成しおいるサヌビスの䞭で今回は以䞋を䜿甚しお怜蚌をしたした。 Amazon DynamoDB    完党マネヌゞド型の NoSQL デヌタベヌスサヌビス Amazon API Gateway   APIの䜜成および管理を簡単に行えるフルマネヌゞドサヌビス AWS Lambda        サヌバヌレスコンピュヌティングサヌビス 䞊蚘環境の構築手順に぀いお、この蚘事では説明を省略させおいただきたす。 詳しく知りたい方は、以䞋に詳现な構築手順が茉っおいたすので、こちらをご芧ください。 AWS で基本的なりェブアプリケヌションを構築する Mackerelでの監芖蚭定手順 ここではMackerelで各サヌビスを監芖するための蚭定手順に぀いお蚘茉しおいたす。 蚭定手順の詳现に぀きたしおは、Mackerel公匏ヘルプをご参照ください。 AWSむンテグレヌション – Mackerel ヘルプ 蚭定手順に぀いお興味のない方は、このパヌトはスキップしお「 Mackerel䞊で監芖デヌタの確認 」のパヌトに飛んでください。 むンテグレヌション甚のIAMロヌルの䜜成 (1) Mackerelの管理画面で「オヌガニれヌション名」「AWSむンテグレヌション」をクリックする。 (2)「新しいAWSむンテグレヌションを登録」ずいうボタンが衚瀺されるため、それをクリックする。 (3) 基本蚭定AWSアカりント 倖郚IDをコピヌする。 (4) AWSのコン゜ヌルにログむンし、巊䞊の怜玢バヌで「IAM」ず入力し、゚ンタヌを抌す。 (5) 巊偎のタブからロヌルを遞択し、「ロヌルを䜜成」をクリックする。 (6) 以䞋に沿っお入力し、すべお入力埌、「次ぞ」をクリックする。 信頌された゚ンティティタむプ  AWSアカりント AWSアカりント         ïŒš 別のAWSアカりント アカりントID                         217452466226共通 オプション           倖郚IDを芁求する (7) 今回はLambda、API Gateway、DynamoDBを監芖したいため、それらに関するReadOnlyロヌルを遞択し、「次ぞ」をクリックする。 (8) ロヌル名ず説明を適宜入力し、「ロヌルを䜜成」をクリックする。 (9) 䜜成したロヌルの詳现画面で衚瀺される、ARNをコピヌする。 AWSむンテグレヌションの䜜成 (1) Mackerelの管理画面に戻り、先ほど開いた「新しいAWSむンテグレヌションを登録」画面を開く。   そこで、名前の入力ずリヌゞョンの遞択を行い、ロヌルARNの欄に先ほどコピヌしたARNを貌り付ける。 (2) メトリックを収集するサヌビスで、Lambda、API Gateway、DynamoDBを遞択する。   他の取埗可胜なサヌビスに぀きたしおは以䞋の公匏ヘルプの「 察応しおいるクラりド補品 」を参照ください。       AWSむンテグレヌション – Mackerel ヘルプ (3) 「タグを指定しお登録するホストを絞り蟌む」にお連携したいリ゜ヌスのタグ、陀倖したいタグを入力する。 (4)「䜜成」をクリックする。 これで、むンテグレヌションが䜜成できたした 連携確認 以䞊で蚭定は完了です。 ここからは、監芖蚭定を入れたサヌビスの状態を芋おみたしょう。 ここたでの手順が完了するず、Mackerelの管理画面の「ホスト」のずころですぐに確認するこずができたす。 このように、Lambda、API Gateway、DynamoDBの3぀のデヌタが取れおいるこずがわかりたす。 Mackerel䞊で監芖デヌタの確認 蚭定䜜業はいかがでしたか 思っおいたより簡単に監芖ができるず感じた方が倚いのではないでしょうか。 では、ここからはAWSから連携された監芖デヌタがどのように芋えおいるかを、サヌビスごずに䞀郚抜粋しおお芋せしたいず思いたす。 API Gateway Mackerelではリ゜ヌスごずにAPI Gatewayを監芖するこずができたす。 API Gatewayでは、基本的に以䞋のメトリックを取埗できたす。 詳现はMackerel公匏ヘルプをご参照ください。 AWSむンテグレヌション – API Gateway – Mackerel ヘルプ グラフ名 メトリック 説明 Requests Count 指定期間内のAPIリク゚ストの合蚈数 Errors 4XXError クラむアント偎の゚ラヌ数 5XXError サヌバヌ偎の゚ラヌ数 Cache CacheHitCount APIキャッシュから提䟛されたリク゚ストの数 CacheMissCount バック゚ンドから提䟛されたリク゚ストの数 Latency Latency クラむアントからリク゚ストを受け取っおからレスポンスを返すたでの時間 IntegrationLatency バック゚ンドにリク゚ストを䞭継しおからレスポンスを受け取るたでの時間 今回は、この䞭のRequestsのグラフをお芋せしたす。 こちらのグラフは、APIのリク゚スト数を可芖化したグラフになりたす。 このデヌタを芋れば、どのタむミングでリク゚スト数が増えおいるかを芖芚的に確認するこずができたす。 DynamoDB MackerelではDBリ゜ヌスごずにをDynamoDBを監芖するこずができたす。 DynamoDBでは、基本的に以䞋のメトリックを取埗できたす。 詳现はMackerel公匏ヘルプをご参照ください。 AWSむンテグレヌション – DynamoDB – Mackerel ヘルプ グラフ名 メトリック 説明 ReadCapacityUnits ProvisionedReadCapacityUnits プロビゞョンドされた読み取りキャパシティナニットの数 ConsumedReadCapacityUnits 読み取り操䜜で消費されたキャパシティナニットの数 WriteCapacityUnits ProvisionedWriteCapacityUnits プロビゞョンドされた曞き蟌みキャパシティナニットの数。 ConsumedWriteCapacityUnits 曞き蟌み操䜜で消費されたキャパシティナニットの数 Requests ConditionalCheckFailedRequests 条件付き曞き蟌みや曎新操䜜が倱敗したリク゚ストの数 SuccessfulRequestLatency 成功したリク゚ストのレむテンシヌ ThrottledRequests スロットルされたリク゚ストの総数 UserErrors ナヌザヌによっお匕き起こされた゚ラヌの数 SystemErrors DynamoDB内郚で発生したシステム゚ラヌの数 ThrottleEvents ReadThrottleEvents 読み取り操䜜がスロットルされた回数 WriteThrottleEvents 曞き蟌み操䜜がスロットルされた回数 TimeToLiveDeletedItemCount TimeToLiveDeletedItemCount TTL機胜によっお削陀されたアむテムの数 SuccessfulRequestLatency SuccessfulRequestLatency 成功したリク゚ストのレむテンシヌ ReturnedItemCount ReturnedItemCount ク゚リやスキャン操䜜で返されたアむテムの数 RequestCount ReturnedItemCount ク゚リやスキャン操䜜で返されたアむテムの数 TransactionConflict TransactionConflict トランザクションの競合が発生した回数 今回は、この䞭のWriteCapacityUnitsグラフをお芋せしたす。 こちらのグラフは、DynamoDBぞの曞き蟌みで消費されたキャパシティナニット数を瀺したグラフになっおいたす。 このデヌタを芋るこずで、キャパシティを超えるような曞き蟌みが行われおいないかを芖芚的に確認するこずができたす。 Lambda Mackerelでは関数単䜍ごずにLambdaを監芖するこずができたす。 Lambdaでは、基本的に以䞋のメトリックを取埗できたす。 詳现はMackerel公匏ヘルプをご参照ください。 AWSむンテグレヌション – Lambda – Mackerel ヘルプ グラフ名 メトリック 説明 Count Invocations 関数が呌び出された回数 Errors 関数の実行䞭に発生した゚ラヌの数 DeadLetterErrors デッドレタヌキュヌぞの送信倱敗回数 Throttles スロットルされた呌び出しの数 Duration [ms] Duration 関数の実行時間 Iterator Age [ms] IteratorAge ストリヌムむベントの凊理遅延時間   今回ぱラヌが分かりやすいようにCountグラフをお芋せしたす。 こちらのグラフは、Lambdaの実行回数invocationsず゚ラヌ回数errorsを瀺したグラフになっおいたす。 ゚ラヌをグラフ䞊に衚瀺させるため、14:15頃から LambdaからDynamoDBぞの曞き蟌み暩限ロヌルを䞀時的に削陀したした 。 このデヌタを芋れば、い぀どのタむミングで゚ラヌが発生し始めたのかを芖芚的に確認するこずができたす。 今回ご玹介したグラフはそれぞれ1぀ず぀でしたが、かんたんなカスタムをすれば様々なグラフを䜜成するこずも可胜です。 興味がある方はぜひ調べおみおください。 終わりに 蚘事の内容は以䞊になりたす。いかがでしたでしょうか。 今回初めおMackerelにお監芖蚭定をいれたのですが、UIも盎感的で操䜜しやすくスムヌズに蚭定を入れるこずができたした たた、公匏ドキュメントも豊富でしたので、疑問点や䞍明点を解決しやすいずころも非垞にやりやすかったです。 たた、Amazon CloudWatchだず少し手間だず感じおいたしたが、 蚭定したいメトリクスを簡単に耇数たずめお蚭定できる ずころがMackerelの優れおいる点だず今回蚭定しおみお感じたした。 もう少しMackerelを觊っおみようず思いたすので、たた䜕か気づきがありたしたら蚘事を掲茉したす。 最埌たでお付き合いいただき、ありがずうございたした。
はじめに 今回は今幎の1月にリリヌスされたアクションプランずいう機胜の説明ず䜿い方を曞いおいきたす。 アクションプランずは アクションプランずは、リスクのあるリ゜ヌスが䞀芧化されおおり、そのリ゜ヌスに察し最小限のアクションでリスク軜枛をできるように調敎された効果的な修埩手順を提䟛し、クラりドリ゜ヌスの保護に圹立おるこずができたす。 アクションプランの䜿い方 ここからはアクションプランの䜿い方に぀いお解説しおいきたす。 アクションプラン担圓者の割り振り Prisma Cloud コン゜ヌルにログむンしたす。 このずき「System Admin」でログむンしおいるこずを確認したす。 䞊のバヌから「アクションプラン」を抌䞋したす。 以䞋画像のように遷移したす。 各アクションプランには人を割り圓おるこずもできたす。 赀線郚分の「Unassigned」郚分を抌䞋し、担圓する人を遞択するこずができたす。 担圓者を蚭定した埌に「Assigned to me」を抌䞋する自分がどのアクションプランを担圓するか確認するこずができたす。 フィルタヌの「譲受人」の郚分でほかの人が担圓するアクションプランを確認するこずもできたす。 逆に担圓者が割り圓おられおいないものは「Unassigned Action Plans」から確認するこずができたす。   アクションプランを解決する堎合 Prisma Cloud コン゜ヌルにログむンしたす。 このずき「System Admin」でログむンしおいるこずを確認したす。 䞊のバヌから「アクションプラン」を抌䞋したす。 以䞋画像のように遷移したす。 察象のアクションプランを抌䞋しお展開するず、察象のアクションプランのプラむマリアセットず抂芁、その圱響がずがでおきたす。 「プラむマリアセット」はどのリ゜ヌスが察象なのか衚瀺されおいたす。 「抂芁」は圱響を受けるリ゜ヌスの抂芁の説明が衚瀺されおいたす。 「圱響」は攻撃パス、アラヌト、脆匱性が衚瀺されおいたす。 展開埌、「修正方法」を抌䞋するず解決方法の手順が出おくるので手順実行しお修正完了です。 ※修正方法に蚘茉がありたすが、「倧芏暡な蚀語モデルやその他の生成AIを掻甚する堎合があり、゚ラヌが含たれる堎合がありたす。」ずいうこずなので泚意が必芁です さいごに アクションプランを䜿甚しお簡単にクラりドリ゜ヌスのリスクを枛らせるようになったのでずおも良い機胜だず思いたす。 圓瀟では、耇数クラりド環境の蚭定状況を自動でチェックし、蚭定ミスやコンプラむアンス違反、異垞行動などのリスクを蚺断するCSPM゜リュヌションを販売しおおりたす。 マルチクラりド蚭定蚺断サヌビス with CSPM SCSK株匏䌚瀟 CSPM  Smart One Cloud Security® Powered by Prisma Cloud from Palo Alto Networks  SCSK株匏䌚瀟 ご興味のある方は是非、お気軜にお問い合わせください。
瀟内開催の AWS GameDay に参加しおきたした。AWSのワヌクショップ圢匏のむベントは初参加です 興味はありたしたが、普段の案件はWeb/APのむンフラ構築案件が倚く、䜿うサヌビスややり方がほが固定で、 参加したは良いけど党然出来なかったらどうしよう、知らないサヌビスばっかりだったらどうしようず思い、尻蟌みしおいたした。 今回瀟内メンバヌのみ、初心者向けの難易床ずいうこずで、これを逃したら二床ず参加出来る気がしないず思い参加しおみたした。 自分に぀いお 普段はクラりドのむンフラ構築案件をしおいたす。 最近はGoogle CloudやAzure案件をやっおいたすが、5幎ほどAWS案件をやっおいたした。 リヌダずしお管理や調敎が倚くなっおきおおり、実際にコヌドを曞いたり画面を觊っおどうするみたいなずころは時間が取れなくなっおきおいたす。 AWS re:Invent 等のスラむドを芋るようなものには䜕床か参加したこずがありたすが、ワヌクショップ圢匏は未経隓です。 資栌はAWS SAP、DOP、SCSを所有しおいたす。   GameDay 抂芁 実斜内容の詳现は公開NGずのこずだったのでざっくりずした内容のみです。詳现は実際に参加する際のお楜しみにずのこずでした。 今回は瀟内のみの個人申し蟌みで運営の方が3-4人のチヌムを組んでくれたした。 チヌムでAWS䞊に䜜られた仮のシステムで発生しおいる様々な問題を解消しおいきたす。 解消した内容に応じお決められたポむントが入り、その合蚈点で争うチヌム戊です。 問題はある皋床道筋を立おられるような流れになっおいたした。問題文を読んで原因を考え、調査しお問題解決を目指しおいきたす。   良かった点 普段の業務ではやらないやり方や䜿わないサヌビスの問題もありたした。資栌勉匷で文字しか芋おいないようなものを実際に觊っおみるこずが出来およかったです。 資栌取埗時に「なんずなくサヌビスは知っおいる、そういうこずが出来るこずは知っおいる」ずいう知識も意倖ず圹に立ちたす。 メンバヌによっお埗意䞍埗意がある䞭で、「この問題を解きたす」「ここどうする」ずいった䌚話をしお取り組む問題を決めたりサポヌトをするずころがチヌムでやっおいる感があり楜しかったです。 単玔に楜しい。私は自分責ではないトラブルを察応するのが倧奜きなので、今回のGameDayはすごく楜しかったです。   気になった点 初参加なのもあり、楜しかったのであたり気になる点はありたせんでしたが 䞀点だけ申し蟌み前の葛藀がネックになるのかなあず思いたした。 申蟌時の難易床が䞍明 自分のレベルず取り組む問題のレベル感がなかなか分かりにくいず思いたした。私も今回始たるたでずっずドキドキしおいたした。 意倖ず䜕ずかなったのず、いくら悩んでも参加するたでやっぱり分からないのでずりあえず䞀床参加しおみるのがよいず思いたした。 今回はアプリ開発レベルのプログラミング知識は䞍芁で、むンフラで倚少スクリプトの経隓があるようなレベル感で十分でした。   ちょっずしたコツ 問題文はよく読むこず どういうサヌビスを䜿うのか、既に甚意枈みのリ゜ヌスは䜕か、䜜り方に指定は無いか 解くためのヒントが問題文にもありたす。 なんでクリアにならないんだろうかず思ったずきに問題文をゆっくり読んでみたらすぐ解決みたいなこずもありたした。   感想 今回なんずチヌムの順䜍が2䜍でした。4人チヌムが倚い䞭、3人チヌムだったのにすごい 自分が担圓した問題の解決順はそこたで早くなかったのですが、他の方がめちゃ早で凄かったです。 知識ずしおは知っおいるが、いざやっおみるず现かいやり方が分からない、勘違いをしおいたずいった点にも気づけたした。 是非次は瀟倖むベント等含めワヌクショップ圢匏のものに参加しおみたいず思いたす 2䜍賞品参加賞ずしおAWS保冷バッグステッカヌもらいたした
今回は、Prisma CloudのInvestigate機胜を利甚しお、特定の条件に䞀臎するリ゜ヌスを怜玢する方法を解説しおいきたす。 Prisma Cloud の Investigate調査機胜 Prisma CloudのInvestigate調査機胜を䜿甚するず、シンプルで盎感的なむンタヌフェヌスでク゚リを発行するこずができ、芁件にあわせた怜玢をするこずが可胜です。Prisma Cloudで発行されるク゚リはRQLず呌ばれ、Prisma Cloud独自のものずなっおいたす。 怜玢方法は、倧きく分けるず以䞋の぀がありたす。 ① 探したい条件を入力するず衚瀺されるAI支揎の提案からク゚リを遞択しお怜玢する ② ク゚リの条件をコン゜ヌル画面に衚瀺されるフィルタヌ機胜で指定しお怜玢する ③ 怜玢欄にRQL文を盎接入力しお怜玢する 今回は䞊蚘぀の方法をそれぞれ説明しおいきたす。   怜玢しおみる 今回は分かりやすい䟋ずしお、「パブリックIPを持っおいるEC2」をそれぞれの方法で怜玢しおみたいず思いたす。 AI支揎を利甚した怜玢 Prisma Cloudコン゜ヌルの調査タブを衚瀺するず、右偎に「AI支揎が有効」ず衚瀺されおいる怜玢欄以䞋画像参照が出おきたす。 ここに「パブリックIPを持っおいるEC2」ず入力しおみたす。 するず以䞋のように、AIによっお入力内容に圓おはたりそうなク゚リが遞択肢ずしお衚瀺されおきたす。 「AWS EC2 instance is assigned with public IP_RL」ずいう名前のク゚リが今回怜玢したい内容に䞀臎しそうなのでクリックするず、自動でRQL文が入力され、接続しおいるクラりドアカりント䞊に存圚するパブリックIPを持ったEC2の䞀芧が衚瀺されたす。   フィルタ機胜を利甚した怜玢 Prisma Cloudコン゜ヌルの調査タブを衚瀺するず、「ク゚リの皮類を遞択しおください」ずいうフィルタヌが衚瀺されたす。ク゚リには以䞋のような皮類があり、その䞭から芁件に圓おはたるものを遞択したす。 ク゚リタむプ 抂芁 RQL文の圢匏 サポヌトしおいるモヌド アセット 包括的なセキュリティコンテキストを含むすべおのクラりドアセットを衚瀺 ヌ シンプル 蚭定 クラりド API ず JSON ルヌルに基づいお構成ファむルを怜玢 “config from cloud.resource where”から始たる シンプル・䞊玚 脆匱性 お䜿いの環境内で発芋された䞻な脆匱性を調査 ヌ シンプル ネットワヌク蚭定 ネットワヌクパスを探玢し、むンタヌネットに公開されおいるアセットを特定 config from network where”から始たる 侊箚 ネットワヌクフロヌログ ネットワヌクフロヌログを調査しお、むンシデントや脅嚁の怜出ず調査を行う network from vpc.flow_record where”から始たる 侊箚 監査むベント 調査ずフォレンゞックのために監査ログを探玢 event from cloud.audit_logs where”から始たる 侊箚 アプリケヌションアセット ゜フトりェアデリバリヌチェヌンず゚ンゞニアリングのアタックサヌフェスを調査 ヌ シンプル 蚱可(IAM) 取り蟌たれた IAM ポリシヌに基づいおネット リ゜ヌスのアクセス蚱可を衚瀺 “config from iam where”から始たる 侊箚 今回は「パブリックIPを持っおいる」ずいう”蚭定”に圓おはたるEC2を怜玢したいので、「蚭定」を遞択したす。 怜玢察象ずする期間を遞びたす。「远加」をクリックするずフィルタ条件を远加できたす。 今回はEC2の蚭定情報(パブリックIPを持っおいるかどうか)を条件にしたいので、EC2むンスタンスの情報を参照するAPIを指定したす。 条件ずする詳现な蚭定倀は「JSONルヌル」フィルタヌを利甚しお指定しおいきたす。 JSONルヌルを遞択するず以䞋のように実際のJSON圢匏で蚭定項目が衚瀺されるので、条件にしたい蚭定項目をクリックしたす。今回はパブリックIPの倀が入る項目をクリックしたした。 指定した項目がどのようになっおいたら怜知するかを指定したす。 今回は「publicIP」の項目が存圚するパブリックIPを持っおいる※ずいうこずを怜知の条件にしたいので、「exists」を遞択したした。 その他の遞択肢に぀いおは、Prisma Cloudの公匏ドキュメント RQL挔算子 を参照ください。 ※パブリックIPがないEC2のJSONにはそもそも「publicIP」の項目がありたせん 条件を指定できたら「怜玢」をクリックしたす。パブリックIPを持ったEC2の䞀芧が衚瀺されたす。   RQL文を盎接線集しお怜玢 フィルタ機胜を利甚した怜玢の説明で玹介したク゚リタむプで、サポヌトされおいるモヌドに「䞊玚」が含たれおいるク゚リタむプの堎合は、怜玢欄にRQL文を盎接入力しお怜玢するこずができたす。 「蚭定」ク゚リタむプは「䞊玚」モヌドをサポヌトしおいるので実際に詊しおみたす。 PrismaCloudコン゜ヌルの「調査」タブを衚瀺し、「ク゚リの皮類を遞択しおください」をクリックしお「蚭定」を遞択したす。 するず、右偎に「シンプル」ず「䞊玚」を遞択できる箇所が出おくるので、「䞊玚」を遞択したす。 「config from」から始たるRQL文を入力できる欄が出おきたので、以降のRQL文を入力しおいきたす。 盎接テキストを入力しおいくこずも可胜ですし、入力しようずするず遞択肢が衚瀺されるのでそこから遞択しおRQLを䜜成するこずも可胜です。 RQL文が文法的に問題なく怜玢できる状態たで入力するず、RQLの巊暪にあるアむコンが緑色に倉わりたす。 緑色になっおいるこずを確認しお「怜玢」をクリックしたす。 パブリックIPを持ったEC2の䞀芧が衚瀺されたす。   たずめ Prisma CloudのInvestigate調査機胜を利甚しお怜玢をかける方法を3぀ご玹介したした。調査機胜を利甚するこずで、特定の条件に䞀臎するリ゜ヌスの䞀芧を簡単に䜜成できたす。たた、Prisma Cloudのポリシヌはク゚リ(RQL)を利甚しおいるため、個々の環境の芁件に合わせたカスタムポリシヌ䜜成する際にも参考になるかず思いたす。調査機胜を有効掻甚しお、セキュリティずコンプラむアンスの匷化に圹立おたしょう。 今埌も、Prisma Cloud の掻甚方法に぀いお実甚的な情報をお届けできればず思いたす。 たた、圓瀟では、耇数クラりド環境の蚭定状況を自動でチェックし、蚭定ミスやコンプラむアンス違反、異垞行動などのリスクを蚺断するCSPM゜リュヌションを販売しおおりたす。 マルチクラウド設定診断サービス with CSPM| SCSK株式会社 マルチクラりド環境のセキュリティ蚭定リスクを手軜に確認可胜なスポット蚺断サヌビスです。独自の蚺断レポヌトが、運甚䞊の蚭定ミスや蚭蚈䞍備、クラりド環境の仕様倉曎などで発生し埗る問題を可芖化し、セキュリティむンシデントの早期発芋に圹立ちたす。 www.scsk.jp ご興味のある方は是非、お気軜にお問い合わせください。
SCSKの畑です。 2個前の゚ントリ で少し蚀及した通り、倖郚公開されるサヌビスの AWS WAF 蚭定でハマった話に぀いお蚘茉したす。 アヌキテクチャ図 い぀ものや぀です。今回は AWS WAF 蚭定に関連する内容ずいうこずで、察象は以䞋構成においお倖郚からアクセス可胜なサヌビスずなる、Amazon CloudFront、Amazon Cognito、AWS AppSync の3぀です。   背景 さお、その 2個前の゚ントリ においお、お客さんの環境ポリシヌにより CloudFront に AWS WAF を蚭定する必芁があったこずを取り䞊げたした。本アプリケヌションはむンタヌネット䞊に公開せず、アクセスできるネットワヌク/IP アドレスのレンゞを限定する必芁があったためですが、アヌキテクチャ図の通り Cognito ナヌザプヌル及び AppSync の GraphQL API ゚ンドポむントに぀いおも同様にクラむアント端末からアクセスするこずになるため、AWS WAF を蚭定する必芁がありたした。 それらのサヌビスに぀いおも倖郚からアクセスしおくるのは同じようにクラむアント端末の属するネットワヌクであるため、CloudFront ず同じような AWS WAF 蚭定をすれば良いず考え、お客さんにその旚䟝頌しおいたのですが・・   ゚ラヌ発生AppSync お客さんの AWS 環境にアプリケヌション䞀匏を移行しお動䜜確認を行っおいたずころ、バック゚ンド甚 Lambda 凊理を䌎うクラむアント凊理時に以䞋のような゚ラヌが出力されたした。汎甚゚ラヌ衚瀺甚コンポヌネント䞊での扱いから JSON 圢匏です { message: 'Connection failed: {"errors":[{"errorType":"WAFForbiddenException","message":"403 Forbidden" } クラむアント端末䞊のアプリケヌションから Lambda を介さない AppSync API は実行できおいたため圓初はちょっず戞惑ったものの、errorType の通り WAF でアクセス拒吊されおいるこずは分かったので、先述の通りクラむアント端末以倖からのアクセスを蚱可しおいない WAF 蚭定が怪しいこずにすぐ思い至りたした。確かに Lambda も クラむアント端末䞊のアプリケヌションも、AppSync の GraphQL API ゚ンドポむントにアクセスする立堎は同じなので、バック゚ンド甚 Lambda に぀いおもクラむアント端末ず同様に AWS WAF でのアクセス蚱可が必芁なのではないかずいうその時点での掚枬です。 バック゚ンド甚 Lambda が゚ラヌで正垞動䜜しない以䞊、アプリケヌションの移行や動䜜確認も進たないこずず同矩であるため、いの䞀番に察応したした。解決策に぀いおは Cognito 偎ず党く同じなので埌述したす。   ゚ラヌ発生Cognito ナヌザプヌル 䞀方、Cognito ナヌザプヌルに぀いおは、バック゚ンド甚 Lambda から boto3 経由でアクセスする凊理が正垞に動䜜しおいたこず、アプリケヌションの䞀連の動䜜確認でもナヌザ認蚌郚分は特に問題がなかったこずの2点から、圓初はあたり深く理由を考えないたた倧䞈倫なのかなず考えおいたのですが・・ たたたた違う日に Web ブラりザ䞊で開いおいるアプリケヌションログむン䞭をリロヌドしたずころ、TOP ペヌゞにリダむレクトしおしたう事象が発生したした。匊瀟の AWS 環境では事象が再珟しなかったためお客さんの AWS 環境の問題ず考え、圓初は CloudFront や AWS WAF の蚭定あたりに問題があるず考えたのですが、特に原因ずなるような蚭定はありたせんでした。たた、ブラりザのコン゜ヌル䞊にも特に゚ラヌメッセヌゞは衚瀺されおいたせんでした。 そこで改めお TOP ペヌゞぞのリダむレクト履歎を Web ブラりザから远いかけたずころ リロヌドした時点のペヌゞ ⇒ /loginログむン埌の初期凊理ペヌゞ ⇒ /TOPペヌゞ ずいう順番でリダむレクトしおいるこずが分かりたした。アプリケヌション偎のルヌティングロゞックの詳现は 過去の゚ントリ で蚘茉しおいたすが、簡単に敎理するず /login ぞのリダむレクト Cognito ナヌザ未認蚌の堎合のリダむレクトパタヌン / ぞのリダむレクト Cognito ナヌザ認蚌枈みのリダむレクトパタヌン ずなりたす。 ぀たり、䞊蚘のルヌティングロゞックに埓うず、リロヌドした時点では Cognito ナヌザ未認蚌ず刀定されおいるものの、Cognito ナヌザ認蚌自䜓は完了しおいるため / ぞリダむレクトされる時点では Cognito ナヌザ認蚌枈みず刀定されおいるこずになりたす。Nuxt3 によるルヌティングはサヌバ偎でも凊理されるため、フロント゚ンド偎の Lambda で Cognito ナヌザ未認蚌ずみなされおいるのではないかず掚枬したした。そこで、アプリケヌションをデプロむした CloudFront  配䞋のフロント゚ンド甚 Lambda のログを CloudWatch から芋おみるず・・ 2025-02-18T06:41:20.957Z  9dd22dc5-039f-45ee-86f6-b3ce9230ec0a  INFO  ForbiddenException: Request not allowed due to WAF block.   at file:///var/task/.output/server/node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/shared/serde/createUserPoolDeserializer.mjs:11:15   at process.processTicksAndRejections (node:internal/process/task_queues:105:5)   at async fetchUserAttributes (file:///var/task/.output/server/node_modules/@aws-amplify/auth/dist/esm/providers/cognito/apis/internal/fetchUserAttributes.mjs:31:32)   at async runWithAmplifyServerContext (file:///var/task/.output/server/node_modules/aws-amplify/dist/esm/adapter-core/runWithAmplifyServerContext.mjs:20:24)   at async useUserInfo (file:///var/task/.output/server/chunks/build/server.mjs:7155:26)   at async file:///var/task/.output/server/chunks/build/server.mjs:7526:113   at async Object.callAsync (file:///var/task/.output/server/chunks/nitro/nitro.mjs:5850:16)   at async file:///var/task/.output/server/chunks/build/server.mjs:7733:26 { underlyingError: undefined, recoverySuggestion: undefined, constructor: [class AuthError extends AmplifyError] } 1行目にそのものズバリなメッセヌゞ「ForbiddenException: Request not allowed due to WAF block.」が出おいる通り、フロント゚ンド偎の Lambda から Cognito ナヌザプヌルぞのアクセスが WAF によりブロックされおいたこずが分かりたした。 過去の゚ントリ に蚘茉しおいる middleware のコヌド通り、Cognito ナヌザ認蚌されない堎合も今回のように WAF でブロックされた堎合も同じように䟋倖を catch しお /login にリダむレクトしおいるので、このような挙動になったずいうこずになりたす。 䜙談ですが、この原因の切り分けもずいデバッグにはそこそこ時間を芁したした。フロント゚ンド偎 Lambda の CloudWatchLog を芋なければいけないずいうずころに思考が至るたでに時間がかかっおしたったのが原因です。 普段 Nuxt3 の開発をロヌカルで実斜しおいる時はフレヌムワヌク偎が気を利かせおくれお、ロヌカルで立おおいる開発甚サヌバ偎のログも Web ブラりザのコン゜ヌルで出しおくれたりするんですよね。しばらくその感芚でいたので、本来 /login にリダむレクトした際に䞊蚘のような゚ラヌが出るず思っおいたのが出なかったこずもあり、このロゞック以倖でリダむレクトしおしたうようなこずがあり埗るのかみたいなずころに思考が向いおしたっおいたした。その結果、CloudFront なり AWS WAF の蚭定あたりを疑うずころから始めおしたったずいう・・ なお、Cognito ナヌザの認蚌凊理自䜓が正垞に実斜されおいた理由もシンプルで、クラむアント偎の凊理だったためです。そもそも、URL を叩いお衚瀺されたログむン画面にナヌザ/パスワヌドを入力しおログむンしようずしおいる時点で、クラむアント偎の凊理であるこずは自明ですね。。たた、実装の郜合䞊他の AppSync API を叩くような凊理Cognito ナヌザ認蚌が必芁な凊理は基本的にほがクラむアント偎で明瀺的に実行するようにしおいるため、本事象の圱響は出おいたせんでした。このあたりは Nuxt3 で Universal Rendering (Server-Side Rendering) を䜿甚しおいるが故の内容ず思いたす。 ずいうこずで、こちらも埌述する解決策により察応したのですが・・玍埗できない郚分が残りたした。   ゚ラヌ内容の深掘AWS サポヌト問い合わせ ずいうのも、先般の通りバック゚ンドの Lambda 関数から boto3 経由で Cognito ナヌザプヌルにアクセスする凊理は元々問題なく動䜜しおいたためです。AppSync に぀いおは、バック゚ンドの Lambda 関数からも実質的にアプリケヌションからのアクセスず同じように GraphQL API を叩くような実装ずなっおおり、boto3 は䜿甚しおいなかった䜿えなかったため同じように AWS WAF にブロックされるこずも玍埗できたのですが、では boto3 経由のアクセスが AWS WAF にブロックされないのは䜕故なのか ずいうこずで、この点を AWS サポヌトに問い合わせおみたずころ、実に明快な回答を頂きたした。ずいうかドキュメントをもうちょっず読んでから問い合わせれば良かったず思ったくらいには明確に曞いおあったので、少なからず申し蚳ない気分になりたしたが・・   Cognito ナヌザプヌルの堎合 AWS WAF ウェブ ACL とユーザープールの関連付け - Amazon Cognito AWS WAF りェブ ACL を Amazon Cognito ナヌザヌプヌルに関連付けるこずができたす。りェブ ACL は䞍芁な HTTPS リク゚ストをブロックしおログに蚘録できたす。 docs.aws.amazon.com 䞊蚘 URL に蚘茉の通り、正に今回の事象を端的に説明できる内容でした。 AWS 認蚌情報による認蚌を䞍芁ずするパブリックなナヌザヌプヌル API ぞのリク゚ストに察しおは適甚される クラむアント端末やフロント゚ンド甚 Lambda で Cognito 認蚌情報を扱うような凊理に該圓 AWS 認蚌情報による認蚌が必芁なナヌザヌプヌル API ぞのリク゚ストに察しおは適甚されない バック゚ンド甚 Lambda から boto3 を叩くような凊理に該圓 確かに理屈ずいうか考え方ずしおも玍埗できるずころで、AWS 認蚌情報による認蚌が必芁な API に぀いおは認蚌情報の有無がそのたたアクセス制限ずなりたすし、アプリケヌションのログむン凊理においおはその時点で AWS 認蚌情報は持たないログむン埌に Cognito 経由で付䞎される以䞊 API ずしおはパブリックずすべきであり、その䞊でアクセス制限をしたい堎合の機胜ずしお WAF が適甚できるずいうように理解できたした。 たた、先述したような「boto3 経由のアクセスに぀いお蚱可されおいる」ずいう衚珟ももちろん間違っおおり、バック゚ンド甚の Lambda においお boto3 経由で実行しおいたのが AWS 認蚌情報による認蚌が必芁なナヌザヌプヌル API ぞのリク゚ストのみであったため、結果的にそのような挙動になっおいたずいうのが実態でした。これたでの゚ントリやアヌキテクチャ図に蚘茉の通り、バック゚ンド甚 Lambda は AppSync 経由で実行される想定のため、Lambda 内で Cognito の認蚌情報を盎接扱う必芁がないこずから必然的にそのような実装になったずも蚀えるかもしれたせん。   AppSync の堎合 AWS WAF を使用して AWS AppSync API を保護する - AWS AppSync GraphQL AWS WAFりェブ ACL を䜜成し、AppSync API に関連付けお、攻撃から保護する方法に぀いお説明したす。 docs.aws.amazon.com Welcome - AWS AppSync AWS AppSync provides API actions for creating and interacting with data sources using GraphQL from your application. docs.aws.amazon.com こちらも䞊蚘 URL に蚘茉がありたしたが、Cognito ナヌザプヌルの堎合ずは少し考え方が異なるようでした。 AppSync にお䜜成された GraphQL API に WAF が適甚されおいる堎合、同 API ぞのリク゚ストに察しお䞀埋で WAF が適甚される 2぀目 の URL に蚘茉されおいる API ぞのリク゚ストに぀いおは WAF は適甚されない 考え方ずしおはシンプルで、GraphQL を含む AppSync API 自䜓の管理操䜜自䜓には WAF が適甚されず、䜜成した AppSync API を叩くような操䜜に぀いおは WAF が適甚されるずいうように理解できたした。逆に蚀うず、バック゚ンド甚 Lambda の実行ロヌルに appsync:GraphQL が付䞎され察象の GraphQL API を実行できる暩限があっおも、Cognito の堎合ず異なり GraphQL API ぞのアクセスである以䞊 WAF が適甚されるため、先述した通りの挙動ずなったずいうこずですね。䜜成した GraphQL API の゚ンドポむント URL が明瀺的に払い出されるこずも螏たえ、盎感的な仕様だず感じたした。 ちなみに気になったのですが、boto3 に AppSync で䜜成した API を叩くような機胜がないのは䜕故なんでしょうね䞻ずしおフロント゚ンドを含むアプリケヌションから実行される以䞊䜕ずなく boto3 管理甚のラむブラリずいうむメヌゞがあったこずもありboto3 の甚途にそぐわないからかなず勝手に想像しおたのですが、䞀方で Cognito ナヌザプヌルに぀いおはちゃんずナヌザ認蚌機胜あるんですよね。ん機胜ずしおは同じような文脈ずいうか甚途じゃないですかずいう。 Lambda (Python) から AppSync で䜜成した API を叩くのに requests パッケヌゞなどが必芁ずなるのですが、Lambda の 暙準 Python ランタむムには含たれおおらず、レむダヌ経由でむンポヌトしないずいけなかったりしお手間なので、boto3 経由で実行できるようにしおも良いんじゃないかず思うんですけど需芁がないんですかね確かにフロント゚ンドずしおの需芁は少ないかもですが・・ AppSync - Boto3 1.36.26 documentation boto3.amazonaws.com   解決策 ずいうこずで、Lambda 関数から AppSync/Cognito の API ゚ンドポむントを叩きに行く際の IP アドレスに぀いおも蚱可するよう、AppSync 及び Cognito ナヌザプヌルの AWS WAF 蚭定をお客さんに修正頂いおクロヌズず盞成りたした・・が、お気づきの方もいるず思いたすが、この解決策が取れるかどうかは Lambda 関数がどこに構成されおいるかに䟝存したす。デフォルトだず VPC 倖AWS が管理しおいるネットワヌク䞊に構成される以䞊 IP アドレスは䞍定になるず思われ、WAF で指定できない可胜性がありたした。 AWS の IP アドレスレンゞは䞋蚘 URL の通り JSON 情報ずしお取埗できるようですので、Lambda の゚ンドポむント FQDN を解決した際の IP アドレスがどのレンゞ内のものかを突合しお、サヌビス単䜍での IP アドレスレンゞを導入するなどのテクニックがあるようです。ただ、圓然ながら IP アドレスのレンゞが倉曎される堎合もあるため、静的な AWS WAF 蚭定ずしお適甚するこずは運甚䞊難しかったものず思いたす。 AWS IP アドレスの範囲 - Amazon Virtual Private Cloud ip-ranges.json ファむルで、公開されおいる IP アドレス範囲を䜿甚しお、AWS サヌビスに出入りするトラフィックを特定し制埡したす。公開されおいる範囲の倉曎を経時的にモニタリングしたす。 docs.aws.amazon.com 幞いアヌキテクチャ図の通り、お客さん AWS 環境においお Lambda 関数はフロント゚ンド/バック゚ンド甚どちらも VPC 内のプラむベヌトサブネット䞊に構成されおいたため、Lambda から AppSync/Cognito の API ゚ンドポむントを叩きに行く際の゜ヌス IP アドレスずなる、NAT Gateway のパブリック IP アドレスを指定頂き、無事に解決できたした。 なお、本アヌキテクチャにおいお AppSync や Cognito ナヌザプヌルの API を叩くためにはどちらも認蚌が必芁であるため、゚ンドポむント自䜓がむンタヌネットに公開されおいおも倧きな問題ではなかったずは思いたす。ただ、お客さんの環境ポリシヌに適合しなくなるこずも確かなので、その堎合の調敎コストなどを鑑みるず今回のような構成を取れお良かったずいうのが正盎なずころです。   たずめ AppSync に぀いおはアプリケヌションの動䜜に盎接的な圱響があったこずもあっおすぐに察応できたのですが、そのタむミングで Cognito に぀いおももう少し深掘りするべきだったずいうのが反省点です。元々の AWS WAF 導入時の芳点が倖郚アクセスの制限にあったこずが倚少の゚クスキュヌズにはなるかもしれたせんが、構成䞊同じような事象が発生し埗るずいうこずたでは気付いおいただけに。。 たた、AWS WAF を適甚できる他のサヌビスに぀いおも、今回のようにリク゚ストの内容などにより適甚される範囲が倉わりそうだなず感じたので、もし次に觊る機䌚があれば留意しおおきたいず感じたした。 本蚘事がどなたかの圹に立おば幞いです。
抂芁 Azureの既存Prepaymentから新芏Azureテナントのサブスクリプションを払い出しおみたした。 Microsoft Learnに蚘茉されおいる手順を参照するだけですが、私が察応した際にアカりントやサブスクリプションの関連が理解が浅かったため぀たづいたポむントや補足事項を残したす。 この手順はいろいろなラむセンス圢態の䞭での䞀䟋でしかないため、正匏な手順はラむセンス販売䌁業様の案内に沿っおいただければず思いたす。 登堎するリ゜ヌス 既存Prepaymentが玐づくテナントA(䜜成枈み前提) テナントAで新芏䜜成するアカりント所有者B 新芏䜜成するテナントB テナントB䞊で新芏䜜成するサブスクリプションB 甚語等に぀いおは以䞋公匏資料を参照ください。 Microsoft Azure利甚ガむド 手順、補足 テナントBを新芏䜜成する。 䞋蚘URLから新芏テナントBを䜜成する。 Microsoft 365 E3 (Teams なし)     ポむント1→本人確認のセキュリティチェックで電話番号を登録しSMS認蚌か音声通話認蚌を実斜するのですが、匊瀟内からは䞋蚘の゚ラヌずなりたした。匊瀟プロキシが圱響しおいるこずを想定し、匊瀟貞䞎のスマホのブラりザから実行したずころ゚ラヌは解消したした。   2.テナントAでアカりントBを新芏䜜成し有効化する。 ・アカりント所有者の登録゚ンタヌプラむズ管理者の操䜜 Azure portal での EA 課金管理 – Microsoft Cost Management | Microsoft Learn ポむント2→アカりントの远加の䞭で指定する[アカりント所有者のメヌル]で新芏䜜成したテナントBで登録したナヌザのナヌザヌプリンシパル名を指定したす。 ←   ポむント3→有効化埌テナントBのアカりントのプロパティにテナントAの課金アカりント情報も衚瀺されたす。   3.テナントBでサブスクリプションBを新芏䜜成する サブスクリプションの䜜成䞊蚘操䜜で登録したアカりント所有者での操䜜 Enterprise Agreement サブスクリプションを䜜成する – Azure Cost Management + Billing | Microsoft Learn ぀たづきポむントは特にありたせんでした。   以䞊、難しい手順はありたせんが、それぞれの結び付けを理解しおいないずどのテナントでどの操䜜をすればよいかわかりたせんでした。もし同じようなずころで぀たづいおいる方ぞこの情報が届けば幞いです。
こんにちはSCSKの新人、黄です。 前回たでの蚘事では、Rubrikの基本機胜ず、その匷力なランサムりェア察策に぀いお詳しくご玹介したした。倚くの方に興味を持っおいただき、ずおも嬉しかったです 「ただ読んでいない」ずいう方は、ぜひ以䞋の蚘事をご芧ください。 Rubrikずはクラりドオンプレにも察応する次䞖代バックアップ管理を玹介 – TechHarmony Rubrikのランサムりェア察策仕組みずシミュレヌションで確認 – TechHarmony さお、今回ご玹介するのは、Rubrikのもう䞀぀の泚目機胜、「 Rubrik Sensitive Data Discovery 」です。 名前の通り、機密デヌタを怜知し、適切に管理できる機胜です。 興味がある方は、ぜひ詳しく芋おいきたしょう Sensitive Data Discovery ずは 「どこに機密情報があるのか分からない 」 「気づかないうちに重芁なデヌタが公開されおいたらどうしよう 」 「膚倧なデヌタの䞭から機密デヌタを手動で探すのは倧倉 」 䞊蚘のような悩みを解消し、デヌタの安党性を高めるために圹立぀のが Rubrik Sensitive Data Discovery です。 Sensitive Data Discoveryは、蚭定したルヌルに基づいおバックアップデヌタをスキャンし、機密デヌタを自動的に怜出する機胜です。 特に以䞋の 3 ぀のポむントがメリットです。 バックアップデヌタを掻甚したスキャン 通垞の業務デヌタに圱響を䞎えず、バックアップデヌタを掻甚しお機密情報をスキャンできたす。 これにより、負担なくデヌタの安党性を確保できたす。 自動怜出ずリスク分類 蚭定されたルヌルにより、氏名やクレゞットカヌド番号などの機密デヌタを自動で怜出し、リスクレベルを分類できたす 手動での確認䜜業を枛らし、効率的な管理が可胜です。 盎感的なレポヌト機胜 分析結果はダッシュボヌドで可芖化され、どこにリスクがあるのか䞀目で把握できたす。 これにより、迅速な察策が可胜になりたす。 実際に䜿っおみたSensitive Data Discovery シミュレヌション ここたで、Sensitive Data Discoveryに぀いおご玹介しおきたしたが、 「実際の運甚むメヌゞがわからない」  ãšæ„Ÿã˜ã‚‹æ–¹ã‚‚いらっしゃるのではないでしょうか そこで今回は、 VMware vSphere䞊の仮想マシンVM を䟋に、Sensitive Data Discovery を実際に動かすシミュレヌションを解説したす このシミュレヌションを通じお、どのように機密デヌタが怜出され、管理されるのかを具䜓的にむメヌゞしおいただけるず思いたす。 vSphere ず RSCRubrik Security Cloud の連携の仕組み 参考資料 vSphere仮想マシン RSCは、 VMware vSphere 環境  ãšã‚·ãƒŒãƒ ãƒ¬ã‚¹ã«é€£æºã—、仮想マシンVMのデヌタ保護ず管理を実珟したす。 vCenter Server 接続 RSC は vCenter Server ず接続し、VM を自動怜出・管理したす。 耇数クラスタヌ管理 1぀の vCenter を耇数の Rubrik クラスタヌで管理可胜。VM の保護範囲を柔軟に蚭定できたす。 SLA ドメむン適甚 VM に SLA ドメむンバックアップポリシヌを適甚し、自動保護を実珟 シミュレヌションの党䜓像 Sensitive Data Discovery を䜿ったシミュレヌションは、以䞋のような流れで進めおみたした。 ステップ1 Sensitive Data Discovery の基本蚭定 アナラむザヌずポリシヌの䜜成 ステップ2 初期分析 既存の党バックアップデヌタを自動スキャン ステップ3 テストデヌタの準備 機密デヌタあり/なしのファむルを䜜成 ステップ4 Sensitive Data Discovery実行 機密デヌタの怜出 ステップ5 結果確認 ダッシュボヌドで結果を可芖化 ステップ 1: Sensitive Data Discovery の基本蚭定 たず、RSC コン゜ヌルの  「Data Security Posture」  ãƒ¡ãƒ‹ãƒ¥ãƒŒã‚’遞択し、Sensitive Data Discovery の蚭定画面に移動したす。 ここでは、Sensitive Data Discovery の  「脳」  ãšã‚‚蚀える、 アナラむザヌ  ãš   ポリシヌ の2぀の蚭定を行いたす。これらの蚭定を行うこずで、Rubrik が機密デヌタを自動的に怜出し、管理できるようになりたす。 アナラむザヌの蚭定 アナラむザヌは、機密デヌタを怜出するためのルヌルセットです。 Rubrik では、以䞋の2皮類のアナラむザヌを利甚できたす。 事前定矩枈みアナラむザヌ 62皮類 のテンプレヌトから遞択可胜です。 䟋えば、 IPアドレス  ã‚„  Google APIキヌ  ãªã©ã€äž€èˆ¬çš„な機密デヌタのパタヌンを簡単に怜出できたす。 カスタムアナラむザヌ 独自のルヌルを远加可胜です。特定のキヌワヌドやパタヌンに基づいお、柔軟に機密デヌタを定矩できたす。 今回は、 「瀟倖秘」たたは「郚倖秘」 ずいうキヌワヌドを含むファむルを怜出するカスタムアナラむザヌを䜜成したした。 ポリシヌの蚭定 ポリシヌは、アナラむザヌをどのオブゞェクトに適甚するかを指定したす。 これにより、特定の環境に特化したSensitive Data Discoveryが可胜になりたす。 具䜓的な操䜜ずしお、 たずポリシヌに含たれるアナラむザヌを確認し、ポリシヌの名称を蚭定したす。 今回䜿甚するのはカスタムで䜜成した 「Japan Confidential」 アナラむザヌです。 なお、1぀のポリシヌに耇数のアナラむザヌを含めるこずも可胜です。 次に、分析察象のオブゞェクトを指定したす。 ここで特に重芁なのは、 SLA ドメむンルヌルが蚭定されおいるオブゞェクトのみが機密デヌタ分析の察象になる ずいう点です。 SLAドメむンルヌルずは、 「このデヌタをどのように保護するか」を決めるルヌル のこずです。䟋えば、「毎日バックアップを取る」「1幎間保存する」ずいった蚭定が含たれたす。このルヌルが適甚されおいないオブゞェクトは分析できないため、事前に蚭定を確認しおおく必芁がありたす。 Rubrik は䞋図のような 2 ぀の方法を提䟛しおおり、 オブゞェクトタむプ別 特定のオブゞェクトを遞択する方法 クラスタヌ別 Rubrik CDM を指定し、CDM 配䞋のすべおの SLA ドメむンを持぀オブゞェクトを分析する方法 今回は、特定の vSphere の仮想マシンを分析するため、1 ぀目の「 オブゞェクトタむプ別 」を遞択したす。 以䞋の図のように、Rubrik は耇数のプラットフォヌムず連携しおおり、異なる環境に存圚するオブゞェクトも RSCRubrik Security Cloudを通じお䞀元管理できたす。これも Rubrik の倧きな利点の䞀぀です。 今回ずしおは、vSphereプラットフォヌムをクリックしお、特定のVMを遞択したす。 ステップ 2: 初期分析 ポリシヌ蚭定埌、Rubrik は 自動的に 初期分析を行いたす。 初期分析では、察象ずなるVMのすべおのバックアップ䞖代をスキャンしたす。 ぀たり、今埌取埗するバックアップデヌタだけでなく、 Sensitive Data Discovery機胜を利甚する前に取埗したバックアップデヌタも含めお 機密デヌタの有無を分析するこずも可胜です。 ステップ 3: テストデヌタの準備 怜出粟床を怜蚌するため、VM 内に以䞋の2皮類のファむルを䜜成 機密デヌタあり 「瀟倖秘」を含むmail.txtファむル 機密デヌタなし mail_normal.txtファむル   ステップ 4: Sensitive Data Discovery実行 Rubrik Sensitive Data Discovery は手動で実行する必芁がありたせん。 ポリシヌずアナラむザヌを蚭定するだけで、察象のオブゞェクトがバックアップデヌタを取埗するたびに自動的に実行されたす。 Rubrik の公匏説明によるず、最倧 24 時間以内にスキャンが完了するずされおいたすが、今回のシミュレヌションでは バックアップ取埗埌、玄 30 分で機密デヌタの怜知結果が反映 されたした。 それでは、結果を䞀緒に確認しおみたしょう ステップ 5: 結果確認 䞋図のように、 Data Security Posture ダッシュボヌドで簡単に確認可胜です。 Sensitive Data Discovery が vSphere VM 内の機密デヌタを適切に怜出し、䞀぀の䞭リスクのファむル mail.txt が存圚するこずが刀明したした。 なぜ䞭リスクなのかずいうず、蚭定したアナラむザヌ「Japan Confidential」のリスク評䟡を䞭リスクに指定しおいるためです。 メニュヌの「 機密デヌタ 」をクリックするず、䞋図に瀺すように、 どの VM のどのファむルに機密情報が含たれおいるのかを远跡でき、適切な察応 が可胜になりたす。 さらに、䞋図のように、Sensitive Data Discovery はすべおのバックアップ䞖代をスキャンするため、 どの時点のバックアップデヌタから機密デヌタが含たれるようになったのか特定 するこずも可胜です。 最埌に Rubrik Sensitive Data Discovery を䜿えば、機密デヌタの管理がグッず楜になりたす。 ✔ 機密デヌタを自動で怜出し、可芖化 ✔ バックアップデヌタを掻甚し、通垞業務に圱響を䞎えない ✔ ポリシヌ蚭定だけで継続的に監芖可胜 実際に詊しおみるず、どこにどんな機密情報があるのか䞀目で分かるので、デヌタ管理の負担を枛らせたす。 興味がある方がいらっしゃいたしたら、ぜひぜひ 機密デヌタの監芖 | Rubrik をご芧ください。 たた、Rubrik Sensitive Data Discovery は、今回のシミュレヌションで䜿甚したテキストファむルだけでなく、PDF、Excel、Word など倚様なファむル圢匏に察応しおいたす。詳しくは サポヌトされおいるファむル圢匏 をご確認ください。 ここたでご芧いただき、ありがずうございたした。 今埌も、Rubrik の䟿利な機胜に぀いお玹介しおいく予定です。それでは、たた次回
もしも、映画史に残る感動的な堎面を、最新のAI技術で蘇らせるこずができたら… こんにちは、䜐藀です。 皆さんは、 名䜜映画 ずいわれたら䜕を思い浮かべたすか 私は最近初めお映画 『タむタニック』 を芋たのですが、やはり名䜜ずいわれるだけありたすね 。 結末を知っおいおも楜しめるのはたさに䞍朜の名䜜ずいわれる所以だず感じたした。 さお、タむタニックの䞭で最も印象的なシヌンの䞀぀が、ゞャックずロヌズが船銖で腕を広げるシヌンですよね。 今回は、 Amazon BedrockでLuma AI の「Ray2」モデルを䜿い、この有名なワンシヌンを再珟できるのか―― ずいうお話です。 Ray2モデルずは 2025幎1月23日、AWSは Luma AI の新しい動画生成 AI モデル「Ray2」 が Amazon Bedrock で利甚できるようになった ず発衚したした参考  https://aws.amazon.com/jp/about-aws/whats-new/2025/01/luma-ais-ray2-visual-ai-model-amazon-bedrock/ 。たずは簡単にLuma AIのRay2モデルに぀いおご玹介しようず思いたす。 Ray2は、 Luma Labsが開発した最新の動画生成AIモデル です https://lumalabs.ai/ray 。 前モデルであるRay1ず比范しお 凊理胜力が10倍に向䞊 しおおり、より滑らかで自然な動きを持぀リアルな映像を生成できるのが倧きな特城です。たた、埓来のAI動画生成モデルであれば数分から数時間かかっおいたレベルの動画生成を、 Ray2はわずか1分皋床で䜜成可胜 ずいうこずで倧きな話題を呌びたした。 珟圚はテキストプロンプトから動画生成をサポヌトしおいたすが、 今埌は画像から動画生成や動画から動画ぞの倉換、たた䜜成した動画の線集機胜も実装予定 ずのこずで、これからの動向に目が離せないAIサヌビスですね。 テキストプロンプトから動画を生成 5秒たたは9秒のクリップを䜜成可胜 高解像床1080pのフルHD解像床もサポヌト   BedrockでRay2を䜿っおみよう さお、さっそくBedrockでRay2モデルを䜿っおみたしょう。 事前準備ずしお行うセットアップもそこたで倚くなく、この蚘事を芋ながら簡単に蚭定するこずができるず思いたす。 Ray2を䜿甚するには、以䞋の準備が必芁です。 Amazon Bedrockのアクセス暩 AWSアカりント 無料枠で利甚可胜 適切なIAMポリシヌ を持぀ナヌザヌ Amazon S3バケット 生成された動画を保存するために必芁   BedrockでLuma AI Ray2を有効化する いきなりですがここで泚意点 マネゞメントコン゜ヌルにログむンしたらずりあえずBedrockにアクセスしお ず蚀いたいずころですが、たずはリヌゞョンを オレゎンリヌゞョンus-west-2 に切り替えたしょう 珟圚 Ray2はオレゎンリヌゞョンのみのサポヌト ずなっおいるのでここで倉曎を忘れおしたうず、せっかくモチベがあるのにアクセスできない、なんおこずも 。 リヌゞョンを倉曎したらAmazon Bedrockにアクセスしおサむドバヌをスクロヌルした䞀番䞋、 「モデルアクセス」からLuma AI – Ray2を有効化 しおいきたしょう。 Luma AIのRay2のアクセスのステヌタスが 「リク゚スト可胜」 ずなっおいるず思いたすので、その文字をクリック、アクセス暩をリク゚ストしおいきたす。 数分埅぀ず、このように 「アクセスが付䞎されたした」 ず衚瀺されたす。ここたでくれば準備はOK  ã‚¿ã‚€ã‚¿ãƒ‹ãƒƒã‚¯ã®åã‚·ãƒŒãƒ³ã‚’AIで再珟 テキストプロンプトを考えおみる 今回の怜蚌で最も倧切な郚分、テキストプロンプトを䜜成したす。 詊しにこんなプロンプトを䜜っおみたした。 A young man and woman stand at the bow of a large ship. The woman has her arms outstretched and the man is holding her from behind. The ocean and sunset behind them. Cinematic, high quality. このプロンプトには、 登堎人物young man and woman 、 堎所bow of a large ship 、 ポヌズarms outstretched, holding her 、 背景ocean and sunset などを蚘茉しおみたした。 正盎に蚀うず、 この手の有名なシヌンの再珟床を䞊げるには裏技があるんです。 その方法はずっおも簡単。文の末尟に 「inspired by Titanic」 ず蚘茉するだけです。 AIが認識できるタむトルであれば、そこに寄せるようなプロンプトを䜜成するこずで再珟床を䞊げるこずが可胜なんですが  今回はせっかくなので、あえおタむタニックの名前を䞀切出さずに寄せおみたしょう  Amazon Bedrockで動画を生成しおみよう では早速動画を䜜成しおいきたしょう。 たずはBedrockのホヌム画面、 プレむグラりンドから「Image/Video」を遞択 したす。 続いおモデルの遞択画面が衚瀺されるので、カテゎリは 「Luma AI」 、モデルは 「Ray」 を遞択しお適甚をクリックしたす。 モデル名の衚瀺はRayずなっおいたすが、v2ず蚘茉があれば今回取り䞊げおいるRay2モデルです たた、この際に生成した動画を保存するためのS3バケットを䜜成したすが、以䞋のポップアップの「確認」をクリックすれば問題ないのでこのたた進めおいきたしょう。 動画の保存先であるS3バケットにも課金がされるので、長期間保存する必芁がなければS3バケットは削陀するようにしたしょう。 ここたで完了したら、いよいよプロンプトの入力画面です。 蚭定画面からは 動画の画面比率や解像床通垞540pたたは720p、長さ5秒たたは9秒など を指定するこずができたす。 では、先ほど䜜成したプロンプトを入力しお実行をクリックしたす。 あずは数分埅぀だけ。 生成が完了するず、動画が画面䞊に衚瀺され、動画がS3バケットに保存されたす。 4. AIの再珟床はいかに  では、生成された動画のクオリティを確認しおいきたしょう。 document.createElement('video'); https://blog.usize-tech.com/contents/uploads/2025/02/DC708E58D9DB1F8ED0BF309B87475B691580B466.mp4 結果なんかちがう 今回の結果をたずめるずこんな感じでしょうか  船の䞊で男女がいる、ずいうこずは再珟できおいる。 ゞャックずロヌズらしき人物は衚珟されおいるが、服装があたりにラフすぎる  背景の倕焌けず海の衚珟はかなりリアルすごい 手を広げるっおこずは䌝わっおいるけど、そういうこずじゃない  党䜓ずしお、AIは「船銖で男女が䌚いを深めるシヌン」ずいうコンセプトを認識できたものの、さすがに现郚のディテヌルは衚珟できおいなかったですね。 プロンプトの工倫や远加のパラメヌタ蚭定によっお、より粟床を䞊げるこずができそうです。   プロンプトを倉えお再床挑戊 さお、ここで終わっおもいいのですがどうしおも悔しいので、もう䞀床プロンプトを倉えお挑戊しおみたした。 䜜成したプロンプト version2がこちら↓ A man wraps his arms around a woman from behind as she stands at the bow with her arms outstretched. The ocean and sunset behind them. Cinematic, high quality. 改善のポむント: より詳现なプロンプトを䜜成 男性が埌ろから女性を抱いおいる、女性が遞手で手を広げおいるなど 先ほどよかった「Cinematic, high quality」は継続 こうしお䜜成されたリベンゞ動画がこちら https://blog.usize-tech.com/contents/uploads/2025/02/AFF0A35CD8BEE3AF53EE36A38481F03BADF1387A.mp4 うヌん、これもなんか違うかもしれないですね 笑 やはり日垞的にする行動ではないこずもあり、AIの孊習デヌタの䞭に手を広げる女性を埌ろから男性が抱擁するずいうニュアンスが䌝わりづらいのかもしれないですね    6. たずめ 今回はAmazon BedrockのRay2を䜿っお、映画『タむタニック』の有名なワンシヌンをAIで再珟しおみたした。 結果ずしお、党䜓の雰囲気はある皋床再珟できたしたが、现郚の再珟床にはただ改善の䜙地がありたした 。 孊び プロンプトを工倫するこずで、自分の想像に近い映像を䜜るこずが可胜 AIの孊習デヌタの䞭に少ないず思われるような動䜜は、なかなか再珟しづらい  生成された動画を玠材ずしお線集するこずで、より良い映像䜜品が䜜れるのでは    Ray2は簡単に動画を生成できるため、他の映画の名シヌン再珟や、オリゞナル映像の䜜成にも応甚可胜です。 ぜひ、皆さんも詊しおみおください    
SCSKの畑です。 以前の゚ントリ の続き・・ではないのですが、デヌタメンテナンス機胜に関する蚀及ずいう芳点は同じなのでその2ずしたした。今回は、デヌタメンテナンス機胜の察象ずなる Redshift の特性を螏たえた䞊で、アプリケヌションの実装においお考慮する必芁があったポむント及び機胜に぀いお蚘茉したす。Redshift そのものずいうよりは、DWH の特性ずある皋床蚀い換えお良いかもしれたせん。   アヌキテクチャ図 今回䞻に蚀及するのは Redshift のみですが、前回゚ントリず関連した内容を含むため䞀応茉せおおきたす。   ポむント1. テヌブル定矩/デヌタの曎新チェック機胜 以前の゚ントリ で説明した通り、テヌブル定矩/デヌタのバヌゞョン管理の芁件があるこず、テヌブル定矩倉曎DDL操䜜に぀いおはアプリケヌション倖郚で実行されるこずの2点より、アプリケヌション偎からテヌブル定矩/デヌタの曎新をチェックできる必芁がありたした。 具䜓的には、S3 䞊に出力・配眮される察象テヌブルの定矩/デヌタファむルのハッシュ倀を比范するこずで行っおいたす。察象テヌブルの定矩/デヌタのバヌゞョン管理を S3 を䜿甚しお行っおいるため、最新のバヌゞョンの定矩/デヌタず、チェック実斜時の Redshift 䞊の定矩/デヌタを比范しお、差異があれば Redshift 偎に曎新があったこずが分かる仕組みです。 が、実はこれは苊肉の策でした。曎新チェックを実斜するために実質的に Redshift 䞊の察象テヌブル定矩/デヌタの党量を取埗しおいるに等しく、コストが倧きいためです。通垞、本アプリケヌション䞊で察象テヌブルを衚瀺する際には、以䞋のようなロゞックを実行しおいたす。 察象テヌブルの定矩/デヌタ曎新をチェック Redshift 䞊のテヌブルが曎新されおいる堎合は、曎新チェックの際に S3 䞊に出力したファむルを最新バヌゞョンずしお曎新 最新バヌゞョンのファむルのテヌブル定矩/デヌタをアプリケヌション䞊で衚瀺 このようなロゞックずした理由はいく぀かあるのですが、アプリケヌションから察象テヌブルを衚瀺する際に毎回 Redshift から党量を取埗せずに曎新の有無だけをチェックし、曎新がない堎合はそのたた S3 からテヌブル定矩/デヌタを取埗するようにするこずで、レスポンスの向䞊を狙いの䞀぀ずしおいたした。ずころが、実際の挙動ずしおは1.による曎新チェックのタむミングで Redshift から毎回党量を取埗しおいるに等しいため、その目論芋が厩れおしたっおいたす。逆に蚀うず、曎新チェックはもっず少ないコストで実斜できるず考えおいたした。 1.による曎新チェックを任意のタむミングで実行するようなロゞック・画面ずするずいうのが回避策の䞀぀だず思うのですが、そうするずテヌブル定矩/デヌタの敎合性を担保する難易床が䞊がっおしたうこずもあり、珟時点ではこのようなロゞックずしおいたす。 ずいうずころでようやく Redshift (DWH) の特性に関連した話になるのですが、、通垞のデヌタベヌス (RDBMS) だず、このような情報はデヌタベヌス偎の管理情報ずしお管理されおいるものが倚いです。䟋えば Oracle の堎合は以䞋 URL の通り、テヌブル定矩やデヌタの曎新日時に぀いおもデヌタベヌス偎の管理情報ビュヌずしお管理されおいたす。埌者は統蚈情報取埗ずの兌ね合いもあるので単玔な管理情報ずは蚀い難い郚分もありたすが・・埌は同情報をアプリケヌション偎でも持っおおいお、突き合わせれば簡単に曎新チェックができたす。 https://docs.oracle.com/cd/E82638_01/refrn/ALL_OBJECTS.html https://docs.oracle.com/cd/E82638_01/refrn/ALL_TAB_MODIFICATIONS.html 察しお、Redshift のような DWH の堎合、通垞のデヌタベヌス (RDBMS) ず比范しおより倧量のデヌタを扱う目的から、このような管理情報に぀いおはオミットされおいるものも倚いです。DWH におけるデヌタの保持方匏や管理方匏が RDBMS ず異なるこず、より倧量デヌタを扱う以䞊管理情報を RDBMS の堎合ず同じように扱うコストが甚倧になるこず、そもそもの DWH の甚途を鑑みるず想定されおいない/必芁ずされないず補品・サヌビス偎で刀断されおいるこず、などの理由が考えられたすが、いずれにせよ Redshift ではこのような機胜がなかったため、先述したような仕組みを実装する必芁があったずいうこずです。唯䞀、以䞋 URL のビュヌが近しい情報を含んでいたしたが、さすがにテヌブル䜜成時刻のみだずちょっずどうしようもなかったですね・・ https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_SVV_TABLE_INFO.html Redshift は RDBMS である PostgreSQL をベヌスにしおいるこずもあり、最初は PostgreSQL 偎のビュヌなどから取埗できるのではず淡い垌望を抱いおいたのですが、結論から蚀うずそもそも PostgreSQL 偎でもそのような情報を取埗するのには䞀工倫必芁のようでした。Oracle は良くも悪くも高機胜・倚機胜な RDBMS なので、それを基準に考えるこずの功眪があるかもしれたせん・・   ポむント2. デヌタバリデヌションチェック機胜 デヌタのメンテナンス・曎新にあたり倧事なポむントの1぀がデヌタの敎合性を保぀こずです。デヌタの敎合性ず䞀口に蚀っおも様々な芳点があるかず思いたすが、最も基本的な芳点ずしおは列定矩や制玄NOT NULL/PK/UK/FKなどのテヌブル定矩に違反したデヌタが曎新されないかどうかが挙げられるず思いたす。もちろん、本案件事䟋でも芁件に含たれおいたした。 通垞のデヌタベヌス (RDBMS) であれば、基本的にデヌタベヌス偎でバリデヌションチェックが行われるため、これらのテヌブル定矩に違反したデヌタは曎新できないようになっおいたす。このため、ここで蚀及しおいるようなデヌタ敎合性を担保するだけであればアプリケヌション偎での考慮は䞍芁です。 では Redshift の堎合はどうかずいう話ですが、以䞋 URL の通り NOT NULL 以倖の制玄は制玄ずしお機胜したせん。定矩自䜓はできたすがあくたでもク゚リ実行時に Redshift 偎で効率的にデヌタを凊理するためのプラン実行蚈画を立おるための参考情報ずしお扱われ、デヌタ自䜓の制玄ずしおは機胜したせん。぀たり、䟋えば PK 制玄が定矩されおいる列に察しお重耇した倀を INSERT するこずが可胜ずいったように、これらの制玄に違反するようなデヌタを曎新するこずができおしたいたす。 テーブルの制約 - Amazon Redshift 䞀意性、プラむマリキヌ、および倖郚キヌの制玄は情報提䟛のみを目的ずしおおり、Amazon Redshift によっお匷芁されるこずはありたせん。ただし、プラむマリキヌず倖郚キヌはプランニング時のヒントずしお䜿甚されたす。アプリケヌションの ... docs.aws.amazon.com 䞀意性、プラむマリキヌ、および倖郚キヌの制玄は情報提䟛のみを目的ずしおおり、テヌブルに倀を入れるずきに  Amazon Redshift によっお匷芁されるわけではありたせん 。䟋えば、䟝存関係のあるテヌブルにデヌタを挿入する堎合、制玄に違反しおいおも挿入は成功したす。ただし、プラむマリキヌず倖郚キヌはプランニング時のヒントずしお䜿甚されたす。アプリケヌションの ETL プロセスたたは他の䜕らかのプロセスによっおこれらのキヌの敎合性が匷芁される堎合は、これらのキヌを宣蚀する必芁がありたす。 もちろんさすがに列定矩に違反するデヌタは曎新できたせん。以䞋 URL の通り暗黙の型倉換により、意図しおいないデヌタ型に倉換されお曎新される可胜性はあるかもしれたせんが、このような挙動は補品/サヌビスごずの差異はあるずしおも RDBMS でも考慮されるべき内容ず思いたす。 データ型 - Amazon Redshift Amazon Redshift によっおサポヌトされおいるデヌタベヌスデヌタ型を䜿甚する際に埓うべき芏則に぀いお説明したす。 docs.aws.amazon.com よっお、これらの制玄に察応するデヌタバリデヌションチェック機胜をアプリケヌション偎で実装する必芁がありたした。具䜓的には、バリデヌションチェックに倱敗した堎合はデヌタの曎新を蚱可せず、バリデヌションに倱敗した制玄に違反したデヌタを修正するように画面䞊で促すようなロゞックを実装するこずで察応したした。 たた、このような機胜をアプリケヌション偎で実装する必芁があったこずから、Redshift 偎でチェックしおくれる列定矩や䞀郚制玄に぀いおも同様にアプリケヌション偎でチェックするようにしたした。その方がデヌタ曎新における䞀連のロゞック/フロヌをシンプルにできるこずが理由です。Redshift 偎でチェックするずいうこずは実際に Redshift に察しお曎新を詊行する必芁があり、曎に詊行埌の゚ラヌ内容をアプリケヌション偎で解釈しおデヌタバリデヌションの゚ラヌ画面を出さないずいけないこずにもなりたす。デヌタ曎新時の承認フロヌなどずの兌ね合いも考えるず、トヌタルでロゞックがかなり耇雑になっおしたうず刀断したした。 なお、このような機胜をれロから実装するずさすがに工数・コスト面で厳しくなるこずが想定されたので、テヌブルのデヌタ衚瀺や線集機胜を叞るラむブラリ探しにおいおはデヌタバリデヌションチェック機胜に぀いおも気にしたした。最終的には Tabulator ずいうラむブラリを䜿甚したのですが、詳现もずい玹介はたた別の゚ントリのネタずさせお頂こうず思いたす。   たずめ 業務においお Oracle を䞭心ずした RDBMS を扱っおいる期間が長いこずもあり、Redshiftもずいおおよその DWHず RDBMS の差異ずしおはある皋床容易に思い浮かぶような内容ではありたしたが、アプリケヌション実装の芳点からたずめおおくこずも倧事ず考えたので今回たずめおみたした。実際、ポむント1に぀いおは䜕ずなくできるだろう・・みたいにタカを括っおいたずころできずに、最終的に今の方匏に蟿り着くたであれこれ詊行錯誀するこずになったりしたので。。このぞんの感芚ずいうか勘所はもう少し意識しないずいけないかなず感じたした。 本蚘事がどなたかの圹に立おば幞いです。
AWS KMSの暗号化は、S3のデフォルト暗号化などで䜿われるこずが倚いず思いたす。 オブゞェクトをPutするず自動で暗号化されるため、**「実際にどんな凊理が裏で動いおいるのか」**を意識しおいない方もいるのではないでしょうかこの蚘事ではS3を題材にし぀぀、KMS暗号化の仕組みに焊点を圓おお解説したす。 「KMSで暗号化するから、Encryptの暩限が必芁です。」 これはありがちな誀解ですが、倧䜓の堎合は間違った理解です。なぜそうなのかその理由を玐解いおいきたす。 CMKはどこにいる たずは鍵を䜜成しなければ始たりたせん。ここではカスタマヌマスタヌキヌ(以䞋CMK)を察象鍵で䜜成するものずしたす。 キヌ䜜成はKMSのAPIである” kms:CreateKey ” が発行され、AWS管理䞋のどこかに察象鍵(以䞋CMK)が䜜成されたす。 ここでたず頭に入れおおくべきこずがありたす。 䜜成されたCMKはKMSから出おくるこずはありたせん。 このこずはKMSの動きを理解する䞊で重芁です。 䜜成したCMKで䜕らかのデヌタを暗号化・埩号化する際は、CMKをKMSから取り出すのではなく、察象デヌタをKMSに送っお暗号化・埩号化を䟝頌し、結果を送り返しおもらう、ずいう流れになりたす。 ここで次の疑問が沞いた人は鋭いです。 「でかいデヌタだず党郚KMSに送らないずいけないのでわ・・・・RDSずかEBSずかどうするの ^^;」 実際は暗号化したいデヌタをKMSに送ったりはしおいたせん。「デヌタを暗号化する鍵」をCMKで暗号化しおやりずりするこずでこの問題を回避しおいたす。 KMS(CMK)が暗号化できる察象は4096Byteたでずいう制限があるため、そもそもでかいデヌタは暗号化できないのです。 GenerateDataKey 唐突ですが、KMSには” kms:GenerateDataKey “いうActionがありたす。(この話題での最重芁アクションです。) CMKを匕数ずしお実行し、以䞋の぀の文字列を返しおきたす。以䞋はAWS CLIで実行しおみたものです。 $ aws kms generate-data-key --key-id arn:aws:kms:ap-northeast-1:999999999999:key/99999999-9999-9999-9999-999999999999 --key-spec AES_256 { "CiphertextBlob": "AQIDAHiF7qVe(略)", "Plaintext": "eS7mjjJQby2(略)", "KeyId": "arn:aws:kms:ap-northeast-1:999999999999:key/99999999-9999-9999-9999-999999999999" } “Plaintext”             å˜ãªã‚‹ãƒã‚€ãƒˆåˆ— “CiphertextBlob”    Plaintext を指定したCMKで暗号化したバむト列 + メタデヌタ KMSはGenerateDataKeyを受けるず、内郚でランダムな文字列を生成し(Plaintext)、それを指定されたCMKで暗号化し(CiphertextBlob)、その2぀を返しおくれたす。 この”Plaintext” のこずを デヌタキヌ ず蚀い、実際のデヌタの暗号化の鍵ずしお䜿われたす。(ファむルやらEBSやらRDSやら。。) ここでは重芁な点が぀ありたす。 たず、デヌタキヌはKMSの倖偎に出おきおいるずいうこず。 次にデヌタキヌを甚いた暗号化(Encrypt)は、 kmsのアクションではない 、ずいうこず。(䞀般的な暗号化なのかな。AES) たた、CiphertextBlob のメタデヌタにはCMKの情報を含んでいたす。぀たり 暗号化されたデヌタキヌは、 自分がどのCMKで暗号化されおいるのかを知っおいたす 。このこずはデヌタ埩号化の時に倧倉重芁になっおきたすので芚えおおいおください。(たた今床曞くかも) デヌタ暗号化の流れ 以䞊の内容をたずめたしお、デヌタ暗号化の流れは以䞋のようになりたす。䟋ずしおS3にPutする堎合を瀺しおいたすが、䟋えばEBSの暗号化の流れも同じようなものになりたす。       ナヌザはKMSに察しお、䜜成枈みのCMKを指定しおkms:GenerateDataKey を発行する。 CMKはデヌタキヌずデヌタキヌを暗号化したものを返す。 ここでCMKの圹割は終わっおいたす。       ナヌザはデヌタキヌを䜿っおデヌタを暗号化し、そのデヌタキヌを廃棄 この暗号化はKMSの倖偎で行われおいたす。       暗号化されたデヌタに暗号化されたデヌタキヌを添えお、S3に保存 (゚ンベロヌプ暗号化、ずか蚀ったりしたす。)         最埌で デヌタに暗号化されたデヌタキヌを䞀緒にしお保存しおいる こずは芚えおおきたしょう。 「鍵ずデヌタ䞀緒にしお倧䞈倫なの家のドアに鍵を貌り付けおるようなものでは」ずは思わないように。この堎合、鍵自䜓が暗号化された状態ですので、このたたでは䜿えたせん。CMKに埩号化を䟝頌できる人だけがこのデヌタを埩号できたす。 以䞊のフロヌを芋おわかるように、KMSに察しおはkms:GenerateDataKeyだけしか実行しおいたせん。なのでデヌタ暗号化の際に必芁な暩限ずしおは kms:GenerateDataKeyがあればよい 、ずいうこずになりたす。(kms:Encryptではなく)   以䞊。デヌタ暗号化の時の基本的な流れを説明しおみたした。 若干フロヌなどは単玔化しおいる個所もありたすが、理解の助けになれば幞いです。
SCSKの畑です。 Amplify を䜿甚したアプリケヌション開発䞭に発生した事象の原因及び解決策に぀いお、Web 䞊にあたり情報がなかったこずも含めお解決に少々手こずったので共有したす。匕き続き今回も小ネタです。   小ネタ本題 タむトルの繰り返しになるのですが、以䞋のようなスキヌマを定矩した際、Amplify codegen により生成された query にネストされた type が含たれなかったずいう事象が発生したした。ちなみに本スキヌマは2぀の Redshift テヌブルの定矩及びデヌタを差分比范結果を栌玍するためのもので、AddedRowsInfo/DeletedRowsInfo/UpdatedRowsInfo に差分のあった行情報がネストされお栌玍されたす。 ちなみに、差分比范凊理自䜓は玠盎に AppSync から Lambda リゟルバを䜿甚しお実珟しおいたすが、フロント゚ンド偎での衚瀺も含めおそこそこ苊劎した郚分なので、機䌚があれば別゚ントリずしお曞くかもしれたせん。 type DataDiffInfo { diff_summary: RSS3DiffStatus! added_rows_info: [AddedRowsInfo]! deleted_rows_info: [DeletedRowsInfo]! updated_rows_info: [UpdatedRowsInfo]! } type RSS3DiffStatus{ column: Boolean constraint: Boolean data: Boolean } type PKInfo { name: String! value: String! } type AddedRowsInfo { pk: [PKInfo!]! row_data: String! } type DeletedRowsInfo { pk: [PKInfo!]! row_data: String! } type UpdatedRowsInfo { pk: [PKInfo!]! cols: [String!]! row_data: String! } で、このスキヌマ定矩に察しお、codegen で生成された typescript の query が以䞋になるのですが・・ export const GetTableDataDiffInfo = /* GraphQL */ `query GetTableDataDiffInfo($input: GetTableDataDiffInfoInput!) { GetTableDataDiffInfo(input: $input) {   diff_summary {     column     constraint     data     __typename   }   added_rows_info {     row_data     __typename   }   deleted_rows_info {     row_data     __typename   }   updated_rows_info {     cols     row_data     __typename   }   __typename } } ` as GeneratedQuery< APITypes.GetTableDataDiffInfoQueryVariables, APITypes.GetTableDataDiffInfoQuery >; 芋おお分かりの通り、AddedRowsInfo/DeletedRowsInfo/UpdatedRowsInfo 配䞋の「PKInfo」type 郚分が query 定矩から抜け萜ちおしたっおいたす。ネストの深さずしおは䞀番䞊の階局から数えるず 「3」 になりたすね。   暫定回避策 さおこれは困ったずいうこずで解決策を探したのですが、探し方が悪かったのかめがしい情報が芋圓たらず。最初は AppSync のク゚リの深さ制限蚭定を疑ったのですが、デフォルト倀は無制限だったためこの可胜性は陀倖。 そこで䞀旊暫定的な回避策ずしお、自分で盎接 GraphQL の query を曞くこずにしたした。codegen で 型情報を生成しお欲しかったので、以䞋サむト様の蚘事通り所定のパスに query が定矩されたファむルを配眮したした。 AmplifyでカスタムGraphQLク゚リず型情報を生成する方法 - Qiita 本蚘事を察象ずする人Web(React,Vueなど)でAmplify利甚し、自動生成されるク゚リでは足りなくなった結論graphqlconfig.ymlのincludesに指定しおいるディレク  qiita.com ただ、圓然ながら query を自分で曞いおいる以䞊スキヌマ定矩の倉曎があった堎合も自動で远随しおくれないため、開発が続くに぀れお䞍䟿さむラむラを感じおきたした。そもそも、Amplify が自動生成しないような耇雑なク゚リを曞きたいから自分で曞く必芁があるのであっお、今回のような事象に察しおは根本的な解決策でないこずは明らかであったため、本腰を入れお解決策を調べたずころ・・   解決策 結論ずしおは以䞋 URL の通り、.graphqlconfig.yml の maxDepth 属性で、生成する query のネストの深さを明瀺的に指定するこずで解決したした。 ただ、以䞋 URL に蚘茉のある –max-depth オプションは手元の環境だず機胜したせんでした。たた、「max d epth」のように倧文字小文字を間違えおもダメですのでご泚意ください。 最初間違えおしたったのですが、゚ラヌも出ないのでこの蚭定方法も機胜しないのではないかず疑心暗鬌になっおしたいたした・・ Nested types missing from queries in generated code - Require workaround · Issue #745 · aws-amplify/amplify-cli ** Which Category is your question related to? ** iOS side generated graphql queries ** What AWS Services are you utiliz... github.com 以䞋、maxDepth を 5 に蚭定した堎合の実装䟋です。 projects: nuxt3app:   schemaPath: src/graphql/schema.json   includes:     - src/graphql/**/*.ts   excludes:     - ./amplify/**   extensions:     amplify:       codeGenTarget: typescript       generatedFileName: src/API.ts       docsFilePath: src/graphql       maxDepth: 5 extensions: amplify:   version: 3 こちらはオプション指定しお codegen した query の内容です。PKInfo の type が远加されおいるこずが確認できたす。 export const GetTableDataDiffInfo = /* GraphQL */ `query GetTableDataDiffInfo($input: GetTableDataDiffInfoInput!) { GetTableDataDiffInfo(input: $input) {   diff_summary {     column     constraint     data     __typename   }   added_rows_info {     pk {       name       value       __typename     }     row_data     __typename   }   deleted_rows_info {     pk {       name       value       __typename     }     row_data     __typename   }   updated_rows_info {     pk {       name       value       __typename     }     cols     row_data     __typename   }   __typename } } ` as GeneratedQuery< APITypes.GetTableDataDiffInfoQueryVariables, APITypes.GetTableDataDiffInfoQuery >; たた、同オプションのデフォルト倀は 「2」 ずいうこずで、先般のスキヌマ定矩においお PKInfo 以䞋の type が出力されなかった理由も蟻耄が合っおスッキリしたした。正盎、デフォルト倀はもう少し倧きくおも良いず思うんですけども・・   たずめ 以前の投皿にお Amplify.Configure に䞎える匕数の定矩が䞍明瞭で調査に苊劎した旚曞いおいたのですが、本件も䌌たような文脈の話ではないかず思いたす。。 䜙談ですが、初めお本事象が発生した時は原因究明に結構な時間を芁しおしたいたした。ずいうのも、Amplify のデプロむや codegen 実行時ぱラヌが出おおらず、AppSync 偎のスキヌマ定矩を確認しおも問題なし。Lambda リゟルバの実装に問題がある可胜性も考慮しお、AWS マネゞメントコン゜ヌルからク゚リを盎接実行しおみるずちゃんず PKInfo 郚分の情報も取れる。でもフロント゚ンド偎から codegen で生成されたク゚リを䜿甚するず PKInfo 郚分の情報が取れない。でも゚ラヌ自䜓は出おいない。ずいう感じだったので・・ 開発圓初は Amplify や AppSync、GraphQL などぞの理解が十分でなかったこずもありたすが、Web 䞊の情報がもう少し倚かったらもっず早く解決できたはずずいうこずで小ネタではありたすが、本蚘事がどなたかの圹に立おば幞いです。
「~のサヌビスは次のうちどれでしょうか。」 クラりドの認定詊隓やIPAの午前詊隓などでよくある圢匏です。 こういう遞択問題はなんずなくで解けおしたうこずも倚いですよね。 私も詊隓勉匷䞭は 「よくわからないけど、これかな」 ず曖昧な理解で正解した時期がありたした。 倧量の問題挔習で䜕ずかしのいでいたしたが、こんな勉匷法を脱华したいず日々悶々。 そんな思いがある䞭、実務で觊れお理解が深たった Azureの「プラむベヌト゚ンドポむント」 に぀いおたずめたす。 プラむベヌト゚ンドポむントずは AzureのPaaSサヌビスに接続するための手段のひず぀です。 仮想ネットワヌク内の プラむベヌトIPアドレス を䜿甚しお PaaSリ゜ヌス に接続するために䜿甚したす。 パブリックアクセスを無効化するこずで、むンタヌネット経由のアクセスを防ぐこずも可胜です。 ぀たり セキュリティ向䞊の利点 があるわけです。                       詊隓勉匷䞭はこの抂念を流し読みしおいたしたが、そもそも「PaaSリ゜ヌスずは䜕か」をきちんず理解できおいたせんでした。 「なんずなく、むンタヌネットを介さずに䜕かにアクセスできる仕組み」ずいった認識だったのです。それでも詊隓の問題には正解できおしたうので、深く考えるこずなく先に進んでしたっおいたした。 問題を解いおみる 䟋えば、次のような問題があるずしたす。 問1 仮想ネットワヌクのプラむベヌトIPアドレスを䜿甚しおPaaSサヌビスに接続するためのサヌビスはどれ a. Azure Bastion b. プラむベヌト゚ンドポむント c. Azure Load Balancer d. Azure ExpressRoute この問題では、「プラむベヌトIPアドレス」ずいうキヌワヌドだけに泚目しお”b”のプラむベヌト゚ンドポむント遞んでたした。なぜかPaaSサヌビスに接続のくだりを読み飛ばしおいたのです。これで正解しおしたいたす。 問2 「」の内容が 正しい 堎合は”倉曎は必芁ありたせん” そうでない堎合は正しい回答を遞べ 「パブリック゚ンドポむント」を䜿甚するず、Azure Cosmos DBなどのPaaSサヌビスに接続するためのパブリックアクセスを無効にできる。 a. プラむベヌト゚ンドポむント b. 仮想ネットワヌクピアリング c. Azure ExpressRoute d. 倉曎は必芁ありたせん パブリックアクセスを無効ずくればプラむベヌト゚ンドポむントで”a”を遞択しおたした。こちらでもAzure Cosmos DBなどの蚘茉を無芖しお解いおいたのです。 問3 次のリ゜ヌスがある。 名前 リ゜ヌス皮別 説明 VNET1 仮想ネットワヌク ヌ VM1 仮想マシン VNET1に配眮 Storage1 ストレヌゞアカりント ヌ VM1がプラむベヌトIPアドレスを䜿甚しおStorage1にアクセスできるように構成するにはどれを䜿うべきか a. ナヌザヌ割り圓おマネヌゞドID b. Azure Firewall c. プラむベヌト゚ンドポむント d. Application Gateway 問1ず同じようにプラむベヌトIPアドレスずくればプラむベヌト゚ンドポむント”c”を遞べおしたいたすが、 アクセス先がストレヌゞであるこずに理由があったんだなぁ ず今になっお気づきたした。 自分が䜕を理解しおいお、䜕を芋萜ずしおいたのかがよく分かりたす。理解しお解けるようになるず問題蚭定も結構おもしろいです。 PaaSサヌビスの具䜓䟋 振り返っおみるず、問題の意図がより明確に芋えおきたす。 そもそもPaaSサヌビスっお具䜓的に䜕のこずでしょうか 公匏ドキュメント芋るず。プラむベヌト゚ンドポむントの文脈で出おくるPaaSサヌビスずは以䞋のサヌビスのこずです。 Azure Storage Azure Cosmos DB Azure SQL デヌタベヌス Private Link サヌビスを䜿甚する独自のサヌビス プラむベヌト ゚ンドポむントずは – Azure Private Link | Microsoft Learn 実務でストレヌゞにプラむベヌトIPを付䞎する堎面を芋たこずで、やっずこの抂念を理解できたした。 文字情報だけでは気づけないこずも倚いず 痛感 したした。 デモ 自分でもストレヌゞアカりントにプラむベヌトIPアドレス付䞎しおみようず思いたす。 1. ストレヌゞアカりントの巊ペむンからセキュリティずネットワヌクを開き、ネットワヌクを遞択。 プラむベヌト゚ンドポむント接続、+プラむベヌト゚ンドポむントを抌䞋したす。                     2.基本タブ入力。 名前を入力するずネットワヌクむンタヌフェむス名が自動で䜜成された。               3.リ゜ヌスタブでは察象サブリ゜ヌスで、ストレヌゞの皮類遞択。今回はblobになりたす。                 4. 仮想ネットワヌクタブではプラむベヌト゚ンドポむントを䜜成するサブネットを指定。 このサブネット䞊にプラむベヌト゚ンドポむント䜜成されプラむベヌトIPアドレスが構成されたす。                     5. DNSタブではプラむベヌトDNSゟヌンず統合するではいを遞択。DNSレコヌドが自動で構成されたす。             6.確認。 プラむベヌトIPアドレス 10.0.156.4 が付䞎されたした。                                                   7.プラむベヌト経由のアクセス蚱可の確認 プラむベヌト゚ンドポむントず同じ仮想ネットワヌク䞊のVMぞリモヌトデスクトップ接続しおnslookup コマンド実斜。 以䞋のようにプラむベヌトIPアドレスが応答される。         自分のPCからnslookup実行するずパブリックIPアドレスが応答され、ストレヌゞにアクセスできない。           さいごに 3月にAZ-305Microsoft Certified: Azure Solutions Architect Expertを受隓したす。 AZ-104よりも芁件が耇雑になっおいるので、理解しながら解けるようになろうず思いたす。 ふんわりした資栌勉匷から卒業し、実務で掻かせる知識を身に぀けるために、しっかりずした孊習を進めおいきたす。
こんにちはSCSKの新人営業、栗山です。 皆さんの䌚瀟では、電話応察をどのように行っおいたすか 顧客察応の質向䞊や効率化 は、倚くの䌁業にずっお重芁な課題ですよね 近幎、AI技術を掻甚した 電話応察のDX が泚目されおいたす。 䟋えば、音声認識技術を䜿えば、顧客ずの䌚話を自動でテキスト化し、分析したり、察応を効率化したりするこずが可胜になりたす 今回は、Google Cloudが提䟛する音声認識サヌビス Google Cloud Speech-to-Text の怜蚌を通しお、AIによる電話応察DXの可胜性を探っおみたした Google Cloud Speech-to-Tex(以降Speech-to-Text)は、高粟床な音声認識を簡単に実珟できるサヌビスです。 本蚘事では、Speech-to-Textを実際に䜿っおみた感想や怜蚌結果を共有するこずで、 AI技術による電話応察DXに興味がある方 Speech-to-Textの導入を怜蚎しおいる方 文字起こしツヌルを掻甚したいけど䜕にしようか悩んでいる方 音声デヌタを分析しお業務に圹立おたいず考えおいる方 にずっお、少しでも圹立぀情報になれば幞いです 怜蚌目的 コンタクトセンタヌ業界 のお客様からは、音声デヌタの文字起こしに察しお、有甚なサヌビスは無いかず質問を受けるケヌスが良くありたす。 あるお客様は珟状、オペレヌタヌの察応時の録音デヌタを分析に掻甚するため、 䜕床も聞き盎しながら手䜜業で文字起こし を行っおおり、非垞に時間ず手間がかかっおいるずのこずでした。。。 もし、この 文字起こし䜜業をAIで効率化 できれば、担圓者はより創造的な業務に集䞭できたす。 䟋えば、顧客察応の傟向分析や、サヌビス品質向䞊のための斜策怜蚎などに時間を有効掻甚できるでしょう。 そこで今回、限りなく実際の応察に近いテスト音声デヌタを䜿い、Speech-to-Textによる音声認識粟床の簡易怜蚌を実斜するこずで、 Speech-to-Textの導入により、お客様の文字起こし䜜業の効率化ず負担軜枛に貢献できる可胜性 を明らかにしたした!   なぜGoogle Cloud Speech-to-Textを遞んだのか 導入の容易さ  GUIが甚意されおおり、初期蚭定が簡単で、すぐに怜蚌を開始できる! コストパフォヌマンス 無料枠60分があり、コストを気にせず詊しやすい! 高粟床のリアルタむム文字起こし 他クラりドず比范しおも遜色ない性胜! 他クラりドずの比范文字起こしサヌビス線       Google  Cloud      Speech-to-Text Amazon Transcribe    Microsoft Azure    Speech to Text AmiVoice Cloud PlatformAmivoice API 察応蚀語 日本語を含む125以䞊の蚀語 日本語を含む耇数蚀語 日本語を含む倚数の蚀語 日本語、英語、䞭囜語、韓囜語 料金 箄0.046円/秒 ※60分無料枠あり ※新芏利甚者は$300盞圓のクレゞット ※ログ蚱可で割匕あり 箄0.046円/秒 ※利甚量割匕あり 箄0.046円/秒 ※1か月あたり5音声時間は無料 0.044円/秒 ※毎月60分無料枠あり ※ログ蚱可で割匕あり GUIでの利甚 〇 〇 〇 × ※単語登録のみ可胜 他サヌビスずの連携 〇 他Google Cloudサヌビスず容易に連携 〇 他AWSサヌビスず容易に連携 〇 他Azureサヌビスず容易に連携 〇 リアルタむム性 䜎遅延で字幕衚瀺も可胜 リアルタむム察応可胜だが速床に制限あり 雑音環境での凊理に匷いが速床は平均的 リアルタむム性は他瀟ず比范しお平均 導入の容易さ デフォルトモデルで高粟床・即利甚可 即時利甚可胜 高粟床だがカスタマむズ蚭定が必芁 APIを利甚したプログラミングが必芁 あなたのナヌスケヌスに最適な音声文字起こしサヌビスはどれ䞻芁3瀟を比范しおみた | ネットワンシステムズ ※あくたで公開されおいる情報や個人の芋解に基づいおおり、モデルや蚭定によっお結果が異なる堎合があるこずにご泚意ください。 Speech-to-Textで 期埅できるこず Speech-to-Textは、音声デヌタをリアルタむムたたはバッチ凊理で文字起こしする機胜を提䟛したす。Speech-to-Textを掻甚・組み合わせお以䞋のような期埅が持おたす。 䌚議録音の文字起こしでの䜜業効率化 コヌルセンタヌでの問い合わせ分析 動画コンテンツの字幕生成               etc..   怜蚌プロセス ① デヌタ準備 怜蚌に䜿甚するデヌタは以䞋の2぀です。 音声デヌタ( MP3, FLAC, AMR, LINEAR16 など) 正解デヌタ 音声デヌタから䞀蚀䞀句曞き起こしたテキストデヌタ手動で䜜成 評䟡を正確に行うため、改行やスペヌス、句読点「、」「。」も含たれおいない ② 音声ファむル読み蟌み 今回はMPの音声ファむルを読み蟌んでいたす。(Cloud Storageのファむルも利甚可胜) チャンネルごずに別個の認識: 有効 音声デヌタをアップロヌドするず自動的にサンプリングレヌトを割り圓おくれたす ③ 音声文字倉換のオプション APIバヌゞョンV1 䜿甚する蚀語Japanese 文字起こしモデルTelephony リヌゞョンglobal 文字起こしモデル ずは、音声デヌタをテキストデヌタに倉換するAIモデルのこずです。Speech-to-Textでは、様々な皮類の音声デヌタに察応するために、耇数のモデルが甚意されおいたす。 今回の怜蚌では、通話録音デヌタに最適化された Telephonyモデル を䜿甚したした。Telephonyモデルは、電話䌚話特有のノむズや音声品質の倉動に匷く、通話内容の文字起こしに高い粟床を発揮したす。 その他モデルに぀いおは以䞋をご参照ください 音声文字倉換モデルを遞択する  |  Cloud Speech-to-Text V2 documentation  |  Google Cloud cloud.google.com 詳现蚭定: 今回は党お無効にしたしたが、䞋蚘の高床な詳现蚭定が可胜です。 冒ずく的な語句フィルタ 句読点入力の自動化 発話された句読点 発話された絵文字 話者ダむアラむれヌション 単語の時間オフセット ※2024幎12月時点 䞀郚日本語察応しおいない機胜ございたす。 今回 カスタム音声モデル の適甚はしたせんでした。固有名詞や専門甚語に察応する堎合は、モデルを䜜成するこずで、認識粟床をさらに向䞊させるこずが可胜です。 ④ 正解デヌタむンポヌト 文字起こし粟床を正しく評䟡するために、正解デヌタ音声デヌタの内容を正確に曞き起こしたテキストデヌタをむンポヌトしたす。 今回は、自ら音声ファむルを手打ちで文字起こした正解デヌタを甚意したした。この正解デヌタは、文字ベヌスでの認識制床を図るため、句読点や改行など、実際に話されおいない文字は含めおいたせん。 この正解デヌタをSpeech-to-Textにむンポヌトするこずで、音声認識結果ず正解デヌタを比范し、認識粟床を自動で算出するこずができたす。   怜蚌結果 成果 認識粟床玄90%以䞊 文字レベルでの䞀臎率を枬定した結果です 高い粟床で文字起こしが可胜であるこずが確認できたした 凊理速床音声デヌタ1分あたり玄60秒で凊理 同時実行可胜 非垞に高速な凊理を実珟 耇数ファむル同時実行可胜で、手䜜業に比べお倧幅な時間短瞮が可胜 芳察事項 固有名詞誀認識が䞀郚確認 䞀郚音声ファむルの品質背景ノむズや録音距離に䟝存 今回の怜蚌では、Speech-to-Textが 高い認識粟床ず凊理速床 を持぀こずが確認できたした。実際に私が分あたりの音声デヌタを䞀蚀䞀句文字起こしするず分かかりたしたので、 箄80% の時間削枛 が芋蟌たれるこずになりたす (※1) 。これにより実際の担圓者はより戊略的な業務に時間を掻甚できたす。 今埌は、削枛された時間で、BigQueryなどのデヌタ分析基盀ず連携し、文字起こしデヌタを様々な角床から分析するこずで、顧客察応の質向䞊や新たなビゞネスチャンスの発掘が期埅できたす! ※1 あくたで䞀䟋であり、音声ファむルの品質や内容、オペレヌタヌの習熟床などによっお削枛時間は倉動したす。 さらに粟床を䞊げるには カスタム音声モデルの䜜成 固有名詞や専門甚語を孊習させるこずで、粟床を向䞊させたす 音声品質の改善 マむクの芋盎しやノむズ環境の調敎により、音声デヌタの品質を高め、音声認識の粟床を改善したす APIバヌゞョンのアップグレヌドV1→V2 最新バヌゞョンV2を䜿甚するこずで、性胜の向䞊が期埅されたす   なぜSCSK SCSKは、Google Cloudのプレミアパヌトナヌずしお、お客様の課題解決に最適なクラりドサヌビスを遞定し、導入から運甚たでをトヌタルでサポヌトしたす。お客様に寄り添い、長幎の経隓で培った技術力で、ビゞネスの成長を力匷く埌抌ししたす。 1. 幅広いクラりド技術の知芋 Google Cloudはもちろん、AWS、Azureなど、マルチクラりドに察応した゚ンゞニアが倚数圚籍しおいたす。お客様のニヌズやビゞネスの特性に合わせお、最適なクラりド環境を構築し、柔軟なシステム基盀を提䟛いたしたす。 さらに、SCSK独自のプラむベヌトクラりドサヌビス「USiZE」も提䟛しおおり、パブリッククラりドず組み合わせたハむブリッドクラりド環境の構築も可胜です。 2.トヌタルサポヌト䜓制 40幎以䞊にわたるシステム構築・運甚実瞟で培った業界知識ず、クラりドに関する高い技術力、そしお 2,500名以䞊の認定技術者 を擁するSCSKだからこそ、お客様のビゞネスに最適なクラりド環境を実珟できたす。 お客様の業界基準やコンプラむアンスに準拠した、匷固なセキュリティ䜓制を構築し、ISO 27001認蚌取埗のデヌタセンタヌで運甚するこずで、お客様のデヌタ資産を安党に保護したす。 たた、お客様のクラりド掻甚を支揎する、幅広いサヌビスラむンナップを取り揃えおいたす。 クラりドサヌビス 時代の急激な倉化に玠早く柔軟に察応。キヌワヌド「クラりドサヌビス」に関する補品・サヌビス䞀芧をご芧いただけたす。 www.scsk.jp 3. AIの導入実瞟 AI技術を掻甚したシステムの導入実瞟も豊富です。AIチャットボット、需芁予枬AI、画像認識AIなど、様々な分野で実瞟がありたす。お客様のビゞネス課題を解決に導く、最適なAI゜リュヌションを提案したす。 So-net 様 AI本番導入事䟋 : コンタクトセンタヌにおチャットボット、ボむスボットを導入し、オペレヌタヌなしで回答を自動化。オペレヌタヌ応察件数を 35%削枛 を実珟 AI本番システム実装事例集|ダウンロード|クラウド移行だけでは描けない、理想のDXを実現する www.scsk.jp   おわりに いかがでしょうか。今回の怜蚌では、Speech-to-Textが文字起こし䜜業の倧幅な効率化に貢献できるこずが瀺されたした。特に、 凊理速床ず認識粟床は期埅以䞊 であり、実務での掻甚に十分耐えうるレベルであるず蚀えたす。 Speech-to-Textの導入は、シンプルなUIで、配属1か月の営業担圓の私でも たった2日 で䜿いこなすこずができたした。ただ、本栌的な文字起こし䜜業を完了するには、APIやSDKを利甚したプログラミングが必芁になる堎合がありたす。 今埌も積極的に技術に觊れ、お客様の課題に最適な提案ができる営業を目指したす。 本蚘事をご芧いただき、詳现をご垌望の方はお気軜にお問い合わせください       ※本蚘事の内容は執筆者個人の芋解であり、所属する組織の芋解を代衚するものではありたせん。
はじめに 怜蚌でAzure環境ずAWS環境をVPN接続した環境が必芁ずなり、以䞋蚘事を参考に環境を構築しようずしたした。 最䜎限のコストで、必芁な時に䜜ったり消したりを気軜にできるよう、テンプレヌト化しおみたずいう蚘事です。 チュヌトリアル - ポヌタルを䜿甚しお Azure ず アマゟン りェブ サヌビス (AWS) 間の BGP 察応接続を構成する - Azure VPN Gateway このチュヌトリアルでは、アクティブ/アクティブ VPN Gateway ず AWS 䞊の 2 ぀のサむト間接続を䜿甚しお Azure ず AWS を接続する方法に぀いお説明したす。 learn.microsoft.com 䞊蚘蚘事の完党䜓はアクティブ-アクティブ構成か぀぀のトンネルで構成されおいたすが、今回はアクティブ-アクティブを無効にしおトンネルを1぀だけ構成しおたす。段階的には成長期です。 䞀時的な怜蚌甚途なので、最䜎限の構成で぀ながればいいやずいう思想です。むメヌゞはこんな感じ。 抂芁図 図ずしおは、以䞋のような感じです。 テンプレヌト テンプレヌトは3぀甚意しおいたす。これはリ゜ヌス構築埌に払い出される倀が必芁なリ゜ヌスがあるためです。 䟋えば、AWS偎のカスタマヌゲヌトりェむにAzureのパブリックIPが必芁である、ずか。 䜜成の倧たかな流れは以䞋の通りです。 Step 䜜業項目 備考 Step1【Azure】NW基盀䜜成 ①VNet・サブネットの䜜成 ②Virtual Network Gateway甚パブリックIPの䜜成 察応テンプレヌト azure_network_resource.json Step2【AWS】VPNリ゜ヌス䜜成 ①VPC䜜成 ②カスタマヌゲヌトりェむ䜜成 ③仮想ネットワヌクゲヌトりェむ䜜成 ④VPN接続䜜成 ⑀ルヌト䌝搬の有効化 察応テンプレヌトaws_vpn_resource.yaml Step3【Azure】VPNリ゜ヌス䜜成 ①Local Network Gateway䜜成 ②Virtual Network Gateway䜜成 ③VPN接続䜜成 察応テンプレヌトazure_vpn_resource.json Step1 【Azure】NW基盀䜜成 指定しおいるパラメヌタ パラメヌタ名 デフォルト倀 備考 vnetName VNet1 䜜成するVNetの名前 vnetAddressPrefix 10.1.0.0/16 䜜成するVNetのCIDR範囲 subnet1Prefix 10.1.0.0/24 GatewaySubnetのCIDR範囲 vpnpipName VNet1GWpip パブリックIPの名前 コヌド ファむル名azure_network_resource.json {   "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",   "contentVersion": "1.0.0.0",   "metadata": {     "_generator": {       "name": "bicep",       "version": "0.6.18.56646",       "templateHash": "10806234693722113459"     }   },   "parameters": {     "vnetName": {       "type": "string",       "metadata": {           "description": "VNet Name"         },       "defaultValue": "VNet1"     },     "vnetAddressPrefix": {       "type": "string",       "metadata": {           "description": "VNet CIDR range"         },       "defaultValue": "10.1.0.0/16"     },     "subnet1Prefix": {       "type": "string",       "metadata": {           "description": "Gateway Subnet CIDR range"         },       "defaultValue": "10.1.0.0/24"     },      "vpnpipName": {       "type": "string",       "metadata": {           "description": "Public IP Name"         },       "defaultValue": "VNet1GWpip"     }   },   "resources": [     {       "type": "Microsoft.Network/virtualNetworks",       "apiVersion": "2024-05-01",       "name": "[parameters('vnetName')]",       "location": "[resourceGroup().location]",       "properties": {         "addressSpace": {           "addressPrefixes": [             "[parameters('vnetAddressPrefix')]"           ]         },         "subnets": [           {             "name": "GatewaySubnet",             "properties": {               "addressPrefix": "[parameters('subnet1Prefix')]"             }           }         ]       }     },     {       "type": "Microsoft.Network/publicIPAddresses",       "apiVersion": "2024-05-01",       "name": "[parameters('vpnpipName')]",       "location": "[resourceGroup().location]",       "sku": {         "name": "Standard",         "tier": "Regional"       },       "properties": {         "publicIPAllocationMethod": "Static",         "idleTimeoutInMinutes": 4       }     }   ]   } Step2【AWS】VPNリ゜ヌス䜜成 指定しおいるパラメヌタ パラメヌタ名 デフォルト倀 備考 myVPCName VPC1 䜜成するVPCの名前 myVPCCIDR 10.2.0.0/16 䜜成するVPCのCIDR範囲 VGWName AzureGW 仮想ネットワヌクゲヌトりェむの名前 CGWName ToAzureInstance0 カスタマヌゲヌトりェむの名前 VPNConnectionName ToAzureConnection VPN接続の名前 CustomBGPASN 65000 Azure偎GatewayのASN azurepip なし Step1で䜜成したパブリックIPを指定 コヌド ファむル名aws_vpn_resource.yaml AWSTemplateFormatVersion: '2010-09-09' Description: Create a Virtual Private Gateway and Customer Gateway Parameters: myVPCName:   Type: String   Default: "VPC1" # VPCの名前 myVPCCIDR:   Type: String   Default: "10.2.0.0/16" # VPCのCIDR範囲 VGWName:   Type: String   Default: "AzureGW" # 仮想ネットワヌクゲヌトりェむのリ゜ヌス名 CGWName:   Type: String   Default: "ToAzureInstance0" # カスタムネットワヌクゲヌトりェむのリ゜ヌス名 VPNConnectionName:   Type: String   Default: "ToAzureConnection" # VPN接続の名前 CustomBGPASN:   Type: Number   Default: 65000 # 任意のASNを入力 azurepip: # スタック䜜成時にAzure偎のパブリックIPを入力する。     Type: String Resources: # VPCの䜜成 myVPC:   Type: AWS::EC2::VPC   Properties:     CidrBlock: !Ref myVPCCIDR     Tags:       - Key: Name         Value: !Ref myVPCName MyVpcDefaultRouteTable:   Type: AWS::EC2::RouteTable   Properties:     VpcId: !Ref myVPC # 仮想プラむベヌトゲヌトりェむの䜜成 VirtualPrivateGateway:   Type: AWS::EC2::VPNGateway   Properties:     Type: ipsec.1     Tags:       - Key: Name           Value: !Ref VGWName   # 仮想プラむベヌトゲヌトりェむをVPCにアタッチ VPCGatewayAttachment:   Type: AWS::EC2::VPCGatewayAttachment   Properties:     VpcId: !Ref myVPC       VpnGatewayId: !Ref VirtualPrivateGateway # カスタマヌゲヌトりェむの䜜成 CustomerGateway:   Type: AWS::EC2::CustomerGateway   Properties:     BgpAsn: !Ref CustomBGPASN     IpAddress: !Ref azurepip  # カスタマヌゲヌトりェむのパブリックIPアドレス     Type: ipsec.1     Tags:       - Key: Name         Value: !Ref CGWName   # VPN接続の䜜成 VPNConnection:   Type: AWS::EC2::VPNConnection   Properties:     Type: ipsec.1     CustomerGatewayId: !Ref CustomerGateway     VpnGatewayId: !Ref VirtualPrivateGateway     StaticRoutesOnly: false  # 動的ルヌティングずする。     Tags:       - Key: Name         Value: !Ref VPNConnectionName     VpnTunnelOptionsSpecifications:       - TunnelInsideCidr: "169.254.21.0/30"  # トンネル1の内郚IPv4 CIDR         - TunnelInsideCidr: "169.254.22.0/30"  # トンネル2の内郚IPv4 CIDR   # ルヌト䌝搬の有効化 EnableRoutePropagation:   Type: AWS::EC2::VPNGatewayRoutePropagation   Properties:     RouteTableIds:       - !Ref MyVpcDefaultRouteTable     VpnGatewayId: !Ref VirtualPrivateGateway     DependsOn: VPCGatewayAttachment Outputs: VirtualPrivateGatewayId:   Description: "The ID of the Virtual Private Gateway"   Value: !Ref VirtualPrivateGateway CustomerGatewayId:   Description: "The ID of the Customer Gateway"     Value: !Ref CustomerGateway VPNConnectionId:   Description: "The ID of the VPN Connection"     Value: !Ref VPNConnection Step3【Azure】VPNリ゜ヌス䜜成 指定しおいるパラメヌタ パラメヌタ名 デフォルト倀 備考 myVNet VNet1 Step1で䜜成したVNetの名前 publicIpName VNet1GWpip Step1で䜜成したパブリックIPの名前 localNetworkGatewayName lngw_test Local Network Gatewayの名前 asn 64512 AWS偎のASN bgpPeeringAddress 169.254.21.1 Local Network GatewayのピアIP customBgpIpAddress 169.254.21.2 Virtual Network GatewayのピアIP virtualNetworkGatewayName vngw_test Virtual Network Gatewayの名前 vngwasn 65000 Azure偎のASN gatewaySku VpnGw1 VPN GatewayのSKUを指定 virtualNetworkConnectionName AWSTunnel1toAzureInstance0 VPN接続の名前 gatewayIpAddress なし Step2で䜜成したVPN接続(トンネル1)のパブリックIPを指定 PreSharedKey なし Step2で䜜成したVPN接続の事前共有鍵を指定 コヌド ファむル名aws_vpn_resource.yaml {   "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",   "contentVersion": "1.0.0.0",   "parameters": {     "myVNet": {       "type": "string",       "metadata": {         "description": "VNet Name"       },       "defaultValue": "VNet1"     },     "publicIpName": {       "type": "string",       "metadata": {         "description": "PublicIPAddress Name"       },       "defaultValue": "VNet1GWpip"     },     "localNetworkGatewayName": {       "type": "string",       "metadata": {         "description": "LocalNetworkGateway Name"       },       "defaultValue": "lngw_test"     },     "asn": {       "type": "int",       "metadata": {         "description": "Autonomous System Number (ASN) for BGP"       },       "defaultValue": 64512     },     "bgpPeeringAddress": {       "type": "string",       "metadata": {         "description": "BGP peering address for LocalNetworkGateway"       },       "defaultValue": "169.254.21.1"     },     "customBgpIpAddress": {       "type": "string",       "metadata": {         "description": "BGP peering address for VirtualNetworkGateway"       },       "defaultValue": "169.254.21.2"     },     "virtualNetworkGatewayName": {       "type": "string",       "metadata": {         "description": "Name of the virtual network gateway"       },       "defaultValue": "vngw_test"     },     "vngwasn": {       "type": "int",       "metadata": {         "description": "Autonomous System Number (ASN) for BGP"       },       "defaultValue": 65000     },         "gatewaySku": {       "type": "string",       "metadata": {         "description": "SKU for the virtual network gateway"       },       "defaultValue": "VpnGw1",       "allowedValues": [         "Basic",         "VpnGw1",         "VpnGw2",         "VpnGw3",         "VpnGw4",         "VpnGw5"       ]     },     "virtualNetworkConnectionName": {       "type": "string",       "metadata": {         "description": "Name of the VPN Connection"       },       "defaultValue": "AWSTunnel1toAzureInstance0"     },     "gatewayIpAddress": {       "type": "string",       "metadata": {           "description": "AWS Public IP Address"         }     },     "PreSharedKey": {       "type": "string",       "metadata": {         "description": "Pre-SharedKey"       }     }   },   "resources": [     {       "type": "Microsoft.Network/localNetworkGateways",       "apiVersion": "2024-05-01",       "name": "[parameters('localNetworkGatewayName')]",       "location": "[resourceGroup().location]",       "properties": {         "gatewayIpAddress": "[parameters('gatewayIpAddress')]",         "bgpSettings": {           "asn": "[parameters('asn')]",           "bgpPeeringAddress": "[parameters('bgpPeeringAddress')]"         }       }     },     {       "type": "Microsoft.Network/virtualNetworkGateways",       "apiVersion": "2024-05-01",       "name": "[parameters('virtualNetworkGatewayName')]",       "location": "[resourceGroup().location]",       "properties": {         "ipConfigurations": [           {             "name": "vnetGatewayConfig",             "properties": {               "privateIPAllocationMethod": "Dynamic",               "subnet": {                 "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('myVNet'), 'GatewaySubnet')]"               },               "publicIPAddress": {                 "id": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIpName'))]"               }             }           }         ],         "gatewayType": "Vpn",         "vpnType": "RouteBased",         "enableBgp": true,         "activeActive": false,         "sku": {           "name": "[parameters('gatewaySku')]",           "tier": "[parameters('gatewaySku')]"         },         "bgpSettings": {           "asn": "[parameters('vngwasn')]",           "bgpPeeringAddresses": [             {               "ipconfigurationId": "[resourceId('Microsoft.Network/virtualNetworkGateways/ipConfigurations', parameters('virtualNetworkGatewayName'), 'vnetGatewayConfig')]",               "customBgpIpAddresses": [ "[parameters('customBgpIpAddress')]" ]             }           ]         }       }     },     {       "type": "Microsoft.Network/connections",       "apiVersion": "2024-05-01",       "name": "[parameters('virtualNetworkConnectionName')]",       "location": "[resourceGroup().location]",       "dependsOn": [         "[resourceId('Microsoft.Network/virtualNetworkGateways', parameters('virtualNetworkGatewayName'))]",         "[resourceId('Microsoft.Network/localNetworkGateways', parameters('localNetworkGatewayName'))]"       ],       "properties": {         "virtualNetworkGateway1": {           "id": "[resourceId('Microsoft.Network/virtualNetworkGateways', parameters('virtualNetworkGatewayName'))]"         },         "localNetworkGateway2": {           "id": "[resourceId('Microsoft.Network/localNetworkGateways', parameters('localNetworkGatewayName'))]"         },         "connectionType": "IPsec",         "sharedKey": "[parameters('PreSharedKey')]",         "enableBgp": true       }     }   ],   "outputs": {     "localNetworkGatewayId": {       "type": "string",       "value": "[resourceId('Microsoft.Network/localNetworkGateways', parameters('localNetworkGatewayName'))]"     },     "VirtualNetworkGatewayId": {       "type": "string",       "value": "[resourceId('Microsoft.Network/localNetworkGateways', parameters('localNetworkGatewayName'))]"     }   }   } 手順 ここからは䞊蚘テンプレヌトを甚いた簡単な構築手順を蚘茉したす。なお、现かい画面遷移等は手順を省いおいたすのでご了承ください。 なお、Azure CLIがむンストヌルされおいるこずが前提ずなりたす。むンストヌル手順は以䞋参照です。 Azure CLI をむンストヌルする方法 Azure CLI は、Windows、macOS、および Linux 環境にむンストヌルできたす。 Docker コンテナヌおよび Azure Cloud Shell でも実行できたす。 learn.microsoft.com リ゜ヌス構築手順 ①Azure CLIを䜿うため以䞋コマンドでAzureにログむンしたす。 az login ②Azure偎にリ゜ヌスグルヌプがない堎合は以䞋コマンドでリ゜ヌスグルヌプを䜜成しお䞋さい。 az group create --name <リ゜ヌスグルヌプ名> --location japaneast ③以䞋コマンドでAzureリ゜ヌスNW関連をデプロむしたす。 az deployment group create --resource-group <リ゜ヌスグルヌプ名> --template-file azure_network_resource.json  ãƒ‡ãƒ—ロむ埌、䜜成したパブリックIPのアドレスを控えたす。 ④AWSコン゜ヌル画面のCloudFormationよりスタックを䜜成しおください。   テンプレヌトファむルを読み蟌たせたす。   パラメヌタずしお③で確認したAzure偎のパブリックIPアドレスを入力したす。   その他はデフォ蚭定のたたスタックを送信すればOKです。 â‘€CloudFormationが正垞終了したら、VPN接続画面でトンネルのパブリックIPを確認したす。 ⑥たた、構成ファむルをダりンロヌドしたす。 ダりンロヌドしたファむル内に事前共有鍵が曞かれおるので、埌ほど䜿いたす。 ⑊最埌に以䞋コマンドでAzureリ゜ヌスVPN関連をデプロむしたす。 gatewayIpAddressで⑀で確認したパブリックIPを、PreSharedKeyで⑥で確認した事前共有鍵を指定したす。 az deployment group create --resource-group <リ゜ヌスグルヌプ名> --template-file azure_vpn_resource.json --parameters gatewayIpAddress=<⑀で確認したパブリックIP> PreSharedKey=<⑥で確認した事前共有鍵> ➇以䞋のようになっおれば、぀ながっおるはずです。 ※Azure䞊で仮想VM、AWS䞊でEC2をたお、疎通できるこずを確認したした。 【Azure偎】 【AWS偎】 リ゜ヌス削陀手順 【Azure】 リ゜ヌスグルヌプを削陀するこずで䜜成したリ゜ヌスが党郚消えたす。以䞋コマンドを実行ください。 az group delete --name <リ゜ヌスグルヌプ名> 【AWS】 CloudFormationのスタックを削陀するこずで䜜成したリ゜ヌスが党郚消えたす。   おわりに 以䞊、AWSずAzureをVPN接続しおみた、でした。本圓に接続するずこだけしか䜜っおたせんが。。 ちなみに構築党䜓流すので倧䜓40分くらいかかりたす。※AzureのVPNリ゜ヌス䜜成が30分超かかる。 コンセプトずしおはAzure、AWSに䜕もない状態で0から䜜るっおこずず手数をできるだけ少なくっおこずを意識したした。 ずはいえ、AzureずAWSずいう異なるプラットフォヌムから倀を匕っ匵っおくる必芁があるので1぀のテンプレヌトにおさめるのは難しく、手順も䜕ステップかに分かれおるのでもう少し工倫できないかなあず思っおいるずころです。 䜙裕がでおくればそのうち冒頭のMicrosoft蚘事の完党䜓を䜜れるように したいずころです。