SCSKクラりド゜リュヌションのブログ - TECH PLAY

TECH PLAY

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

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

å…š1268ä»¶

こんにちは、SCSKの坂朚です。 本蚘事では、 保存前凊理 の䞭でも蚈算凊理に焊点を圓お、以䞋の3぀の機胜に぀いお、具䜓的な蚭定䟋を亀えながら解説したす。 乗数 差分 1秒あたりの差分   保存前凊理に぀いお 保存前凊理ずは、Zabbixが監芖察象から取埗したデヌタを デヌタベヌスに保存する盎前に、その倀を加工・倉換するための機胜 です。䟋えば、取埗したデヌタの単䜍を倉換バむト→ビットなどしたり、环積し続けるデヌタから「前回からどれだけ増えたか」ずいう差分や速床を蚈算したりできたす。 これにより、䞍芁なデヌタを保存せずに枈むためデヌタベヌスの負荷を軜枛できるほか、デヌタを敎圢するこずで、より柔軟で高床な監芖や分かりやすいグラフ描画を実珟できたす。 2 アイテムの値の保存前処理 www.zabbix.com   乗数 取埗したデヌタに察しお、 指定した数倀を掛け算しお保存する凊理 です。敎数だけでなく、小数0.5などや科孊的衚蚘1e+2なども䜿甚可胜です。   ナヌスケヌス 単䜍の倉換 : バむト(B)をビット(bit)に倉換する、ミリ秒を秒に倉換する 倍率の調敎 : 0.01.0で衚される倀を、0100(%)の衚蚘に盎す 物理量の補正: センサヌ等の生デヌタに係数を掛けお正しい電圧や枩床にする   実䟋 byte単䜍で出力されるOSやネットワヌク機噚が返す生のデヌタを、bit単䜍で監芖する蚭定をしたす。 アむテムおよび保存前凊理の蚭定は以䞋のずおりです。   『乗数』の保存前凊理では、パラメヌタに入力した数倀を、取埗した元デヌタに掛けおデヌタベヌスに保存したす。 今回蚭定した保存前凊理は、取埗した倀に8を掛ける蚭定ずなっおいたす。   こちらのように取埗されたす。   差分 (珟圚の倀)  (前回の倀) を蚈算し、その差分量を保存する凊理 です。前回チェック時から「どれだけ倀が増えたたたは枛ったか」を蚘録したす。   ナヌスケヌス 环積カりンタの増加量監芖: 「サヌバ起動時からの総アクセス数」や「総゚ラヌ数」のような、环積しおいくデヌタに察しお、 「前回の監芖から䜕件増えたか」を知りたい堎合 ファむルの増加サむズ  : ログファむルのサむズ監芖などで、前回から䜕バむト曞き蟌たれたかを知りたい堎合   実䟋 ファむルサむズの差分を返す蚭定をしたす。 アむテムおよび保存前凊理の蚭定は以䞋のずおりです。   『差分』の保存前凊理は、パラメヌタを蚭定せず、名前の項目から『差分』を遞択するだけずなっおいたす。   こちらのように取埗されたす。   1秒圓たりの差分 (珟圚の倀  前回の倀) ÷ (前回からの経過秒数) を蚈算する凊理 です。いわゆる「速床レヌト」を算出するために䜿甚したす。   ナヌスケヌス トラフィック監芖 (bps): 环積転送量から、珟圚の通信速床を算出する ディスクI/O (IOPS)   : 环積読み曞き回数から、1秒間あたりの凊理回数を算出する CPUスむッチ回数   : コンテキストスむッチの环積回数から、珟圚の負荷状況毎秒の切り替え回数を算出する   実䟋 『乗数』の実䟋で䜜成した受信した合蚈ビット数を取埗するアむテムから、『1秒あたりの差分』を取っおむンバりンド垯域(bps)を求める蚭定をしたす。 アむテムは『乗数』のものず同じであり、保存前凊理は『乗数』の保存前凊理に加えお『1秒あたりの差分』を远加した蚭定ずなっおおりたす。 『1秒あたりの差分』の保存前凊理は、パラメヌタを蚭定せず、名前の項目から遞択するだけずなりたす。 保存前凊理は、蚭定したステップの䞊から順番に実行されたす。今回の䟋では、たず『乗数』でバむトをビットに倉換し、その倉換埌の倀を䜿っお『1秒あたりの差分』を蚈算しおいたす。     こちらのように取埗されたす。   たずめ 本蚘事では、Zabbixの保存前凊理機胜の䞭から、蚈算凊理を行う『乗数』『差分』『1秒あたりの差分』に぀いお解説したした。 監芖察象から取埗できるデヌタは、必ずしもそのたた監芖やグラフ化に適した圢匏であるずは限りたせん。しかし、保存前凊理を適切に組み合わせるこずで、以䞋のようなメリットが埗られたす。 デヌタの意味付け: 単なる数倀バむト数などを、盎感的に分かりやすい単䜍bpsなどに倉換できる 倉化の可芖化  : 环積倀ではなく、増加傟向や速床を可芖化するこずで、障害の予兆を捉えやすくなる DB負荷の軜枛   : 䞍芁な生デヌタを保存せず、必芁な加工枈みデヌタのみを保存できる スクリプトやSQLでの加工に頌らず、Zabbixの蚭定だけで柔軟なデヌタ凊理が可胜です。ぜひこれらの機胜を掻甚しお、より効率的で粟床の高い監芖環境を構築しおみおください。 最埌たでお読みいただきありがずうございたした   â–Œ Zabbixに関するおすすめ蚘事 【Zabbix】保存前凊理たずめ -テキスト線- Zabbixの保存前凊理テキスト線を培底解説。正芏衚珟、眮換、文字列削陀など5぀の手法を䜿い、コマンド出力やログから必芁な倀を抜出するテクニックを具䜓䟋で玹介。未加工のデヌタを敎圢し、監芖の質を向䞊させたい方必芋です。 blog.usize-tech.com 2025.12.04 【Zabbix】UserParameterでスクリプト実行結果を監芖する方法 ZabbixのUserParameter蚭定ガむド。独自の監芖項目を远加する方法、匕数を䜿ったコマンドの䜿い回し、system.runずの違いを具䜓䟋で玹介。監芖業務を効率化したい方はぜひ。 blog.usize-tech.com 2025.11.06 【Zabbix】system.runでスクリプト実行結果を監芖する方法 Zabbixのsystem.run蚭定方法をステップバむステップで解説。暙準アむテムにないカスタム監芖を実珟するため、zabbix_agentd.confの修正、安党なAllowKeyの䜿い方、スクリプトの暩限蚭定たでを網矅。初心者でも安心のガむドです。 blog.usize-tech.com 2025.11.04   匊瀟ではZabbix関連サヌビスを展開しおいたす。以䞋ペヌゞもご参照ください。 ★Zabbixの基瀎をたずめたeBookを公開しおおりたす★ Zabbix資料ダりンロヌドSCSK Plus サポヌト for Zabbix Zabbix監芖構築に必芁な知識ず最新機胜に぀いおの資料をダりンロヌドできるペヌゞです。䞖界で最も人気のあるオヌプン゜ヌス統合監芖ツヌル「Zabbix」の導入構築から運甚保守たでSCSKが匷力にサポヌトしたす。 www.scsk.jp   ★SCSK Plus サポヌト for Zabbix★ SCSK Plus サポヌト for Zabbix 䞖界で最も人気のあるオヌプン゜ヌス統合監芖ツヌル「Zabbix」の導入構築から運甚保守たでSCSKが匷力にサポヌトしたす。 www.scsk.jp   ★SCSK Zabbixチャンネル★ SCSK Zabbixチャンネル SCSK Zabbixチャンネルでは、最新のZabbixトレンドや実際の導入事䟋を動画で解説。明日から䜿える実践的なノりハりを提䟛したす。 今すぐチャンネル登録しお、最新情報を受け取ろう www.youtube.com
こんにちは。SCSKの北川です。 今回はServiceNowのナレッゞ管理におけるフィヌドバック機胜に぀いおたずめたした。 本蚘事は執筆時点2026幎1月の情報です。最新の情報は補品ドキュメントを参考にしおください。 ナレッゞ蚘事のフィヌドバック 「フィヌドバック」は ナヌザヌがナレッゞ蚘事の有甚性や改善点を評䟡・コメントできる機胜 です。この機胜を掻甚するこずにより、蚘事の品質向䞊や継続的な改善が可胜になりたす。 ナレッゞ蚘事のフィヌドバックを送信する぀の方法 蚘事にフラグを蚭定する。 蚘事を評䟡する。  [圹に立ちたしたか] の質問に [はい] たたは [いいえ] ず回答する。 蚘事にコメントを远加する。 コメント远加埌↓ ナヌザヌがナレッゞ蚘事に関するフィヌドバックを送信埌、ナレッゞフィヌドバックテヌブル (kb_feedback) にレコヌドが䜜成されたす。   フィヌドバックタスク        ナレッゞフィヌドバックタスクは、ナヌザヌからの改善芁望や䜎評䟡をタスク化し、担圓者が察応できるようにする仕組みです。 改善察応の挏れを防ぎ、ナレッゞ蚘事の品質を継続的に向䞊させるこずができたす。 タスクが䜜成される条件は以䞋のプロパティにお蚭定可胜です。 glide.knowman.feedback.enable_actionable_feedback_for_helpful 蚘事が圹に立たないずマヌクされおいる堎合にアクション可胜なフィヌドバックタスクを䜜成したす。 glide.knowman.feedback.enable_actionable_feedback_for_rating 蚘事がこの倀以䞋に評䟡されおいる堎合、アクション可胜なフィヌドバックタスクを䜜成したす。0 たたは倀が蚭定されおいない堎合、レヌトタむプのフィヌドバックに察しおアクション可胜なフィヌドバックタスクが有効になっおいないこずを瀺したす。   たずめ 今回はナレッゞ管理におけるフィヌドバック機胜をご玹介したした。 フィヌドバックを掻甚し、ナレッゞ蚘事の品質を継続的に向䞊させたしょう。
こんにちは。SCSKの井䞊です。 この蚘事では、New RelicのInfrastructure ゚ヌゞェント導入埌に、むンフラ基盀を監芖するための画面の芋方を解説したす。CPU、メモリ、ネットワヌクトラフィックなどの芳枬方法を理解するこずで、むンフラ基盀のボトルネックを把握できるようになりたす。 はじめに アプリケヌションを安定しお動䜜させるためには、むンフラ基盀を正垞に皌働させるこずが䞍可欠です。ハヌドりェア性胜に関するデヌタを芳枬し、むンフラ関連の情報を䞀元管理するこずで、システム党䜓を把握し、健党性を高めるこずが安定したサヌビス提䟛に぀ながりたす。この蚘事を読んで、Infrastructure機胜を少しでも理解いただけるず幞いです。 Infrastructure゚ヌゞェントの導入方法に぀いおは、過去の蚘事からご確認いただけたす。 【New Relic】Infrastructure゚ヌゞェントのむンストヌルず蚭定(Linux版) この蚘事では、New RelicのInfrastructure゚ヌゞェントの導入方法に぀いお解説したす。手順を説明する前に、よくある疑問に觊れおいたすので、理解を深めおから実際の手順に挑んでいきたす。 blog.usize-tech.com 2026.01.14   InfrastructureのUI構成 この画面でInfrastructureの芋方を解説したす。サヌバヌやコンテナ、ずいった基盀党䜓の状態を俯瞰できたす。アプリケヌションのパフォヌマンスを远うだけでは芋えない、ホストレベルのリ゜ヌス状況やむベント履歎、むンベントリ倉化などを統合的にチェックできるため、日々の運甚監芖やトラブルシュヌティングに欠かせないUIです。 䞻芁郚分UI Infrastructureの機胜は䞻芁3セクションに分かれおいたす。Hostsはリ゜ヌス監芖、Inventoryは構成管理、Eventsはトラブルシュヌティングに掻甚など、それぞれむンフラ基盀を芳枬する䞊での必芁な機胜が備わっおいたす。   セクション 抂芁 Overview むンフラUIの䞻芁ペヌゞ。 ・ Hosts ホストの状態を䞀芧衚瀺 ・ Kubernetes K8sむンテグレヌションのデヌタ ・ Network ネットワヌクパフォヌマンス監芖 ・ Inventory 構成情報の確認アップグレヌドや蚭定ドリフト ・ Events 重芁なシステムアクティビティのタむムラむン Integrations むンフラ統合のテレメトリを衚瀺。 ・クラりドサヌビスAWS、Azure、GCP、OCI ・サヌドパヌティサヌビスApache、Cassandra、RabbitMQなど Settings システム蚭定関連。 ・ Alerts アクティブなむンシデントを含むアラヌト抂芁   むンフラストラクチャ監芖 UI の玹介 | New Relic Documentation An introduction to the New Relic infrastructure monitoring UI pages. docs.newrelic.com   党ホストのサマリを確認したい堎合 この画面ではInfrastructure ゚ヌゞェントが導入されたホストのメトリクスデヌタを確認するこずができたす。 察象画面 利甚シヌン サマリ情報 最近の負荷倉動や異垞をすばやく確認したいずき システム情報(CPU/メモリ等) 長期的な傟向や履歎を分析したいずき Network情報 ネットワヌクのボトルネックや負荷分散の必芁性を刀断したいずき プロセス情報 高負荷プロセスや異垞な動䜜を特定したいずき ディスク情報 ディスク容量䞍足やI/O異垞を早期に怜知したいずき   他のメトリクスを確認したい堎合 New Relicでは、調査に必芁なさたざたなメトリクスを収集しおいたす。その他のメトリクスを確認したい堎合は、画面の赀枠で瀺したプルダりンメニュヌから遞択できたす。執筆時点で確認可胜なメトリクス䞀芧も参考ずしお衚で蚘茉したす。   New Relicで芳枬できるメトリクス情報䞀芧 カテゎリ メトリクス名 説明 CPU CPU (%) CPU党䜓の䜿甚率   CPU user (%) ナヌザヌプロセスによるCPU䜿甚率   CPU system (%) システムプロセスによるCPU䜿甚率   CPU i/o wait (%) I/O埅ちによるCPU䜿甚率   CPU idle (%) CPUアむドル時間の割合   CPU steal (%) 順番埅ちしおいるCPU時間の割合 ロヌドアベレヌゞ Load average 1 min 盎近1分間の平均負荷   Load average 5 min 盎近5分間の平均負荷   Load average 15 min 盎近15分間の平均負荷 メモリ Memory used (%) メモリ䜿甚率   Memory free (%) メモリ空き率   Memory free bytes 空きメモリ容量   Memory total bytes メモリ総容量   Memory used bytes 䜿甚メモリ容量 スワップ Swap free bytes 空きスワップ容量   Swap total bytes スワップ総容量   Swap used bytes 䜿甚スワップ容量 ディスク Disk free bytes 空きディスク容量   Disk free (%) 空きディスク率   Disk total bytes ディスク総容量   Disk used bytes 䜿甚ディスク容量   Disk used (%) ディスク䜿甚率   Disk utilization (%) ディスク党䜓利甚率   Disk read utilization (%) 読み取り時のディスク利甚率   Disk write utilization (%) 曞き蟌み時のディスク利甚率   Disk reads per second 1秒あたりのディスク読み取り回数   Disk writes per second 1秒あたりのディスク曞き蟌み回数 アプリケヌション Application response time アプリケヌション応答時間APM有効時のみ   Application throughput アプリケヌションのスルヌプットAPM有効時のみ   Application error rate アプリケヌションの゚ラヌ率APM有効時のみ   個々のホストを確認したい堎合 党ホストを䞀芧で確認し、特定のホストだけリ゜ヌス䜿甚率が高いこずがわかったため、ホスト数を絞りたい堎合などは、画面右䞊の 「 Filter 」 をクリックしお察象ホストを絞り蟌むこずができたす。   個々のホストを1぀の画面で確認したい堎合 特定の1぀のホストだけを確認したい堎合は、Summary欄より該圓のホストをクリックするこずで、そのホストに関する芳枬デヌタを確認するこずができたす。 1.画面䞋郚「Summary」欄にホスト情報が衚瀺されおいたす。衚瀺したいホストをクリックしたす。 2.該圓のホスト情報が衚瀺されたす。この画面でメトリクスや、ログなどを確認するこずができたす。   むンフラストラクチャホストUI | New Relic Documentation For New Relic infrastructure monitoring, use the Hosts UI page to view the most important metrics from across your serve... docs.newrelic.com   むンベントリUI この画面では、Infrastructure゚ヌゞェントがむンストヌルされたホスト内のOSやアプリケヌションの構成芁玠、むンストヌルされおいるパッケヌゞなどを、ホストにログむンせずに確認できたす。構成情報はホストから送信される最新デヌタが即座にUIに反映されたす。ホストがシャットダりンしたり゚ヌゞェントが停止しおNew Relicぞのデヌタ送信ができなくなった堎合でも、最埌に報告されたむンベントリ情報は最倧24時間UIに保持されたす。 利甚シヌンずしおは以䞋の䟋が挙げられたす。 ・セキュリティ察策脆匱性察応埌、叀いパッケヌゞが残っおいないか ・バヌゞョン比范   ïŒšæœ¬ç•ªç’°å¢ƒãšãƒ†ã‚¹ãƒˆç’°å¢ƒã®ãƒ‘ッケヌゞや蚭定ファむルの差異を比范 ・構成管理            ミドルりェアやサヌビスのむンストヌル状況を把握   むンフラストラクチャ むンベントリ UI ペヌゞ | New Relic Documentation Use the New Relic infrastructure inventory page to monitor package and kernel versions across your entire architecture. docs.newrelic.com   むベントUI システムやホストの重芁なアクティビティをリアルタむムで確認できたす。むンフラストラクチャヌの倉曎やアクティビティを時系列で衚瀺し、特定の時間に発生したむベントを䞀元管理できたす。ホストごずにむベントを怜玢できたすが、 画面右䞊で指定した時間範囲内のむベントのみが衚瀺 されたす。広範囲を調べたい堎合は、時間範囲を拡倧する必芁がありたすのでご泚意ください。 利甚シヌンずしおは以䞋の䟋が挙げられたす。 ・障害の原因特定               ïŒšã‚¹ãƒ‘むクや異垞倀が発生した時間垯に、どんなむベントがあったかを確認 ・倉曎履歎の監査               ïŒšã‚€ãƒ³ãƒ™ãƒ³ãƒˆãƒªïŒˆKernel、Metadata、Packages、Services、Sessionsの倉曎履歎を蚘録 ・ナヌザヌセッションの監芖ナヌザヌの接続・切断むベントを蚘録し、セキュリティや運甚状況を把握 ・構成倉曎の圱響分析         ïŒšèš­å®šå€‰æ›Žã‚„パッケヌゞ曎新などのむベントず、CPUやメモリなどのメトリクスを比范     むンフラストラクチャ むベント UI ペヌゞ | New Relic Documentation The New Relic infrastructure events UI page gives you a unified timeline of important changes and events in your archite... docs.newrelic.com   Infrastructure 機胜を䜿いこなすために 倧芏暡か぀動的に倉化する環境を監芖するために、すべおのホストDB・Webサヌバヌなどぞ゚ヌゞェントをむンストヌルし、単䞀のダッシュボヌドでデヌタを䞀元的に確認するこずで、チヌム間で情報を共有しやすくなりたす。たた、アラヌト条件の蚭定やクラりドむンテグレヌションの有効化ずいったベストプラクティスにより、オブザヌバビリティを迅速に向䞊させるこずができたす。継続的に改善を繰り返すこずで、障害発生時の原因特定や埩旧たでの時間MTTRを倧幅に短瞮し、クラりド・オンプレミスに関わらず、運甚デヌタを統合的に管理できるよう、以䞋指針がたずめられおいたす。 項目 抂芁 1. Infrastructure゚ヌゞェントを環境党䜓にむンストヌル すべおのホストDB、Webサヌバヌなどに゚ヌゞェントを導入し、タグやカスタム属性で分類。 2. EC2むンテグレヌションを蚭定 AWSタグずメタデヌタを自動むンポヌトし、タグでフィルタリングやアラヌト蚭定を実珟。新しいむンスタンスも自動远加。 3. むンテグレヌションを有効化 AWSサヌビスやホスト䞊のアプリを監芖。事前蚭定されたダッシュボヌドを利甚可胜。 4. ホストグルヌプビュヌの䜜成 ゚ンティティフィルタヌでグルヌプ化し、皌働ステヌタスを色分け衚瀺し、問題箇所を迅速に特定。 5. アラヌト条件を䜜成 タグベヌスで条件を䜜成し、新しいホストにも自動適甚。 6. InfrastructureデヌタをAPMデヌタず統合 Application Performance Monitoring(APM)ずInfrastructureを䞊べお衚瀺し、根本原因を迅速に特定。サヌビスマップでアプリずむンフラの関連性を可芖化。 7. メトリクスずむベントを掻甚 カスタムダッシュボヌドを䜜成。チヌムで共有し、むンフラずアプリの健党性を䞀元管理。 8. ゚ヌゞェントを定期的に曎新 新機胜や改善を掻甚するため、最新バヌゞョンぞの曎新を掚奚。   Infrastructureモニタリングのベストプラクティスガむド | New Relic Documentation Best practices to make dynamic infrastructure and server monitoring even easier with New Relic. docs.newrelic.com   さいごに この蚘事では、New Relic Infrastructure の䞻芁な機胜に぀いお解説したした。New Relic は倚機胜なプラットフォヌムであり、むンフラ監芖ひず぀をずっおも芳枬できるデヌタは倚いです。そのため、ただ取り䞊げきれおいない機胜や、より深く掘り䞋げられるトピックも数倚く存圚したす。今埌は、実際の運甚シナリオで圹立぀蚭定䟋や、ダッシュボヌド掻甚方法、アラヌトチュヌニング、クラりドサヌビスずの統合など、実践的な情報も解説しおいきたす。匕き続き、みなさたの環境運甚に少しでも貢献できれば幞いです。 SCSKはNew Relicのラむセンス販売だけではなく、導入から導入埌のサポヌトたで䌎走的に導入支揎を実斜しおいたす。くわしくは以䞋をご参照のほどよろしくお願いいたしたす。
本蚘事は 新人ブログマラ゜ン2025 1/22付の蚘事です。 みなさん、初めたしお。幎床に入瀟した新人の杉山です。 AWS歎はただただ浅い私ですが、資栌勉匷やハンズオン、そしお実際の案件察応を通じお、日々孊習に励んでいたす 今埌も、孊んだこずや気づいたこずなどをブログで発信しおいきたすので、AWS初心者の奮闘蚘にぜひお付き合いください 今回の蚘事では、私が実際に䜓隓したAmazon SNS(Simple Notification Service)のサブスクリプションが、誀っお削陀されおしたう原因ず、その察凊法に぀いおご玹介したす。 Amazon SNSを今埌䜿甚される方々の参考になれば幞いです はじめに 事の発端は2025幎11月。ずある案件で Amazon CloudWatch  Amazon SNS によるアラヌム通知を構築するこずになり、怜蚌環境で動䜜確認を行っおいたした。 しかし、ある日を境に 通知メヌルが䞀切届かなくなる ずいう事態が発生!! 䞍審に思い、コン゜ヌルでサブスクリプションの状態を確認しおみたずころ、なんず、IDが” 削陀枈み ”ずなっおいたした。 「なぜ削陀されたのか」ず原因を調べた結果、あるリンクを誀っおクリックしおしたったこずが原因 であるこずが刀明したのです。 そのリンクずは  通知が消える悲劇の原因 Amazon SNSでは、サブスクリプション登録時や通知メヌルに “unsubscribe登録解陀リンク” が自動的に挿入されおいたす。 これはAWSの仕様で、ナヌザヌがい぀でも解陀できるようにするための仕組みです。 このリンクをクリックするず、以䞋のような画面に遷移し、サブスクリプションが登録解陀されたす。   問題は、このリンクを 誀っおクリック しおしたうこず。 クリックするず、SNSトピックからサブスクリプションが削陀され、通知メヌルが届かなくなりたす。 さらに、確認画面や譊告はほずんどなく、ワンクリックで解陀されるため、意図せずに登録解陀しおしたうケヌスも倚いのです。 では、意図しない登録解陀を避けるためにどうやっおこの解陀リンクを無効化するのか 次の章では、解陀リンクを無効化するための具䜓的な方法を詳しく解説したす unsubscribeリンクを無効化する方法 蚭定は 「SNSサブスクリプションの䜜成」 、 「”Confirm subscription”のリンク登録」 のステップで行いたす。 SNSサブスクリプションの䜜成 察象のトピック画面で「サブスクリプションの䜜成」をクリックしたす。 詳现を入力した状態で「サブスクリプションの䜜成」をクリックしたす。   䜜成が完了するず、IDが”保留䞭の確認”のサブスクリプションが衚瀺されたす。   ”Confirm subscription”のリンク登録 サブスクリプションの䜜成埌、「AWS Notification – Subscription Confirmation」ずいうメヌルが届きたす。 ”Confirm subscription”のリンクをクリックしないでください 代わりに”Confirm subscription”のリンクを 右クリックしおコピヌ したす。 次にコン゜ヌルに戻り、「サブスクリプションの確認」をクリックしたす。 先ほどコピヌしたURLをペヌストし、「サブスクリプションの確認」をクリックしたす。     URLは以䞋の圢匏です。 https://sns.<リヌゞョン>.amazonaws.com/confirmation.html?TopicArn=arn:aws:sns:<リヌゞョン>:<AWSアカりントID>:<トピック名>&Token=<トヌクン倀>&Endpoint=<メヌルアドレス> Outlook䞊でURLをコピヌする際、Microsoft Defender for Office 365の「Safe Links」機胜が有効になっおいる堎合は、リンクがセキュリティ保護のために曞き換えられるため、元のURLにデコヌドする必芁がありたす。 するず、サブスクリプションのIDが倉曎され、ステヌタスが” 確認枈み ”になりたす。 では、本圓にunsubscribeリンクが無効化されたのか次の章で動䜜確認を行いたす 動䜜確認 再䜜成したサブスクリプションに登録したメヌルアドレス宛に、テストメッセヌゞを送信しおみたしょう。 コン゜ヌル䞊で、画面右䞊にある 「メッセヌゞの発行」 をクリックしたす。 次に、「゚ンドポむントに送信するメッセヌゞ本文」 に任意の文字列を入力し、画面右䞋の 「メッセヌゞの発行」 をクリックしたす。   するず、テスト甚のメヌルが届きたす。メヌル本文には、埓来通り unsubscribeリンク が含たれおいたす。 ここで、そのリンクをクリックしおみるず    サブスクリプションが解陀されないこずを確認できたした さいごに 今回の蚘事では、Amazon SNSの通知メヌルに含たれる「unsubscribeリンク」が誀クリックによっお通知停止を匕き起こす問題ず、その察策に぀いお解説したした。 この方法を実斜するこずで、誀クリックによる通知停止のリスクを倧幅に枛らすこずが可胜です。 今回の方法をぜひ詊しお、「通知が消える悲劇」からシステムを守りたしょう 最埌たで読んでいただきありがずうございたした 参考サむト SNSトピックのunsubscribeの無効化蚭定 - Qiita はじめに 今回業務の䞭でSNSのサブスクリプションを誀っお解陀しおしたうのを無効化したいずいう芁件があったため、調べた䞭で䜜り盎しが必芁ず蚘茉のある蚘事が倚く、䜜り盎さなくおも蚭定できたので、メモずしお残そうず思いたす。 unsubscri... qiita.com
AWS ã‚’孊んでいお、思わず 「 Gatewayず名の付くサヌビス倚くないか 」 ず感じたこずがありたした。 Direct Connect Gateway、Transit Gateway、API Gateway、NAT Gateway、ゲヌトりェむ型 VPC ゚ンドポむントなど。 AWS SAP(Solutions Architect Professionalの勉匷䞭に混乱したのが正盎なずころです。 AWSのGateway系サヌビスを䞻題に、Azureずの比范を通しお圹割を敎理したした。 AWSを䞻に扱っおいる方には、Azureず比べるこずでGatewayず名の付くサヌビスの倚さを感じおもらいたいです。 Gatewayずは 䞀般的なIT甚語ずしおのゲヌトりェむは、異なるプロトコル間の通信を䞭継する仕組みを指したす。 ネットサヌフィンしおるず、ゲヌトりェむを解説するSCSKのサむトを芋぀けたした。 ゲヌトりェむずはIT甚語蟞兞SCSK IT Platform Navigator ゲヌトりェむGatewayずは、英語で「出入口」を意味する蚀葉。異なる通信プロトコルを䜿甚するネットワヌク間を䞭継する機噚たたは仕組みを指す。 www.scsk.jp 䞀方、AWSにおいおのGatewayは、必ずしもプロトコル倉換を行うわけではなく、 「ネットワヌク境界の入口」くらいの意味で䜿われおいそうです。※個人の意芋 比范衚 AWSのサヌビスずAzureを比范したした。 䞀察䞀察応ではないですが、抂念的に近いサヌビスをたずめおたす。 AWSサヌビス AWSサヌビスの抂芁 Azureサヌビス Direct Connect オンプレ環境からAWSぞ専甚線ネットワヌクを提䟛 ExpressRoute Direct Connect Gateway Direct Connect接続を耇数のリヌゞョンのVPCで共有 ExpressRoute Global Reach Transit Gateway  耇数のVPC間・オンプレ間のルヌティングを集䞭管理 Virtual WAN Site-to-Site VPN  オンプレ環境や他クラりドのネットワヌクずAWSの通信をIPSecを䜿甚しセキュアに通信 Azure VPN Gateway ゲヌトりェむ型 VPC ã‚šãƒ³ãƒ‰ãƒã‚€ãƒ³ãƒˆ S3ずDynamoDBなどが察象の゚ンドポむント Azure Vnet Service Endpoint むンタヌフェむス型 VPC ã‚šãƒ³ãƒ‰ãƒã‚€ãƒ³ãƒˆ 倚くのサヌビスが察象でプラむベヌト接続を行う際の゚ンドポむント Private Endpoint API Gateway REST/HTTP/WebSocket API ã®ãƒ•ロントドア API Management AWS NAT Gateway プラむベヌトサブネット内のむンスタンスからむンタヌネットぞの接続 Azure Nat Gateway   おたけ よくでる構成図 AWS SAPでよく出おくるDirect ConnectずTransit Gatewayの簡易的な構成図を䜜っおみたした。 組み合わせで出題されおたむメヌゞで、印象に残っおたす。               AzureもNAT Gatwayが必須に Azure Nat Gateway に぀いお。 AzureではこれたでNAT Gatewayを䜜成しなくおもむンタヌネット通信が可胜であり、䟿利だなず思っおたした。 自動で azure-default-snat なるものが䜜成されおいたようです。 詳しくはこちら 【Azure】Azure NAT Gateway のすゝめ 昚今はAzure仮想マシンから倖郚SaaSのデヌタ連携をするケヌスが倚くあり、SaaS偎のセキュリティ察策ずしお特定のグロヌバルIPアドレスのみ通信蚱可するこずがありたす。通垞、仮想マシンに甚意されおいるグロヌバルIPアドレスはAzure偎で䜜成されたグロヌバルIPアドレスであり再起動やAzure偎の任意のタむミングで意図せず倉曎されおしたうこずから、AzureNATGatewayを利甚するこずでグロヌバルIPアドレスを固定可胜ずなりたす。 blog.usize-tech.com 2024.01.26 しかし廃止ずなり、2025幎10月以降にはAzure NatGateway等の明瀺的なアりトバりンド構成が掚奚されたようです。 https://azure.microsoft.com/ja-jp/updates?id=default-internet-outbound-access-for-simplified-node-communication-batch-pools-without-public-ip-addresses-will-be-retired-on AWSの勉匷しおお驚いたAzureニュヌスでした。   参考文献 AWS ず Azure のネットワヌク オプションの比范 - Azure Architecture Center Azure ず AWS のネットワヌク オプションを比范したす。 クラりド仮想ネットワヌク、クロスプレミス接続、DNS 管理などに぀いお比范したす。 learn.microsoft.com AWS サヌビスや Azure サヌビスず Google Cloud を比范する  |  Get started  |  Google Cloud Documentation docs.cloud.google.com
ブログリレヌ 前回の蚘事 では、バック゚ンドのあれこれを霋藀さんが蚘事にしおくれたしたが、本日はフロント゚ンド線ずいうこずで、AWSパラメヌタシヌト自動生成ツヌルのGUIをどのような技術を䜿甚しお実珟したかをご玹介できればず思いたす フロント゚ンド抂芁 フロント゚ンドは䞋蚘のような流れでバック゚ンドパラメヌタヌシヌト出力に凊理が匕き継がれたす。 䞊蚘凊理のうち、本蚘事のフロント゚ンドは「GUI」ず「GUIを提䟛するサヌバヌ」郚分を担圓しおいたす。 䜿甚した技術 フロント゚ンド実珟のために䜿甚した䞻な技術ずその圹割は䞋蚘の通りです。 技術 圹割 JavaScript クラむアント偎、サヌバヌサむド偎のロゞックを蚘述するために䜿甚した蚀語 Node.js  JavaScriptの実行環境であり、アプリケヌション党䜓の実行基盀 Express.js WebサヌバヌおよびREST APIなどのサヌバヌサむド偎の機胜を提䟛しおくれるWebフレヌムワヌク HTML5 + CSS3 画面構造ずデザむン フロント゚ンドは、クラむアント偎、サヌバヌサむド偎も䞀貫しおJavaScriptを䜿甚しお実装しおいたす。 サヌバヌサむド偎の開発ずしお、Ruby + Rails や Python + Django ずいった組み合わせもある䞭で、JavaScript + Node.js を䜿甚した理由ずしおは、以䞋の通りです。 案件で JavaScript を觊る機䌚があり慣れおいる よく耳にする組み合わせでなんかかっこいい しかし、よくよく調べるずよく耳にする理由がありたした。それに぀いおは以降で説明しおいきたいず思いたす。 Node.js Node.jsずは そもそもNode.jsずは䜕者かずいうず、 JavaScriptをサヌバヌ䞊で実行するための開発環境 です。 元々、JavaScriptずいう蚀語は他の蚀語ず異なり、ブラりザ䞊で動䜜する蚀語であり、ロヌカルOS䞊環境では動䜜させるこずができない蚀語でした。 よっお、ブラりザ䞊でしか動䜜しない JavaScript ではロヌカル環境にあるファむルを読みにいくこずができないずいう問題がありたした。 その制限を取っ払っおくれたのが、Node.jsずいう蚳です。 Node.jsの登堎のおかげで、 クラむアント・サヌバヌサむドの䞡者を同䞀の蚀語で開発 するこずができるようになりたした。 Node.jsの特城 Node.jsの特城ずしおは、䞻に以䞋の3぀が挙げられたす。 1. ノンブロッキングI/O凊理 前のタスクが完了しおいない状態でも次のタスクを開始でき、 非同期での凊理を実珟 しおいる。 そのため、倧量のアクセスがあっおも察応が可胜である。 2. シングルスレッドによる凊理 プログラムを実行する際に、1぀ず぀凊理を行う 。 䞀般的にシングルスレッドだず倧量のアクセスがあった堎合に制埡するこずが難しくなるが、ノンブロッキングI/O凊理によっお、倚くのアクセスがあっおもリアルタむムでレスポンスが可胜になる。 3. 豊富なラむブラリ サヌバヌサむドアプリケヌション、デスクトップアプリケヌション、コマンドラむンツヌルなどの幅広い甚途で䜿甚されるため、非垞に倚くのラむブラリがある。 npmずいうパッケヌゞ管理ツヌルを䜿甚するこずにより、膚倧なラむブラリを簡単にむンストヌル・管理するこずができる。 これらの特城から、Node.js + JavaScript は 倧量の同時凊理をさばけ、なおか぀様々な目的で䜿甚できる汎甚的な技術基盀 ずしお人気があるずいう蚳です。 Express.js ここたでで、Node.jsを䜿甚した理由や甚途は理解できたかず思いたすが、あくたでもNode.jsはサヌバヌサむド偎でJavaScriptを実行できるようにした実行環境であり、ただの基盀です。 フロント゚ンドを䜜成する䞊では、基盀の䞊に実際の機胜を䜜成しおあげる必芁がありたす。 その実際の機胜は䞀から䜜る必芁はなく、既に甚意されたひな圢から䜜成するこずができたす。 それにあたるのが、Express.jsです。 Express.jsずは Express.jsずは、 Node.jsのための軜量で柔軟なWebアプリケヌションフレヌムワヌク です。 フレヌムワヌクずはひな圢ずも蚀い換えるこずができ、様々なひな圢が甚意されおいたす。 䟋えば、機胜開発が簡単に実装できる以䞋のようなひな圢が甚意されおいたす。 ルヌティング機胜 ナヌザヌが特定のURLにアクセスした際に、 どのようなレスポンス応答を返すかを定矩 するこずができる。 䟋えば、ナヌザが / にアクセスしたら、トップペヌゞを衚瀺する、/download/file.xlsx にアクセスしたら、ファむルをダりンロヌドするなどがある。 REST API機胜 フロント゚ンドブラりザからのリク゚ストを受け取り、 Web䞊でデヌタをやりずりするための操䜜を定矩 するこずができる。その操䜜には以䞋のものがあり、これらを定矩するこずができる。 HTTPメ゜ッド 操䜜 GET リ゜ヌスを取埗する POST リ゜ヌスを䜜成する PUT 指定したIDのリ゜ヌスを曎新する DELETE 指定したIDのリ゜ヌスを削陀する 静的ファむルの配信 静的ファむルHTML、CSS、JavaScript、画像などをナヌザヌに配信するこずができる。 たた、HTTPヘッダヌによるキャッシュ制埡も可胜で、同じファむルぞの再リク゚スト時のレスポンス時間を短瞮できる。 どこに䜿甚したの では、フロント゚ンド実珟にあたっおどこに掻甚したのかずいうず䞋蚘の通りです。 機胜 䜿甚箇所 ルヌティング機胜 トップペヌゞの衚瀺 ファむルのダりンロヌド REST API機胜 AWSリ゜ヌス䞀芧取埗 Excel生成リク゚ストバック゚ンドぞのトリガヌ 静的ファむルの配信 HTML/CSS/JavaScriptファむルの配信 苊劎した点 リ゜ヌスごずに異なるJSONファむル フロント゚ンドでは、AWSのリ゜ヌスの詳现情報を衚瀺するために、AWS CLIコマンドを実行し、リ゜ヌスの䞀芧を取埗しおきおいたす。その䞀芧情報の構造が、リ゜ヌスによっお異なり、リ゜ヌスごずに取埗する情報を定矩しおあげるこずが苊劎したした。 䟋 EC2むンスタンスの堎合 {   “Reservations”: [     {       “Instances”: [         { “InstanceId”: “i-xxxxx”, “State”: {…} }       ]     }   ] } S3バケットの堎合 {   “Buckets”: [     { “Name”: “my-bucket”, “CreationDate”: “…” }   ] } このように、同じ「リ゜ヌス䞀芧を取埗する」ずいう凊理でも、項目名やJSONファむルのネスト構造の深さが異なりたす。そのため、すべおのリ゜ヌスに察しお、どのキヌからデヌタを取り出すか、IDずしお䜕を䜿うかを個別に定矩する必芁がありたした。 䞀方で、共通化できる郚分は共通化し、できるだけ同様のコヌドで詳现情報を取埗できるようにしおあげたした。やはりコヌドの最適化には、AIを䜿甚しおあげるのが効率よかったです。 特殊なリ゜ヌスの取埗フロヌ 䞀般的なリ゜ヌスの堎合、取埗フロヌは䞋蚘のようになりたす。 サヌビス遞択 ⇒ リ゜ヌス䞀芧から出力したいリ゜ヌスを遞択 ⇒ プレビュヌ画面衚瀺 ⇒ Excel 出力 しかし、サヌビスの䞭には䞀発で䞀芧を取埗できないサヌビスがありたす。 䟋えば、ELBのタヌゲットグルヌプの堎合、ELBに玐づくタヌゲットグルヌプを取埗する必芁があるため、たず最初にELBの䞀芧を取埗し、その埌にタヌゲットグルヌプを取埗する必芁がありたす。よっお、䞀芧の取埗フロヌずしおは䞋蚘のようになりたす。 サヌビス遞択ELBタヌゲットグルヌプ⇒ リ゜ヌス䞀芧から出力したいリ゜ヌスを遞択ELB⇒ リ゜ヌス䞀芧から出力したいリ゜ヌスを遞択タヌゲットグルヌプ⇒ プレビュヌ画面衚瀺 ⇒ Excel 出力 このようにサヌビスによっおは、䞭間ステップが存圚するものもあるため、コヌドを共通化するこずができず、苊劎したした。 たずめ 本蚘事では、AWSパラメヌタシヌト自動生成ツヌルのGUIであるフロント゚ンドで䜿甚した技術に぀いお簡単に玹介したした。 実は、この取り組みはフロント゚ンドのアプリケヌションを䜜成する぀もりはなく、バック゚ンドのJSONファむルをパラメヌタシヌトに倉換するアプリケヌションのみを構築予定でした。しかし、䜿甚するナヌザヌ目線で考えるず、やはりGUIがほしいずいうこずになり、開発に取り組みたした。 普段はむンフラ構築を担圓する郚眲のため、初めお觊れる技術が倚く、開発には3~4か月ほどかかっおしたいたしたが、この取り組みを経おアプリケヌションの知識を぀けるこずができ、フルスタック゚ンゞニアぞず䞀歩近づいた気がしたす。 皆さんもぜひ、息抜きもかねお普段ずは異なる分野の技術に觊れおみるのはいかがでしょうか ずいうわけで、私の投皿は以䞊です 次回は、AWSパラメヌタシヌト自動生成ツヌルを䜿っおみたずいうこずで、藪内さんにバトンタッチしたすので、ぜひそちらも閲芧いただければず思いたす。
こんにちは、ひるたんぬです。 電子レンゞ、生掻の䞭に圓たり前のように溶け蟌んでいる存圚ですよね。 でも、「レンゞ」ずはどこからやっおきた芁玠でしょうか 発明元のアメリカ英語でも”microwave (oven)”であり、「レンゞ」の芁玠は芋圓たりたせん。。 歎史を蟿るずヒントがありたした。 電子レンゞの加熱原理は、アメリカのレむセオン瀟によっお、レヌダヌ 装眮 の実隓䞭にお 菓子 がレヌダヌのマむクロ波によっお 溶 けおいるこずに気が付き、これにヒントを埗お、 マグネトロンを䜿った調理噚「レヌダヌレンゞ」ずしお補品化されたした。 匕甚䞀般瀟団法人 日本電機工業䌚「 電子レンゞの歎史 」 「電子レンゞ」ずいう蚀葉もここから生たれたのかも知れないですね¹。 ¹ 「レンゞ」の由来やその意味に぀いお、明確な文献を芋぀けるこずはできたせんでした。日本ではその前から「ガスレンゞガスコンロ」ずいう名称が広がっおおり、電気的に加熱料理できる調理噚具ずしお「電子レンゞ」ず぀けられたのではないか、ずいう説もあるようです。 さお、今回はCloudFrontの機胜の䞀぀、Lambda@Edgeにおけるログに぀いお少し玐解いおいきたす。 やりたいこず Amazon CloudFrontを䜿っおおり、その䞭でLambda@Edgeを䜿甚しおいたす。 ここで、Lambda@Edgeから出力されるログに぀いお、予めログの有効期限を蚭定しおおきたい堎合を考えたす。 既定では  AWSの公匏ドキュメントなどにも蚘茉がありたすが、Lambda@Edgeでは関数が実行された堎所に最も近いAWSリヌゞョンにロググルヌプが自動で䜜成され、ログむベントが保管されたす。 チュートリアル: 基本的な Lambda@Edge 関数 (コンソール) を作成する - Amazon CloudFront Amazon CloudFront で実行される基本的な Lambda@Edge 関数をコン゜ヌルを䜿甚しお䜜成する方法に぀いお説明したす。 docs.aws.amazon.com エッジ関数のログ - Amazon CloudFront Amazon CloudWatch Logs を䜿甚しお、Lambda@Edge 関数ず CloudFront Functions の䞡方の゚ッゞ関数のログを取埗しおください。 docs.aws.amazon.com たた、自動で䜜成されるロググルヌプは有効期限が未蚭定倱効しないのため、明瀺的に削陀しないずログが残り぀づけたす。 コンプラむアンスや芏玄䞊、ログはすべお保管する必芁がある堎合などはこの蚭定でも問題はありたせんが、ログむベントの保存にも料金は発生したす。 2026幎1月珟圚では、東京リヌゞョンにおいお1GBあたり$0.033の保存費甚が発生したす。 課題点 以䞊のこずから、Lambda@Edgeでログを保管する堎合、デフォルトの蚭定では無期限でログが残り続け、䞻に費甚面での負担が増倧しかねない点をご説明したした。 では、予めロググルヌプを䜜成し、ロググルヌプに察しお有効期限を蚭定したいのですが それには Lambda@Edgeがどこで実行されうるのかどこのAWSリヌゞョンにログが出力されうるのか 、を知る必芁がありたす。 Lambda@Edgeが実行される堎所 これを理解するためには、Amazon CloudFrontに぀いおも知る必芁がありたす。 CloudFrontは「゚ッゞロケヌション≠ リヌゞョン」ず呌ばれる堎所でキャッシュサヌバヌずしお機胜しおいたす。 ゚ッゞロケヌションにおキャッシュヒットしなかった堎合は「リヌゞョン別゚ッゞキャッシュ≠ リヌゞョン」にアクセスし、それでもヒットしなかった堎合はオリゞンからコンテンツを取埗したす。 匕甚 AWS Black Belt Online Seminar – Amazon CloudFront 基瀎線(P. 15) そしお、Lambda@Edgeは、䞊蚘の「リヌゞョン別゚ッゞキャッシュ」にデプロむされおいたす。 CloudFront Functionsに぀いおは「゚ッゞロケヌション」にデプロむされおいたす。 そのため、CloudFront Functionsの方が実行時間が早い䞀方、キャッシュ容量が少ないためコヌド容量の制限が厳しいものだず分かりたす。 パ゜コンのCPUにおけるL1・L2キャッシュずむメヌゞするず少し分かりやすいでしょうか  匕甚 AWS Black Belt Online Seminar – Amazon CloudFront (CloudFront Functions / Lambda@Edge ç·š) (P. 17) では、その「リヌゞョン別゚ッゞキャッシュ」はどこにあるのでしょうか 2026幎1月珟圚では13個所に蚭定されおいたす。 米囜東郚 (バヌゞニア北郚) – us-east-1 米囜東郚 (オハむオ) – us-east-2 米囜西郚 (北カリフォルニア) – us-west-1 米囜西郚 (オレゎン) – us-west-2 アゞアパシフィック (ムンバむ) – ap-south-1 アゞアパシフィック (゜りル) – ap-northeast-2 アゞアパシフィック (シンガポヌル) – ap-southeast-1 アゞアパシフィック (シドニヌ) – ap-southeast-2 アゞアパシフィック (東京) – ap-northeast-1 欧州 (フランクフルト) – eu-central-1 欧州 (アむルランド) – eu-west-1 欧州 (ロンドン) – eu-west-2 南米 (サンパりロ) – sa-east-1 明瀺的な䞀芧は公匏サむトからは芋るこずができなかったので、以䞋の資料から読み取りたした。 すべおAWSが提䟛する資料です Amazon CloudFront 甚のリヌゞョン別゚ッゞキャッシュを発衚 サヌビスアップデヌト Edge Networking Services ç·š └ P.8 Amazon CloudFront が AWS の欧州 (アむルランド) リヌゞョンで新しいリヌゞョン別゚ッゞキャッシュを開始 たた、CloudFrontのナヌザヌマニュアルからもLambda@Edgeのサヌビスにリンクされたロヌルの䜿甚がサポヌトされおいるリヌゞョンにお、同様のものを挙げおいたす。 デベロッパヌガむド – Amazon CloudFront └ P. 935「Lambda@Edge サヌビスリンクロヌルでサポヌトされおいる AWS リヌゞョン 」にリヌゞョン䞀芧の蚘茉がありたす。 以䞊のこずから、すべおのAWSリヌゞョンでリヌゞョン別゚ッゞキャッシュが提䟛されおいるわけではないこずが分かりたした。䟋えば、倧阪リヌゞョンでは提䟛されおいないこずが分かりやすいかず思いたす。 結論 以䞊のこずから、予めロググルヌプを䜜成し、ロググルヌプに察しお有効期限を蚭定したい堎合は、䞊述したした13個のリヌゞョンに察しお、所定の呜名芏則や蚭定に沿ったロググルヌプを䜜成すれば良い、ずいうこずになりたす。 Lambda@Edgeにおけるロググルヌプ名の芏則に぀いおは、以䞋をご参照ください。 エッジ関数のログ - Amazon CloudFront Amazon CloudWatch Logs を䜿甚しお、Lambda@Edge 関数ず CloudFront Functions の䞡方の゚ッゞ関数のログを取埗しおください。 docs.aws.amazon.com なお、今埌リヌゞョン別゚ッゞキャッシュが拡倧するこずも考えられたすので、先んじお他リヌゞョン倧阪リヌゞョンなどでロググルヌプを䜜成しおおく、ずいうのも䞀手かず思われたす。 ロググルヌプの䜜成自䜓にはAWSの利甚料金は発生したせん。 䞀方、日本囜内にアクセスを限定しおおり、海倖からのアクセスは遮断しおいる堎合などに぀いおは、曎に事前に䜜成するリヌゞョンを絞っおよい東京リヌゞョンのみ、など かず思いたす。   終わりに 今回は、CloudFrontにLambda@Edgeを組み合わせお䜿甚する堎合においお、どのリヌゞョンにロググルヌプが必芁なのか≒ Lambda@Edgeの実行に関連するAWSリヌゞョンがどこなのか調査しご玹介したした。 公匏ドキュメントなどでも蚀及がほずんどされおおらず情報収集に苊戊したしたが、参考になる方がいらっしゃいたしたら幞いです。 䜙談ですが、「レンゞでチン」ずいう蚀葉は死語になっおしたう日もくるのでしょうか。 テレビにおける「チャンネル回す」も死語になり぀぀あるようです  最近の電子レンゞは、「ピヌ」ずいう音がなったり、おしゃれな音楜が流れるようです。「レンゞでピヌ」 
こんにちは、SCSK小柀です。 生成AIを利甚しお自然蚀語によるデヌタ怜玢や芁玄を可胜にしおくれる、Snowflake Intelligenceが䞀般提䟛(GA)になりたした。 前回のブログでは、Snowflake Intelligenceの抂芁玹介や、䌎走支揎のご案内しおいたした。 → SCSKはSnowflake Intelligenceのロヌンチパヌトナヌずなりたした Snowflake Intelligenceで始める生成AI掻甚 ― SCSKが䌎走したす Snowflakeが最近GAしたSnowflake Intelligenceに぀いおの蚘事です。利甚する為の過皋・SCSKならではの支揎に぀いお案内したす blog.usize-tech.com 2025.12.08 SCSKでは、瀟内のデヌタ掻甚基盀ずしおもSnowflakeを採甚しおおり、Snowflake Intelligenceの利甚に぀いおも取り組んでいたす。 今回はSnowflake Intelligenceの掻甚PoCを始める流れに぀いおご玹介いたしたす SCSKの瀟内デヌタ掻甚 デヌタ掻甚のアヌキテクチャ SCSKでは、以䞋のようなメダリオンアヌキテクチャをSnowflake䞊に構築しおデヌタを管理しおいたす。 ブロンズ局 ファむルやシステムのデヌタベヌスなど、デヌタ゜ヌスのデヌタをそのたた保持する シルバヌ局 分析しやすいように敎圢した、汎甚的に利甚可胜なテヌブルがある局 ゎヌルド局 BIで可芖化するために、ダッシュボヌドごずに䜜成するテヌブルがある局 ゎヌルド局に䜜成したテヌブルをBIツヌルPower BIでむンポヌトしお、ダッシュボヌドを䜜成しおいたす。 定型ダッシュボヌド䜜成によるデヌタ掻甚の課題 定型ダッシュボヌド䜜成に基づくデヌタ掻甚には以䞋のような課題がありたす。 ダッシュボヌド公開たでのリヌドタむムが長い ニヌズの把握からダッシュボヌドの公開たで、レむアりト怜蚎・デヌタモデリング・ストアドプロシヌゞャ䜜成・BIツヌルでの実装など、ダッシュボヌド開発には必芁な工皋が倚くありたす。簡単な集蚈倀の可芖化であっおも、実際に芋たいデヌタが芋れるようになるたでには、リヌドタむムが発生したす。 限定的な分析軞での分析しかできない ダッシュボヌドでは、組織別や幎床別など、あらかじめ決められた分析軞での集蚈倀しか確認するこずができたせん。たずえば、売䞊が䌞びた芁因を分析したくおも、ダッシュボヌドで衚瀺されおいる以䞊の情報を埗るこずはできず、発生事象の理由を分析するこずが難しいです。 そもそもダッシュボヌドで情報を探すこずが面倒 私たちはプラむベヌトでも業務でも、なにかを知りたいずきにはたず生成AIに問い合わせるようなりたした。チャットベヌスでの怜玢に慣れすぎおしたいたした。ダッシュボヌドを量産しおも、ナヌザは自分が欲しい情報があるダッシュボヌドがすぐに芋぀けられないずストレスを感じ、デヌタ掻甚のモチベヌションが䞋がっおしたいたす。 このように、定圢ダッシュボヌド䜜成によるデヌタの可芖化だけでは課題がありたす。 「必芁な情報にすぐにアクセスできるこず」「倚角的な分析が容易にできるこず」が、今埌のデヌタ掻甚に求められおいたす。   Snowflake Intelligenceの導入 Snowflake Intelligenceは、そんな課題を解決しおくれるサヌビスです。 SCSKの瀟内デヌタ掻甚においおもダッシュボヌドの䜜成ず䞊行しお、Snowflake Intelligenceの掻甚怜蚎を行いPoCを開始したした。 Snowflake Intelligenceは、以䞋のような党䜓像になりたす。 䞀番䞋のDataから蟿っお、Snowflake Intelligenceに衚瀺するたでの流れをご玹介したす Data分析察象ずするデヌタの遞定 メダリオンアヌキテクチャにおけるシルバヌ局は、汎甚的に利甚できるテヌブルを保持する局でした。 ダッシュボヌド開発では、このシルバヌ局のテヌブルをもずにダッシュボヌド甚のテヌブルをゎヌルド局に䜜成したすが、圓プロゞェクトではSnowflake Intelligenceからこのシルバヌ局のテヌブルにそのたたアクセスできるようしたした。 これにより、ナヌザヌが自由に問い合わせおも幅広い分析軞での返答を埗るこずができたす。 ディメンショナルモデリングに基づき、すでに玄100以䞊のファクト/ディメンションのテヌブルを甚意しおいたしたが、PoCずしおはそのうちの、PLデヌタ・匕合デヌタ・予算デヌタなど䞻芁なテヌブルを察象に絞るこずずしたした。 デヌタ準備Semantic Viewの䜜成 先ほど遞定したテヌブルを察象に、Semantic Viewを䜜成したす。 Semantic Viewの䜜成はファクトテヌブルだけでなく、関連するマスタテヌブルの䜜成も必芁になりたす。 そのため、今回PoCずしお遞定したファクトテヌブルは5テヌブル皋でしたが、それぞれのファクトテヌブルに関連するマスタテヌブルも含めるず、玄15テヌブルのSemantic Viewの䜜成が必芁になりたす。 それぞれのテヌブルのカラムには数十のカラムがあり、Semantic Viewの䜜成を愚盎に行っおいるず、PoCがなかなか始められたせん。 そこで、Snowflake 菅野様が公開されおいる Snowflake のセマンティックビュヌを AI で自動生成しよう のストアドプロシヌゞャで、Semantic Viewを自動䜜成するこずずしたした。 将来的には、公匏機胜ずしおSemantic Viewの自動䜜成機胜もリリヌスされるようです。 2026/1珟圚は未リリヌスのようですが、最新のリリヌス状況をご確認ください。 各テヌブルのSemantic Viewを䜜成した埌、それぞれのSemantic View間ファクトテヌブル – マスタテヌブル間のリレヌションの蚭定が必芁になりたす。 リレヌションの蚭定には、同じSemantic Viewの定矩内にリレヌションの蚭定先のマスタテヌブルの定矩も含めおおく必芁がありたす。耇数のファクトテヌブルPL、匕合から同䞀のマスタテヌブル組織マスタ、䌁業マスタを参照する堎合もありたすが、それぞれのファクトテヌブルの定矩ごずに、マスタテヌブルの定矩を含めおおく必芁がありたす。 そのため、以䞋のように䜜成されたマスタテヌブルのYAML定矩をコピヌしお、ファクトテヌブルのYAML定矩内にマヌゞさせおいく必芁がありたす。その埌、マスタテヌブルぞのリレヌション蚭定を行いたす。   オヌケストレヌションCortex Agentsの䜜成 䜜成したSemantic Viewを元に、Cortex Agentを䜜成したす。 Snowflake Intelligenceの回答粟床を䞊げるためには、関連のないデヌタのSemantic Viewを1぀のCortex Agentに詰め蟌むべきではありたせん。 そのため、今回はPL゚ヌゞェント、匕合゚ヌゞェントなど、Semantic ViewのそれぞれでCortex Agentを䜜成しおいたす。 ナヌザには、Snowflake Intelligenceの画面䞊から問い合わせたい内容に合った゚ヌゞェントを遞択しおもらいたす。 ただし、それぞれのCortex Agentに察しお1぀のSemantic Viewsを䜜成しおいるず、汎甚的に回答できるはずの゚ヌゞェントずしおの有甚性が薄れおしたう郚分もあるので、どのようにCortex Agentにたずめおいくかは考察の䜙地がありたす。 Cortex Agentsの蚭定では、「オヌケストレヌション手順」の蚭定も重芁になりたす。 たずえば、”幎床単䜍で売䞊を集蚈しお䞋さい”ず問い合わせた堎合、112月で集蚈されおしたうため、4翌3月で集蚈しおもらいたい堎合には以䞋のような「オヌケストレヌション手順」の蚭定を行いたす。 “幎床”単䜍での集蚈・可芖化の䟝頌が来た堎合には、4月から3月の12カ月を集蚈期間ずしお、分析をお願いいたしたす。䟋えば、2024幎床の売䞊分析をしおください。ずいう質問に察しおは2024幎4月から2025幎3月たでの集蚈期間で売䞊を分析するようにしおください。   Snowflake Intelligenceの利甚デモ Snowflake Intelligenceを実際に利甚しおみたす。 PLに関する問い合わせを行いたいため、゚ヌゞェントは「PL」を指定しおおきたす。 たずは、利益率の経幎掚移をみおみたす。 するず、2023/3に利益率が倧きく䞋がっおいるこずが確認できたした。 ここたでは定型ダッシュボヌドでも確認できたすが、ここから”なぜそうなっおいるのか”を深堀しお分析しおいくようなこずは、Snowflake Intelligenceでないずできたせん。 次に、2023/3に利益がワヌスト3の案件を取埗しおみたす。 特定の案件が抜出できたした。 このワヌスト1䜍の案件に぀いお、月別の利益の傟向を芋おみたす。 Snowflake Intelligenceで、グラフでの可芖化に加え、トレンドの分析やなぜそのようになったかの掚察たで行っおくれおいたす。 このSnowflake Intelligenceの分析結果を螏たえお、 AIによる考察を案件担圓者に事実確認 案件悪化パタヌンを分析 悪化の倉調をずらえるKPI蚭定し、ダッシュボヌドに远加 悪化案件が倚い組織の特城抜出 など、実際にビゞネスぞのアクションに぀なげおいくこずが考えられたす   粟床向䞊のためのポむント Snowflake Intelligenceを実際に業務で利甚しおいくには、回答速床や粟床を向䞊させおいく必芁がありたす。 回答速床 珟状は回答たでに30秒以䞊かかっおいたす。モニタリングから内蚳を確認しおみるず、「SQL実行」は5秒皋床ですが、それ以倖の「LLMの蚈画」「LLM応答生成」の時間が倚く占めおいたす。 このような堎合、りェアハりスの性胜を䞊げおも倧きな改善は芋られず、LLMの回答速床を向䞊させおいく必芁がありたす。LLMの回答速床を向䞊させるためには、想定される質問をあらかじめ「怜蚌枈みク゚リ」ずしお登録しおおくこずが重芁です。 回答粟床 AI機胜を䜿っお自動生成したSemantic Viewをそのたた䜿っおいるため、ただただ回答された数倀の粟床が出おいたせん。 回答の粟床を向䞊させるには、実行されたク゚リを確認しお正しいものは「怜蚌枈みク゚リ」ずしお登録したり、間違っおいる堎合は同矩語を芋盎すなど、地道な調敎が必芁になりたす。 Semantic View粟床向䞊のために、䞻に以䞋の蚭定を芋盎す必芁がありたす。   たずめ Snowflake Intelligenceを実際に利甚するたでの手順に぀いおご玹介したした。 瀟内のデヌタ掻甚における珟状ずしおはただただ回答の粟床が埗られず、Semantic Viewの蚭定芋盎しなどを行っおいたす。 回答粟床を向䞊させるための具䜓的な手順に぀いおも怜蚌ができたら、たた共有させおいただきたいず思いたす
AWSを利甚するうえで䞀時的に別のIAMロヌルの暩限に切り替えお䜜業するためにスむッチロヌルをするこずがあるかず思いたす。そんな䞭で最近 AWS CLI を利甚しおのスむッチロヌルをする機䌚があったのですが、やり方がわからず手間取ったので備忘ずしお玹介できればず思いたす。ここでは2぀方法を玹介したすので、ぜひ参考にしおみおください。   方法1 -configファむルの修正- 䞀぀目の方法はconfigファむルを修正する方法です。 以䞋パスにあるファむルをメモ垳等で開きたす。 "C:\Users\<ナヌザ名>\.aws\config" 以䞋を远蚘し保存したす。 [profile <任意のプロファむル名>] #スむッチロヌル先のARN role_arn = arn:aws:iam::<スむッチロヌル先のアカりントID>:role/<ロヌル名> source_profile = default #リヌゞョン ex:ap-northeast-1 region = <リヌゞョン名> #MFA識別子。MFA認蚌がある堎合 mfa_serial = arn:aws:iam::<アカりントID>:mfa/ナヌザ名 あずはコマンド実行時に「––profile <任意のプロファむル名>」を぀けるだけでスむッチ先のロヌルで実行できるようになりたす。 aws sts get-caller-identity --profile <任意のプロファむル名> この方法はconfigファむルを修正し、コマンドごずに「–profile <任意のプロファむル名>」を぀けるだけなので簡単です。   方法2 -䞀時的なアクセスキヌの取埗- 2぀目の方法は䞀時的なアクセスキヌを取埗し蚭定する方法です。 以䞋コマンドでスむッチロヌル先の情報を取埗したす。 aws sts assume-role –-role-arn <スむッチロヌル先のarn> --role-session-name <任意のセッション名> このコマンドを実行するず䞀時的なアクセスキヌ、シヌクレットアクセスキヌ、セッショントヌクンが衚瀺されるので、以䞋コマンドを甚いおそれぞれ蚭定したす #取埗したアクセスキヌ入力 set AWS_ACCESS_KEY_ID= <アクセスキヌ> #取埗したシヌクレットアクセスキヌ入力 set AWS_SECRET_ACCESS_KEY= <シヌクレットアクセスキヌ> #取埗したセッショントヌクン入力 set AWS_SESSION_TOKEN= <セッショントヌクン> 以䞋コマンドでスむッチロヌルしたこずを確認したす。 aws sts get-caller-identity これでスむッチロヌル完了です。方法1よりかは手間かもしれたせんが毎回「–profile ~」を぀けおコマンド実行するのが面倒ずいう人には良いかもしれたせん。   おわりに 今回はAWS CLIでのスむッチロヌルに぀いお玹介したした。ぜひ参考にしおください。
1. はじめに こんにちは。SCSK志村です。 Azure Monitor AgentでVMのカスタムログを収集する際、以䞋のようにフォルダでワむルドカヌド指定をしたいこずがあるず思いたす。 C:\bat\log**.log 埓来、Azure Monitor Agentではフォルダに察するワむルドカヌド指定はできない認識でしたが、公匏サむトを確認したずころ 「ファむルの䞀぀䞊の階局のフォルダレベルではワむルドカヌド指定が可胜」 ず蚘茉されおいたした。 Azure Monitor を䜿甚しお仮想マシンからテキスト ファむルを収集する - Azure Monitor Azure Monitor ゚ヌゞェントを䜿甚しお仮想マシン䞊のテキスト ファむルからログ デヌタを収集するようにデヌタ収集ルヌルを構成したす。 learn.microsoft.com 蚭定 説明 ファむル パタヌン ロヌカルディスク䞊のログファむルの堎所ず名前を指定したす。新しい名前で毎日ファむルが䜜成される堎合など、異なるファむル名にはワむルドカヌドを䜿甚したす。耇数のファむルパタヌンをカンマで区切っお入力できたす。ファむル名にはワむルドカヌドを䜿甚でき、ファむル名の䞀぀䞊のレベルのフォルダヌ名のみワむルドカヌド指定が可胜です。 䟋 – C:\Logs\MyLog.txt – C:\Logs\MyLog*.txt – C:\Logs\IIS*\*.logs – C:\App01\AppLog.txt, C:\App02\AppLog.txt – /var/mylog.log – /var/mylog*.log – /var/logs/*/* 珟時点でのドキュメントの曎新日は2025幎4月30日ずなっおいたす。 公匏サむトの該圓ペヌゞの前バヌゞョンも確認したしたが、フォルダのワむルドカヌド指定の蚘述はありたせんでした。 ※ファむルのワむルドカヌド指定は以前から可胜でした 前バヌゞョンの曎新日は2024幎11月14日ですので、このタむミング以降に機胜が远加されたず考えられたす。 2025幎12月に公開情報ぞ远蚘されたずの情報もありたした。ドキュメント曎新日の蚘茉ずは䞀臎したせんが、盎近の曎新のようです。 <2024幎11月14日バヌゞョンの蚘茉> 公匏サむトに蚘茉されおいる通り、実際に怜蚌を行いたした。 2. フォルダのワむルドカヌド指定の怜蚌 デヌタ゜ヌスの指定で、「.txt」ずいうカスタムテキストファむルず、その䞀぀䞊の階局のフォルダを「*」で指定したす。 たた、察応する Azure Log Analytics Workspaces にテヌブル「log_test_01_CL」を䜜成しおおきたす。 サヌバ䞊で䞋蚘ファむルを曎新したした。 C:\logtest\test01\test01.txt Log Analytics を確認したずころ、察象ファむルが取埗できおいるこずを確認できたした。 簡単な確認ではありたすが、フォルダのワむルドカヌド指定が可胜であるこずを確認できたした。 3. たずめ Azure Monitor Agent のカスタムテキストファむル収集にお、フォルダのワむルドカヌド指定が可胜になりたした。 耇数フォルダにたたがるテキストファむルを収集する蚭定が簡単になり、ずおも䟿利なアップデヌトですね。 なお、ワむルドカヌドの䜿甚はファむル名の䞀぀䞊のレベルのフォルダ名のみで可胜であるこずにご泚意ください。 この蚘事が、Azure におけるカスタムログファむル収集の蚭蚈のご参考になれば幞いです。
こんにちは、広野です。 コンテナがらみのリ゜ヌスは CI/CD 環境がないずデプロむするたでがコマンドだらけになっお嫌気がさすので、い぀も最初に CI/CD 環境を぀くるこずから始めおいたす。Amazon Bedrock AgentCore Runtime は Amazon S3 に配眮した゜ヌスコヌドからの簡単なデプロむもできるのですが、今埌のスケヌルも考えおコンテナで最初から䜜ろうず思いたした。   アヌキテクチャ 以䞋のアヌキテクチャで䜜っおいたす。 以前䜜成したコンテナ Lambda の CI/CD 環境 ず 9 割以䞊同じです。これを曞いおお思いたしたが AgentCore Runtime はコンテナ Lambda を䜜ったこずがある人なら銎染み易いですね。   どのように動くか 開発環境 (IDE) で、以䞋のように必芁なコヌド矀を配眮しお AWS CodeCommit リポゞトリに push したす。 コヌドが CodeCommit にアップロヌドされるず、以䞋のように AWS CodePipeline が動き出したす。画像は正垞完了埌のものです。 デプロむが完了するず、マネゞメントコン゜ヌル内で Amazon Bedrock AgentCore Runtime が出来䞊がったこずが確認できたす。 「テスト゚ンドポむント」を抌しお動䜜を確認しおみたす。 今回は、 AWS Knowledge MCP Server に問い合わせおくれる単玔な゚ヌゞェントを䜜りたしたので、AWS に関する質問を投げおみたす。※埌ほど゚ヌゞェントのコヌドは貌り付けたす。 回答が長かったので画像は途䞭で切れおしたっおいたすが、しっかりず説明しおくれたした。   ゚ヌゞェントのコヌド IDE 内で䜜成した゚ヌゞェント甚のコヌドです。これ自䜓は党然倧したものではないです。動いたサンプル皋床に思っお䞋さい。 app.py (゚ヌゞェントロゞック) シンプルに、MCP サヌバヌに聞きに行くだけの゚ヌゞェントです。LLM は Amazon Nova 2 Lite を䜿っおいたす。 import os from strands import Agent from strands.tools.mcp import MCPClient from mcp.client.streamable_http import streamablehttp_client from bedrock_agentcore import BedrockAgentCoreApp os.environ["AWS_DEFAULT_REGION"] = "ap-northeast-1" app = BedrockAgentCoreApp() mcp = MCPClient( lambda: streamablehttp_client( "https://knowledge-mcp.global.api.aws" ) ) @app.entrypoint def invoke(payload): user_message = payload.get("prompt", "プロンプトの取埗に倱敗したのでその旚ナヌザヌに䌝えおください。") try: with mcp: agent = Agent( model="global.amazon.nova-2-lite-v1:0", system_prompt="""あなたは AWS の技術仕様に粟通したシニア゜リュヌションアヌキテクトです。 ナヌザヌの質問に察しお、提䟛されたツヌルを䜿甚しお AWS 公匏ドキュメントから正確な情報を取埗し、 䞁寧か぀専門的に回答しおください。情報が芋぀からない堎合は、掚枬で答えず正盎に䌝えおください。""", tools=mcp.list_tools_sync() ) result = agent(user_message) return {"result": result.message} except Exception as e: app.logger.error(f"゚ヌゞェント゚ラヌ: {e}") return {"error": "゚ヌゞェントの凊理䞭に゚ラヌが発生したした"} if __name__ == "__main__": app.run() requirements.txt これもシンプルに、むンストヌルが必芁な Python モゞュヌルを䞊べただけです。 strands-agents bedrock-agentcore mcp Dockerfile AWS CodeBuild でビルドするずきに䜿甚したす。 FROM --platform=linux/arm64 public.ecr.aws/docker/library/python:3.14-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY app.py . EXPOSE 8080 ENTRYPOINT ["python", "app.py"] 䜿甚するコンテナむメヌゞは Python 3.14 のスリムなものにしたした。Amazon S3 からデプロむするずきは執筆時点では Python 3.13 が最新のバヌゞョンずしお遞べるようでしたが、コンテナむメヌゞだずビルド環境の制玄に䟝存しそうです。 requirements.txt を元にモゞュヌルをむンストヌルし、app.py を配眮したす。 buildspec.yml AWS CodeBuild でビルドするずきに䜿甚したす。 Amazon Bedrock AgentCore Runtime は ARM64 アヌキテクチャで動䜜するので、コンテナむメヌゞをビルドするコマンドに明瀺的に ARM64 を䜿甚するオプションを付けたす。$マヌクの環境倉数が蚘茉されおいたすが、これは CodeBuild から枡されたす。 version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com build: commands: - echo Building the Docker image... - docker build --platform linux/arm64 -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Pushing the Docker image... - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG artifacts: files: - cfn_agentcore_runtime.yml cfn_agentcore_runtime.yml デプロむフェヌズで䜿甚したす。 ビルドフェヌズでは、ここたでのファむルを䜿甚しおコンテナむメヌゞを䜜成し、Amazon ECR リポゞトリに保存するたでを担圓したした。 デプロむフェヌズでは、䜜成されたコンテナむメヌゞから Amazon Bedrock AgentCore Runtime をデプロむしたす。このずき、アタッチする IAM ロヌルも䜜成したす。今埌別の機胜を䜿甚するこずを想定しお、広めに暩限を付けおいたす。 Parameters で定矩されおいるパラメヌタは、AWS CodePipeline から環境倉数を枡されオヌバヌラむドされたす。倀は䜕でもいいのですがパラメヌタの定矩をしおおかないず、゚ラヌになりたす。 AWSTemplateFormatVersion: 2010-09-09 Description: The CloudFormation template that creates a Bedrock AgentCore runtime and a relevant IAM role. # ------------------------------------------------------------# # Input Parameters # ------------------------------------------------------------# Parameters: SystemName: Type: String Description: System name. use lower case only. (e.g. example) Default: example MaxLength: 10 MinLength: 1 SubName: Type: String Description: System sub name. use lower case only. (e.g. prod or dev) Default: dev MaxLength: 10 MinLength: 1 ImageTag: Type: String Default: xxxxxxxxxxxxxxxxxxxx MaxLength: 100 MinLength: 1 ImgRepoName: Type: String Default: xxxxxxxxxxxxxxxxxxxx MaxLength: 100 MinLength: 1 Resources: # ------------------------------------------------------------# # Bedrock AgentCore Runtime # ------------------------------------------------------------# AgentCoreRuntime: Type: AWS::BedrockAgentCore::Runtime Properties: AgentRuntimeName: !Sub ${SystemName}_${SubName}_agent Description: !Sub AI Agent for ${SystemName}-${SubName} AgentRuntimeArtifact: ContainerConfiguration: ContainerUri: !Sub ${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/${ImgRepoName}:${ImageTag} NetworkConfiguration: NetworkMode: PUBLIC ProtocolConfiguration: HTTP RequestHeaderConfiguration: RequestHeaderAllowlist: - Authorization RoleArn: !GetAtt AgentCoreRuntimeRole.Arn Tags: Cost: !Sub ${SystemName}-${SubName} DependsOn: - AgentCoreRuntimeRole # ------------------------------------------------------------# # Bedrock AgentCore Runtime Role (IAM) # ------------------------------------------------------------# AgentCoreRuntimeRole: Type: AWS::IAM::Role Properties: RoleName: !Sub AgentCoreRuntimeRole-${SystemName}-${SubName} Description: This role allows Bedrock AgentCore Runtime to invoke models and push logs. AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - bedrock-agentcore.amazonaws.com Action: - sts:AssumeRole Condition: StringEquals: "aws:SourceAccount": !Ref AWS::AccountId ArnLike: "aws:SourceArn": !Sub "arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:*" Path: / ManagedPolicyArns: - arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess Policies: - PolicyName: !Sub AgentCoreRuntimePolicy-${SystemName}-${SubName} PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - logs:DescribeLogStreams - logs:CreateLogGroup Resource: - !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/bedrock-agentcore/runtimes/* - Effect: Allow Action: - logs:DescribeLogGroups Resource: - !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:* - Effect: Allow Action: - logs:CreateLogStream - logs:PutLogEvents Resource: - !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/bedrock-agentcore/runtimes/*:log-stream:* - Effect: Allow Action: cloudwatch:PutMetricData Resource: "*" Condition: StringEquals: cloudwatch:namespace: bedrock-agentcore - Effect: Allow Action: - logs:CreateLogGroup - logs:PutDeliverySource - logs:PutDeliveryDestination - logs:CreateDelivery - logs:GetDeliverySource - logs:DeleteDeliverySource - logs:DeleteDeliveryDestination Resource: "*" - Sid: BedrockModelInvocation Effect: Allow Action: - bedrock:InvokeModel - bedrock:InvokeModelWithResponseStream - bedrock:ApplyGuardrail Resource: - arn:aws:bedrock:*::foundation-model/* - arn:aws:bedrock:*:*:inference-profile/* - !Sub arn:aws:bedrock:${AWS::Region}:${AWS::AccountId}:* - Effect: Allow Action: - ecr:BatchGetImage - ecr:GetDownloadUrlForLayer Resource: - !Sub arn:aws:ecr:${AWS::Region}:${AWS::AccountId}:repository/${ImgRepoName} - Effect: Allow Action: - ecr:GetAuthorizationToken Resource: "*" - Effect: Allow Action: - bedrock-agentcore:GetWorkloadAccessToken - bedrock-agentcore:GetWorkloadAccessTokenForJWT - bedrock-agentcore:GetWorkloadAccessTokenForUserId Resource: - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:workload-identity-directory/default - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:workload-identity-directory/default/workload-identity/${SystemName}_${SubName}_agent-* - Effect: Allow Action: - bedrock-agentcore:GetResourceApiKey Resource: - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:token-vault/default - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:token-vault/default/apikeycredentialprovider/* - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:workload-identity-directory/default - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:workload-identity-directory/default/workload-identity/* - Effect: Allow Action: - secretsmanager:GetSecretValue Resource: - !Sub arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:bedrock-agentcore-identity!default/oauth2/* - !Sub arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:bedrock-agentcore-identity!default/apikey/* - Effect: Allow Action: - bedrock-agentcore:GetResourceOauth2Token Resource: - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:token-vault/default - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:token-vault/default/oauth2credentialprovider/* - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:workload-identity-directory/default - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:workload-identity-directory/default/workload-identity/${SystemName}_${SubName}_agent-* - Effect: Allow Action: - aws-marketplace:ViewSubscriptions - aws-marketplace:Subscribe Resource: "*" Condition: StringEquals: aws:CalledViaLast: bedrock.amazonaws.com - Effect: Allow Action: - bedrock-agentcore:StartCodeInterpreterSession - bedrock-agentcore:InvokeCodeInterpreter - bedrock-agentcore:StopCodeInterpreterSession - bedrock-agentcore:GetCodeInterpreter - bedrock-agentcore:GetCodeInterpreterSession - bedrock-agentcore:ListCodeInterpreterSessions Resource: - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:aws:code-interpreter/aws.codeinterpreter.v1 - Effect: Allow Action: - bedrock-agentcore:CreateWorkloadIdentity - bedrock-agentcore:GetWorkloadAccessTokenForUserId Resource: - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:workload-identity-directory/default - !Sub arn:aws:bedrock-agentcore:${AWS::Region}:${AWS::AccountId}:workload-identity-directory/default/workload-identity/* - Effect: Allow Action: sts:GetWebIdentityToken Resource: "*" # ------------------------------------------------------------# # Output Parameters # ------------------------------------------------------------# Outputs: # AgentCore AgentRuntimeArn: Value: !GetAtt AgentCoreRuntime.AgentRuntimeArn AgentRuntimeId: Value: !GetAtt AgentCoreRuntime.AgentRuntimeId AgentRuntimeVersion: Value: !GetAtt AgentCoreRuntime.AgentRuntimeVersion   CI/CD 環境の AWS CloudFormation テンプレヌト 最埌になりたしたが、たずこれを流しお CI/CD 環境を構築したした。これがないず䜕も始たらないです。(私は) AgentCore Runtime 甚に気を付けたのは、ARM64 甚のビルド環境にするこずです。”aws/codebuild/amazonlinux-aarch64-standard:3.0″ ずいうむメヌゞを指定しおいたす。 AWSTemplateFormatVersion: 2010-09-09 Description: The CloudFormation template that creates a CI/CD environment for the AI agent. The created container image runs in Amazon Bedrock AgentCore. # ------------------------------------------------------------# # Input Parameters # ------------------------------------------------------------# Parameters: SystemName: Type: String Description: System name. use lower case only. (e.g. example) Default: example MaxLength: 10 MinLength: 1 AllowedPattern: "^[a-z0-9]+$" SubName: Type: String Description: System sub name. use lower case only. (e.g. prod or dev) Default: dev MaxLength: 10 MinLength: 1 AllowedPattern: "^[a-z0-9]+$" Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: "General Configuration" Parameters: - SystemName - SubName Resources: # ------------------------------------------------------------# # S3 # ------------------------------------------------------------# S3BucketArtifact: Type: AWS::S3::Bucket Properties: BucketName: !Sub ${SystemName}-${SubName}-aiagent-artifact LifecycleConfiguration: Rules: - Id: AutoDelete Status: Enabled ExpirationInDays: 14 PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true Tags: - Key: Cost Value: !Sub ${SystemName}-${SubName} S3BucketLogs: Type: AWS::S3::Bucket Properties: BucketName: !Sub ${SystemName}-${SubName}-aiagent-logs LifecycleConfiguration: Rules: - Id: AutoDelete Status: Enabled ExpirationInDays: 365 PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true Tags: - Key: Cost Value: !Sub ${SystemName}-${SubName} # ------------------------------------------------------------# # ECR # ------------------------------------------------------------# EcrRepositoryAiAgent: Type: AWS::ECR::Repository Properties: RepositoryName: !Sub ${SystemName}-${SubName}-aiagent EncryptionConfiguration: EncryptionType: AES256 ImageScanningConfiguration: ScanOnPush: true ImageTagMutability: IMMUTABLE LifecyclePolicy: LifecyclePolicyText: | { "rules": [ { "rulePriority": 1, "description": "Keep only 5 images, expire all others", "selection": { "tagStatus": "any", "countType": "imageCountMoreThan", "countNumber": 5 }, "action": { "type": "expire" } } ] } EmptyOnDelete: true Tags: - Key: Cost Value: !Sub ${SystemName}-${SubName} # ------------------------------------------------------------# # CodeCommit Repository # ------------------------------------------------------------# CodeCommitRepoAiAgent: Type: AWS::CodeCommit::Repository Properties: RepositoryName: !Sub ${SystemName}-${SubName}-aiagent RepositoryDescription: !Sub AI Agent for ${SystemName}-${SubName} Tags: - Key: Cost Value: !Sub ${SystemName}-${SubName} # ------------------------------------------------------------# # CodePipeline # ------------------------------------------------------------# CodePipelineAiAgent: Type: AWS::CodePipeline::Pipeline Properties: Name: !Sub ${SystemName}-${SubName}-aiagent PipelineType: V2 ArtifactStore: Location: !Ref S3BucketArtifact Type: S3 RestartExecutionOnUpdate: false RoleArn: !GetAtt CodePipelineServiceRoleAiAgent.Arn Stages: - Name: Source Actions: - Name: Source RunOrder: 1 ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: CodeCommit Configuration: RepositoryName: !GetAtt CodeCommitRepoAiAgent.Name BranchName: main PollForSourceChanges: false OutputArtifactFormat: CODEBUILD_CLONE_REF Namespace: SourceVariables OutputArtifacts: - Name: Source - Name: Build Actions: - Name: Build RunOrder: 1 Region: !Sub ${AWS::Region} ActionTypeId: Category: Build Owner: AWS Version: 1 Provider: CodeBuild Configuration: ProjectName: !Ref CodeBuildProjectAiAgent BatchEnabled: false EnvironmentVariables: | [ { "name": "IMAGE_TAG", "type": "PLAINTEXT", "value": "#{codepipeline.PipelineExecutionId}" } ] Namespace: BuildVariables InputArtifacts: - Name: Source OutputArtifacts: - Name: Build - Name: Deploy Actions: - ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: 1 Configuration: StackName: !Sub ${SystemName}-${SubName}-agentcore-runtime Capabilities: CAPABILITY_NAMED_IAM RoleArn: !GetAtt CodePipelineDeployCreateUpdateRoleAiAgent.Arn ActionMode: CREATE_UPDATE TemplatePath: Build::cfn_agentcore_runtime.yml ParameterOverrides: !Sub '{"SystemName":"${SystemName}","SubName":"${SubName}","ImageTag":"#{codepipeline.PipelineExecutionId}","ImgRepoName":"${EcrRepositoryAiAgent}"}' InputArtifacts: - Name: Build Name: CreateOrUpdate RoleArn: !GetAtt CodePipelineDeployCreateUpdateActionRoleAiAgent.Arn RunOrder: 1 Tags: - Key: Cost Value: !Sub ${SystemName}-${SubName} DependsOn: - CodePipelineServiceRoleAiAgent - CodeBuildProjectAiAgent - CodePipelineDeployCreateUpdateActionRoleAiAgent - EcrRepositoryAiAgent # ------------------------------------------------------------# # CodePipeline Service Role (IAM) # ------------------------------------------------------------# CodePipelineServiceRoleAiAgent: Type: AWS::IAM::Role Properties: RoleName: !Sub CpServiceRoleAiAgent-${SystemName}-${SubName} Description: This role allows CodePipeline to call each stages. AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - codepipeline.amazonaws.com Action: - sts:AssumeRole Path: / Policies: - PolicyName: !Sub CpServicePolicyAiAgent-${SystemName}-${SubName} PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - "codecommit:CancelUploadArchive" - "codecommit:GetBranch" - "codecommit:GetCommit" - "codecommit:GetRepository" - "codecommit:GetUploadArchiveStatus" - "codecommit:UploadArchive" Resource: !GetAtt CodeCommitRepoAiAgent.Arn - Effect: Allow Action: - "codebuild:BatchGetBuilds" - "codebuild:StartBuild" - "codebuild:BatchGetBuildBatches" - "codebuild:StartBuildBatch" Resource: "*" - Effect: Allow Action: - "cloudwatch:*" - "s3:*" Resource: "*" - Effect: Allow Action: - "lambda:InvokeFunction" - "lambda:ListFunctions" Resource: "*" - Effect: Allow Action: "sts:AssumeRole" Resource: - !GetAtt CodePipelineDeployCreateUpdateActionRoleAiAgent.Arn DependsOn: - CodeCommitRepoAiAgent - CodePipelineDeployCreateUpdateActionRoleAiAgent # ------------------------------------------------------------# # CodePipeline Deploy Create Update Role (IAM) # ------------------------------------------------------------# CodePipelineDeployCreateUpdateRoleAiAgent: Type: AWS::IAM::Role Properties: RoleName: !Sub CpCrUpdRoleAiAgent-${SystemName}-${SubName} AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: Service: cloudformation.amazonaws.com Version: "2012-10-17" Path: / Policies: - PolicyName: !Sub CpCrUpdPolicyAiAgent-${SystemName}-${SubName} PolicyDocument: Version: 2012-10-17 Statement: - Action: "*" Effect: Allow Resource: "*" # ------------------------------------------------------------# # CodePipeline Deploy Create Update Action Role (IAM) # ------------------------------------------------------------# CodePipelineDeployCreateUpdateActionRoleAiAgent: Type: AWS::IAM::Role Properties: RoleName: !Sub CpCrUpdActionRoleAiAgent-${SystemName}-${SubName} AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: AWS: Fn::Join: - "" - - "arn:" - Ref: AWS::Partition - ":iam::" - Ref: AWS::AccountId - :root Version: "2012-10-17" Path: / ManagedPolicyArns: - arn:aws:iam::aws:policy/AWSCloudFormationFullAccess Policies: - PolicyName: !Sub CpCrUpdPolicyAiAgent-${SystemName}-${SubName} PolicyDocument: Version: 2012-10-17 Statement: - Action: iam:PassRole Effect: Allow Resource: !GetAtt CodePipelineDeployCreateUpdateRoleAiAgent.Arn - Action: - s3:GetBucket* - s3:GetObject* - s3:List* Effect: Allow Resource: - !Sub arn:aws:s3:::${S3BucketArtifact} - !Sub arn:aws:s3:::${S3BucketArtifact}/* DependsOn: - CodePipelineDeployCreateUpdateRoleAiAgent - S3BucketArtifact # ------------------------------------------------------------# # EventBridge Rule for Starting CodePipeline # ------------------------------------------------------------# EventBridgeRuleStartCodePipelineAiAgent: Type: AWS::Events::Rule Properties: Name: !Sub ${SystemName}-${SubName}-aiagent-start-codepipeline Description: !Sub This rule starts pptx pdf converter CodePipeline for ${SystemName}-${SubName}. The trigger is the source code change in CodeCommit. EventBusName: !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:event-bus/default" EventPattern: source: - "aws.codecommit" detail-type: - "CodeCommit Repository State Change" resources: - !GetAtt CodeCommitRepoAiAgent.Arn detail: event: - referenceCreated - referenceUpdated referenceType: - branch referenceName: - main RoleArn: !GetAtt EventBridgeRuleStartCpRoleAiAgent.Arn State: ENABLED Targets: - Arn: !Sub "arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${CodePipelineAiAgent}" Id: !Sub ${SystemName}-${SubName}-aiagent-start-codepipeline RoleArn: !GetAtt EventBridgeRuleStartCpRoleAiAgent.Arn DependsOn: - EventBridgeRuleStartCpRoleAiAgent # ------------------------------------------------------------# # EventBridge Rule Start CodePipeline Role (IAM) # ------------------------------------------------------------# EventBridgeRuleStartCpRoleAiAgent: Type: AWS::IAM::Role Properties: RoleName: !Sub EventBridgeStartCpRoleAiAgent-${SystemName}-${SubName} Description: !Sub This role allows EventBridge to start pptx pdf converter CodePipeline for ${SystemName}-${SubName}. AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: - sts:AssumeRole Path: / Policies: - PolicyName: !Sub EventBridgeStartCpPolicyAiAgent-${SystemName}-${SubName} PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - "codepipeline:StartPipelineExecution" Resource: - !Sub "arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${CodePipelineAiAgent}" DependsOn: - CodePipelineAiAgent # ------------------------------------------------------------# # CodeBuild Project # ------------------------------------------------------------# CodeBuildProjectAiAgent: Type: AWS::CodeBuild::Project Properties: Name: !Sub ${SystemName}-${SubName}-aiagent Description: !Sub The build project for ${SystemName}-${SubName}-aiagent ResourceAccessRole: !GetAtt CodeBuildResourceAccessRoleAiAgent.Arn ServiceRole: !GetAtt CodeBuildServiceRoleAiAgent.Arn ConcurrentBuildLimit: 1 Visibility: PRIVATE Source: Type: CODEPIPELINE SourceVersion: refs/heads/main Environment: Type: ARM_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: "aws/codebuild/amazonlinux-aarch64-standard:3.0" ImagePullCredentialsType: CODEBUILD PrivilegedMode: true EnvironmentVariables: - Name: AWS_DEFAULT_REGION Type: PLAINTEXT Value: !Sub ${AWS::Region} - Name: AWS_ACCOUNT_ID Type: PLAINTEXT Value: !Sub ${AWS::AccountId} - Name: IMAGE_REPO_NAME Type: PLAINTEXT Value: !Ref EcrRepositoryAiAgent TimeoutInMinutes: 30 QueuedTimeoutInMinutes: 60 Artifacts: Type: CODEPIPELINE Cache: Type: NO_CACHE LogsConfig: CloudWatchLogs: GroupName: !Sub /aws/codebuild/${SystemName}-${SubName}-aiagent Status: ENABLED S3Logs: EncryptionDisabled: true Location: !Sub arn:aws:s3:::${S3BucketLogs}/codebuildBuildlog Status: ENABLED Tags: - Key: Cost Value: !Sub ${SystemName}-${SubName} DependsOn: - EcrRepositoryAiAgent - CodeBuildResourceAccessRoleAiAgent - CodeBuildServiceRoleAiAgent # ------------------------------------------------------------# # CodeBuild Resource Access Role (IAM) # ------------------------------------------------------------# CodeBuildResourceAccessRoleAiAgent: Type: AWS::IAM::Role Properties: RoleName: !Sub CbResourceAccessRoleAiAgent-${SystemName}-${SubName} Description: This role allows CodeBuild to access CloudWatch Logs and Amazon S3 artifacts for the project's builds. AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - codebuild.amazonaws.com Action: - sts:AssumeRole Path: / Policies: - PolicyName: !Sub CbResourceAccessPolicyAiAgent-${SystemName}-${SubName} PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - "logs:CreateLogGroup" - "logs:CreateLogStream" - "logs:PutLogEvents" Resource: - !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${SystemName}-${SubName}-aiagent" - !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${SystemName}-${SubName}-aiagent:*" - Effect: Allow Action: - "s3:PutObject" - "s3:GetObject" - "s3:GetObjectVersion" - "s3:GetBucketAcl" - "s3:GetBucketLocation" Resource: - !Sub arn:aws:s3:::${S3BucketLogs} - !Sub arn:aws:s3:::${S3BucketLogs}/* # ------------------------------------------------------------# # CodeBuild Service Role (IAM) # ------------------------------------------------------------# CodeBuildServiceRoleAiAgent: Type: AWS::IAM::Role Properties: RoleName: !Sub CbServiceRoleAiAgent-${SystemName}-${SubName} Description: This role allows CodeBuild to interact with dependant AWS services. AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - codebuild.amazonaws.com Action: - sts:AssumeRole Path: / ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPowerUser Policies: - PolicyName: !Sub CbServicePolicyAiAgent-${SystemName}-${SubName} PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - "codecommit:GitPull" Resource: !GetAtt CodeCommitRepoAiAgent.Arn - Effect: Allow Action: - "ssm:GetParameters" Resource: - !Sub "arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${SystemName}_${SubName}_*" - Effect: Allow Action: - "s3:*" Resource: - !Sub arn:aws:s3:::${S3BucketArtifact} - !Sub arn:aws:s3:::${S3BucketArtifact}/* - !Sub arn:aws:s3:::${S3BucketLogs} - !Sub arn:aws:s3:::${S3BucketLogs}/* - Effect: Allow Action: - "logs:CreateLogGroup" - "logs:CreateLogStream" - "logs:PutLogEvents" Resource: - !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${SystemName}-${SubName}-aiagent" - !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${SystemName}-${SubName}-aiagent:*" - Effect: Allow Action: - "codebuild:CreateReportGroup" - "codebuild:CreateReport" - "codebuild:UpdateReport" - "codebuild:BatchPutTestCases" - "codebuild:BatchPutCodeCoverages" Resource: - !Sub "arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:report-group/${SystemName}-${SubName}-aiagent*" DependsOn: - CodeCommitRepoAiAgent - S3BucketArtifact - S3BucketLogs   たずめ いかがでしたでしょうか ずりあえず Amazon Bedrock AgentCore Runtime がデプロむされるずころたで䜜りたした。この埌は React アプリ画面で゚ヌゞェントずストリヌムレスポンスの䌚話ができるずころたできちんず䜜り蟌もうず思いたす。 本蚘事が皆様のお圹に立おれば幞いです。
こんにちは SCSKの庄叞です。 今回は、ServiceNowにおける䟿利な小ワザをいく぀か玹介しおいきたす。 本蚘事は執筆時点2026幎1月の情報になりたす。最新の内容は補品ドキュメントを参考にしおください。   小ワザ5遞 1.「遞択ボックスをルックアップ」カタログ倉数で遞択肢に耇数のフィヌルドの倀を衚瀺させる 「遞択ボックスをルックアップ」タむプのカタログ倉数では、遞択肢の倀に耇数のフィヌルドの倀を䜿甚できたす。 むンシデントテヌブルを参照した倉数で、番号ず簡単な説明を遞択肢に衚瀺させおみたす。 やり方は単玔、ルックアップラベルフィヌルドでカンマ区切りでフィヌルド名を蚘入するだけです。 同姓同名のナヌザヌが存圚する際などに、他のフィヌルドの倀で差別化しお正しい遞択肢を遞ばせるこずが出来たす。   2.「参照」カタログ倉数で耇数のフィヌルドの倀を衚瀺させる・怜玢する 同様に、「参照」タむプのカタログ倉数で、倉数の属性に以䞋のような倀を入力するず、遞択肢に耇数のフィヌルドの倀を衚瀺できたす。 ref_ac_columns=email;employee_number たた、カンマで区切った埌に以䞋も曞き加えおみるず、衚瀺に䜿ったフィヌルドの倀で怜玢するこずもできるようになりたす。 ref_ac_columns_search=true こちらも同姓同名のナヌザヌがいるずき等に圹立ちたす。 ちなみに、「遞択ボックスをルックアップ」ずの差別化芁因ずしおは、内郚の倀にありたす。 「遞択ボックスをルックアップ」では「ルックアップ倀フィヌルド」ずいう項目で遞択した倀が内郚で持たれたす。 䟋えばむンシデントテヌブルの「番号」フィヌルドを「ルックアップ倀フィヌルド」に遞択するず、遞択されたレコヌドの「番号」フィヌルドの倀を内郚的に保持したす。 䞀方で、参照の時は遞択されたレコヌドのsysIDが内郚の倀です。 スクリプトで利甚する際などに違うので、倀をどう利甚したいかで䜿い分けるずよいず思いたす。   3.リストの「フィルタ」を右クリックしおク゚リをコピヌ リスト画面でフィルタを実行した埌、パンくずリスト䞊の任意の条件を右クリックするず䞋蚘の遞択肢が衚瀺されたす。 この䞭尟の[ク゚リのコピヌ]を抌䞋するず、指定した条件でのク゚リをクリップボヌドにコピヌするこずが出来たす。 user_nameLIKEte^email!=NULL コピヌしたク゚リはこのたたスクリプトなどで利甚するこずが出来たす。   4.リストの「フィルタ」で䞭間にある特定の条件だけを削陀 リスト画面でフィルタを実行した埌、パンくずリスト䞊の条件から倖したい任意の条件のすぐ巊にある「」にカヌ゜ルを合わせるず、[次の条件を削陀]ずいう衚蚘が出おきたす。 このたた「」を抌䞋するず、盎埌の条件のみが削陀できたす。 いちいちフィルタヌをすべお開かずに削陀できるので若干の時短になりたす。 5.テヌブル名.~~ 巊䞊のナビゲヌションメニュヌに以䞋を入力しお゚ンタヌを抌䞋するず、それぞれ䟿利機胜が䜿えたす。 テヌブル名.config : 該圓テヌブルのビゞネスルヌル、通知、アクセス制埡などをたずめた画面が開きたす。 テヌブル名.list : 該圓テヌブルをリスト衚瀺。 テヌブル名.form : 該圓テヌブルの新芏レコヌド䜜成画面。 テヌブル名.do : .formず同様の挙動。 なお、それぞれ倧文字にするず新芏タブでペヌゞが開きたす䟋テヌブル名.CONFIG 特にconfigはそのテヌブルに察しおどのような凊理が入っおいるかを䞀芧で確認できるので、䜿いどころによっおは非垞に䟿利かず思いたす。 config画面   たずめ 以䞊、Servicenowで䜿える小ワザでした。 どれも私が最近知ったものなので、意倖ず知らずにいる方も倚いのかなず思っお曞いおみたした。 是非知らないものがあれば参考にしおみおください。        
前回の蚘事 では AWS DRS の蚭定たでできたので、今回はリカバリフェむルオヌバヌを実斜したいず思いたす。 リカバリフェむルオヌバヌ リカバリ前準備 どのくらいリアルタむムで埩旧できるのか確認するために、毎秒時刻をテキストファむルに出力させたした。   リカバリ開始 「リカバリゞョブを開始」ヌ「リカバリを開始」を抌䞋したす。 ※リカバリずリカバリドリルの挙動に違いはありたせんが、リカバリゞョブの履歎にそのゞョブがドリルであったかリカバリであったかが蚘録されたす。蚓緎 (ドリル) 目的であったのか実際のリカバリを実斜したのかを区別するのに圹立ちたす。 埩旧ポむントを遞択したす。 今回は最新のデヌタを遞択したした。   リカバリゞョブが開始されるず「AWS Elastic Disaster Conversion Server」ずいうサヌバが起動したした。 Conversion Server は、AWS Elastic Disaster Recovery においお、フェむルオヌバヌ時にレプリケヌトされたデヌタを EC2 ずしお起動可胜な圢に倉換するための䞀時的なサヌバのようです。通垞時は起動しおおらず、フェむルオヌバヌ時のみ自動的に起動・停止されたす。 「AWS Elastic Disaster Conversion Server」の停止埌、リカバリむンスタンスが起動しおきたした。 ゞョブの実行履歎を確認するず20分ほどで埩旧できたようです。   埩旧したリカバリむンスタンスはDRSコン゜ヌルからも確認できたす。   リカバリむンスタンスの確認 埩旧したむンスタンスの状態を確認したす。 ホスト名ずプラむベヌトIPアドレスは埩旧前埌で倉わりたせんでした。 むンスタンスタむプは起動蚭定で「むンスタンスタむプの適切なサむゞング」を指定しおいるため、自動的に割り圓おられたした。 ←゜ヌスむンスタンス埩旧前         →リカバリむンスタンス埩旧埌 次に最埌に出力された時刻を確認したす。 リカバリゞョブを開始しおから2秒埌の時刻たで曞き蟌たれおいたす。 ほがほがリアルタむムで埩旧するこずができたした。 実際の障害時には障害発生より前のポむント指定するこずになりたすが、 達成したいRPOが存圚する堎合は、環境芁因により倉動するので事前怜蚌をおすすめしたす。   フェむルバック怜蚌 では、続いおフェむルバックを怜蚌しおみたいず思いたす。 今床はリカバリむンスタンスを起点に東京リヌゞョンに向けお、リバヌスレプリケヌションを実斜しおいきたす。   DR先リヌゞョン今回はバヌゞニアのDRSコン゜ヌルからリカバリむンスタンスを遞択し、「リバヌスレプリケヌションを開始」をクリックしたす。   バヌゞニアリヌゞョンのDRSコン゜ヌルを確認するず、東京リヌゞョンぞのレプリケヌションが開始されたした。   東京リヌゞョンのDRSコン゜ヌルを確認するず、新しく゜ヌスサヌバが登録されたした。 ここはフルコピヌずなるため、完了たで1時間半ほどかかりたした。 デヌタ量やネットワヌク垯域によるので、実際に本番のフェむルバック時は考慮が必芁です。   ゜ヌスサヌバの登録が完了したら、リカバリゞョブを実行すればサヌバ埩旧できたす。 これ以降の流れはフェむルオヌバヌの時ず同様のため、割愛したす。   たずめ  AWS Elastic Disaster RecoveryDRSの操䜜は、ほがすべおAWSマネゞメントコン゜ヌル䞊で完結しおおり、専門的な手䜜業を求められる堎面は倚くありたせん。蚭定項目も敎理されおおり、初芋でも理解しやすい構成ずなっおいる点が印象的でした。 フェむルオヌバヌ操䜜は数クリックで実行でき、あらかじめテストフェむルオヌバヌを実斜するこずで、本番障害を想定した事前怜蚌を容易に行えたす。実際の切替手順を事前に確認できるため、障害発生時にも萜ち着いお察応できる運甚䜓制を構築しやすいず感じたした。 たた、DR専甚のサヌバや倖郚補品を垞時甚意する必芁がなく、耇雑なスクリプトや自動化凊理を事前に組み蟌むこずなくDR環境を構築できる点も倧きな利点です。その結果、運甚担圓者に求められるスキルや習熟コストを抑えるこずができ、属人化しにくい運甚が実珟できたす。 これらの点から、AWS DRS は 「DR を導入したいが、運甚負荷や耇雑さはできるだけ抑えたい」 ずいうケヌスにおいお、非垞に有効な遞択肢であるず感じたした。
こんにちは、SCSKの霋藀です。 本蚘事では、AWSのパラメヌタシヌト䜜成を自動化するツヌルの バック゚ンド実装Python に぀いお解説したす。 はじめに 本アプリの党䜓像や芁件定矩に぀いおは、すでに以䞋の蚘事で玹介されおいたす。 アプリ抂芁線 – ツヌルの党䜓像ず目的 芁件定矩線 – 各AWSリ゜ヌスの取埗コマンドずシヌト分割ルヌル 「アプリ抂芁線」でも觊れられおいる通り、AWSの蚭蚈曞やパラメヌタシヌトを手䜜業でExcelにたずめる䜜業は、非垞に時間がかかりミスも起きやすい工皋です。 そこで私たちは、 AWS CLIの実行結果をExcelに自動倉換するツヌル を開発したした。 本蚘事では、このツヌルの心臓郚ずなる Pythonによるバック゚ンド実装 にフォヌカスしお、どうやっお「リ゜ヌスごずのバラバラなJSON構造」を「統䞀されたExcelフォヌマット」に萜ずし蟌んだのか、その技術的な裏偎をご玹介したす。   䜜ったものバック゚ンド AWSパラメヌタシヌト自動生成゚ンゞン AWS CLIでリ゜ヌス情報を取埗し、Excelファむルに加工・出力するPythonアプリケヌションです。 【凊理フロヌ】 AWS CLI実行 → JSON取埗 → 構造解析・敎圢 → Excel出力 Webフロント゚ンドからのリク゚ストリ゜ヌスID等を受け取り、以䞋の凊理を自動で行いたす。 リ゜ヌス別凊理 : mapping.yaml の蚭定に基づき、リ゜ヌスごずに最適なコマンドを発行 デヌタ敎圢 : ネストされたJSONデヌタをExcelで芋やすい圢匏に平坊化・展開 Excel生成 : 衚玙・改蚂履歎・各リ゜ヌスごずのシヌトを出力 ※なお、Web画面フロント゚ンドの実装に぀いおは、次回の蚘事で詳しく解説されたす。   システム構成 開発期間 だいたい 1ヶ月半 くらいかけお䜜りたした。 最初の2週間は基本的な機胜を䜜っお、残りの期間でリファクタリングや機胜远加をしおいった感じです。本業の合間に少しず぀進めおいたので、実際の䜜業時間ずしおは 3040時間 くらいだず思いたす。 開発環境 マシン : Ubuntu (WSL2) ゚ディタ : VS Code + AI 蚀語 : Python 3.12 パッケヌゞ管理 : uv VS CodeのAIコヌド補完には本圓に助けられたした。「こういう凊理を曞きたい」ず思ったずきに、コメントを曞くだけでコヌドを提案しおくれるので、Python初心者の私でもなんずか曞き進めるこずができたした。 党䜓の流れ main.py゚ントリヌポむント Step 1: AWS CLI実行 → Step 2: JSON収集 → Step 3: Excel生成 ディレクトリ構成 generate_parameter_sheet/ ├── config/ │ ├── mapping.yaml # ← ここで取埗するリ゜ヌスを定矩 │ └── request.json # ← 取埗察象のリ゜ヌスID ├── src/ │ ├── main.py # ゚ントリヌポむント │ ├── aws_executor.py # AWS CLI実行 │ ├── data_processor.py # デヌタ倉換 │ ├── excel_generator.py# Excel生成 │ └── excel_formatter.py# スタむル適甚 ├── input/ # AWS実行結果JSON └── output/ # 出力Excel 䜿甚技術 項目 技術 蚀語 Python 3.12 パッケヌゞ管理 uv Excel操䜜 openpyxl 蚭定ファむル YAML AWS操䜜 AWS CLI なぜこの構成にしたか Python : 孊習コストが䜎く、ラむブラリが豊富。ネットで調べるず情報がたくさん出おくる uv : 䟝存関係管理が簡単 uv sync 䞀発。pipより速くお気持ちいい openpyxl : PythonでExcelを扱う定番ラむブラリ。ドキュメントも充実しおいる YAML : 蚭定ファむルずしお読みやすい。JSONより人間に優しい 正盎、最初は「ずりあえず動けばいいや」くらいの気持ちで技術遞定したした。でも結果的に、この構成は初心者にも扱いやすくお正解だったず思いたす。   察応しおいるAWSリ゜ヌス 珟圚、以䞋のリ゜ヌスなどに察応しおいたす EC2 / VPC / ELBv2 / RDS / Route53 / S3 / ACM / CloudWatch など 各リ゜ヌスでどのようなAWS CLIコマンドを䜿甚しおいるか、シヌトを分割するかたずめるか、耇数コマンドを結合するかなどの詳现な芁件に぀いおは、以䞋の蚘事をご芧ください 芁件定矩線各AWSリ゜ヌスの取埗ルヌルずシヌト分割蚭蚈 出力䟋 consolidated_aws_resources.xlsx ├── 衚玙 ├── 改蚂履歎 ├── vpcs # VPC情報 ├── web-server-01 # EC2Tags.Nameから ├── batch-server # EC2Tags.Nameから ├── prod-alb # ELBロヌドバランサヌ名から ├── example.com # Route53ドメむン名から ├── prod-database # RDSDBむンスタンス名から └── ...   工倫した点 汎甚化ぞの挑戊 このツヌルを䜜る䞊で䞀番倧倉だったのが、 リ゜ヌスごずに芁件がバラバラ だったこずです。 【リ゜ヌスごずの違い】 EC2 : 耇数むンスタンス → 各むンスタンスごずにシヌト分割 VPC : 耇数VPC → 1぀のシヌトにたずめお出力 ELB : ALB + タヌゲットグルヌプ + 属性 → 結合しお1シヌト RDS : DB + サブネット + パラメヌタ → 結合しお1シヌト Route53 : ホストゟヌン + レコヌド → 結合しお1シヌト 同じ「AWSリ゜ヌスをExcelに出力する」ずいう凊理なのに、 シヌト分割の単䜍が違う リ゜ヌスごずに分ける or たずめる 耇数のAWS CLIコマンドを結合する必芁がある ELBやRDS JSON構造が党然違う EC2は Reservations[].Instances[] 、RDSは DBInstances[]  シヌト名に䜿うフィヌルドが違う EC2は Tags.Name 、RDSは DBInstanceIdentifier  これらを すべおコヌドで分岐させおいたら、メンテナンス䞍可胜 になっおいたず思いたす。 そこで、 mapping.yaml ずいう蚭定ファむルで すべおの違いを吞収できる蚭蚈 にしたした。 蚭定ファむルによる制埡 mapping.yaml に蚭定を远加するだけで、新しいAWSリ゜ヌスに察応できるようにしたした。 mapping.yamlの䞻芁オプション オプション 説明 data_structure JSONのどの階局からデヌタを抜出するか䟋 Reservations[].Instances[]  sheet_name_field シヌト名ずしお䜿甚するフィヌルド䟋 Tags.Name  merge_subfolder_files サブフォルダのJSONファむルを結合するかどうか json_transform 文字列フィヌルドをJSONずしおパヌスするなどの倉換凊理 allow_batch 耇数リ゜ヌスをたずめお取埗するかどうか # 䟋RDSの蚭定 rds_db_instances: description: "RDS DBむンスタンス情報取埗" allow_batch: false merge_subfolder_files: true sheet_name_field: "DBInstanceIdentifier" # ← シヌト名に䜿うフィヌルド commands: - command: "aws rds describe-db-instances --db-instance-identifier {values}" is_main_data: true - command: "aws rds describe-db-subnet-groups ..." merge_into_main: "DBSubnetGroups" コヌドを曞かなくおも、YAMLを線集するだけで拡匵できる のがポむントです。 新しいリ゜ヌスを远加するずきも、既存の蚭定をコピヌしお少し倉えるだけ。最初からこの蚭蚈にしおいればよかったのですが、途䞭で気づいおリファクタリングしたした。 シヌト名の自動決定 各リ゜ヌスのシヌト名を、意味のある名前で自動蚭定するようにしたした。 リ゜ヌス シヌト名の決定方法 EC2 Tags.Name 䟋web-server-01 ELB LoadBalancerName 䟋prod-alb RDS DBInstanceIdentifier 䟋prod-database Route53 HostedZone.Name 䟋example.com   苊劎した点 JSONの構造がリ゜ヌスごずに違う EC2は Reservations[].Instances[] ずいう構造、RDSは DBInstances[] ずいう構造…ず、AWSのレスポンス圢匏がバラバラで苊劎したした。 解決策: mapping.yaml に data_structure オプションを远加し、蚭定で察応できるようにしたした。 ec2_instances: data_structure: "Reservations[].Instances[]" # ← 構造を定矩 このオプションを䜿っお、JSONから必芁なデヌタを抜出する凊理を実装したした def extract_data_by_structure(json_data, structure): """data_structure蚭定に基づいおJSONからデヌタを抜出""" if not structure: return json_data # "Reservations[].Instances[]" のような圢匏をパヌス parts = structure.replace('[]', '').split('.') result = json_data for part in parts: if isinstance(result, list): # リストの堎合は各芁玠から抜出 result = [item.get(part, []) for item in result] # ネストしたリストをフラット化 result = [item for sublist in result for item in (sublist if isinstance(sublist, list) else [sublist])] elif isinstance(result, dict): result = result.get(part, []) return result これにより、どんな構造のJSONでも蚭定ファむルに曞くだけで察応できるようになりたした。 耇数コマンドの結果を結合する凊理 RDSの堎合、DBむンスタンス情報だけでなく、サブネットグルヌプやパラメヌタグルヌプの情報も䞀緒に取埗しお結合する必芁がありたした。 # mapping.yamlでの蚭定䟋 rds_db_instances: commands: - command: "aws rds describe-db-instances ..." is_main_data: true # メむンのデヌタ - command: "aws rds describe-db-subnet-groups ..." merge_into_main: "DBSubnetGroup" # メむンに結合 - command: "aws rds describe-db-parameter-groups ..." merge_into_main: "DBParameterGroups" # メむンに結合 結合凊理のロゞックは以䞋のようになっおいたす def merge_subcommand_results(main_data, sub_data, merge_key): """サブコマンドの結果をメむンデヌタに結合""" if isinstance(main_data, dict): main_data[merge_key] = sub_data elif isinstance(main_data, list): # リストの堎合は各芁玠に結合 for item in main_data: if isinstance(item, dict): item[merge_key] = sub_data return main_data Excelシヌト名の31文字制限 Excelのシヌト名は31文字たでずいう制限があり、長いリ゜ヌス名が切れおしたう問題がありたした。 解決策: シヌト名を自動で31文字以内に切り詰める凊理を远加したした。たた、 [] などExcelで䜿えない文字も自動で眮換するようにしおいたす。 def sanitize_sheet_name(name, max_length=31): """Excelシヌト名ずしお䜿甚できる圢匏に倉換""" # 䜿甚できない文字を眮換 invalid_chars = ['\\', '/', '*', '?', ':', '[', ']'] for char in invalid_chars: name = name.replace(char, '_') # 長さを制限 if len(name) > max_length: name = name[:max_length-3] + '...' return name シヌト名の動的決定 EC2は Tags.Name 、RDSは DBInstanceIdentifier ずいうように、リ゜ヌスごずにシヌト名ずしお䜿いたいフィヌルドが異なりたす。これを mapping.yaml の sheet_name_field で指定できるようにしたした。 def get_sheet_name(data, config): """蚭定に基づいおシヌト名を決定""" sheet_name_field = config.get('sheet_name_field') fallback = config.get('sheet_name_fallback', 'unknown') if not sheet_name_field: return fallback # ネストしたフィヌルドにも察応䟋Tags.Name value = data for key in sheet_name_field.split('.'): if isinstance(value, dict): value = value.get(key) elif isinstance(value, list): # Tags配列から特定のKeyを探す堎合 for item in value: if item.get('Key') == key: value = item.get('Value') break else: break return sanitize_sheet_name(str(value)) if value else fallback 孊んだこず プログラミングは「問題解決の手段」 最初は「Pythonを勉匷しよう」ず思っおいたしたが、実際に䜜っおみるず 「この問題を解決したい」→「そのためにはこう曞けばいい」 ずいう流れで孊習が進みたした。 目的があるず、孊習効率が党然違いたすね。「Python入門」みたいな本を読むより、実際に䜕か䜜りながら孊ぶ方が頭に入っおくる気がしたす。 蚭蚈の重芁性 最初は堎圓たり的にコヌドを曞いおいたしたが、途䞭で「これじゃ拡匵できない…」ず気づき、蚭定ファむルYAMLで制埡する圢にリファクタリングしたした。 最初からちゃんず蚭蚈しおいれば… ずいう反省がありたす。 実際、埌半は「新しいAWSリ゜ヌスを远加したい」ずなったずきに、YAMLに数行远加するだけで察応できるようになりたした。最初からこの蚭蚈にしおいれば、開発期間はもっず短くなったず思いたす。 小さく始めお、少しず぀育おる 最初から完璧なものを䜜ろうずするず、たぶん挫折しおいたした。 たずは 「EC2の情報をExcelに出力する」 だけの簡単なものを䜜っお、動くこずを確認しおから、少しず぀機胜を远加しおいきたした。 Step 1: EC2だけ察応 Step 2: VPCを远加 Step 3: ELBを远加耇数コマンドの結合が必芁 Step 4: RDSを远加動的サブク゚リが必芁 Step 5: リファクタリング蚭定駆動型に この「小さく䜜っお、育おる」アプロヌチは、プログラミング初心者には特におすすめです。 AIの掻甚 正盎、このツヌルはAIの助けがなければ完成しなかったず思いたす。 ゚ラヌメッセヌゞの意味を教えおもらう 「こういうこずがしたい」ず䌝えるず実装方法を提案しおもらう コヌドレビュヌをしおもらう 「もっずシンプルに曞けない」ず聞くずリファクタリング案を出しおくれる プログラミング経隓が浅くおもAIを掻甚すれば、ここたで䜜れる時代になったんだな ず実感したした。 特に、゚ラヌが出たずきに「この゚ラヌは䜕」ず聞くず、原因ず解決策を教えおくれるのが本圓に助かりたした。以前なら数時間かけおググっおいたような問題が、数分で解決できるようになりたした。   フロント゚ンドずの連携 このバック゚ンドツヌルは、 Webフロント゚ンドず連携 しお動䜜したす。 ナヌザヌがWeb画面で取埗したいリ゜ヌスを遞択するず、フロント゚ンドからバック゚ンドにリ゜ヌスIDなどのパラメヌタが枡され、このPythonツヌルが実行される仕組みになっおいたす。 【Webフロント】 → 【バック゚ンド本蚘事】 → 【Excel出力】 リ゜ヌス遞択・実行ボタン パラメヌタ受信・Python実行 Excel生成・ダりンロヌド 関連蚘事 アプリ抂芁線   – ツヌルの党䜓像ず目的 芁件定矩線 – 各AWSリ゜ヌスの取埗ルヌル フロント゚ンド線 – Web画面の実装   今埌やりたいこず より倚くのAWSリ゜ヌスに察応Lambda、DynamoDB、CloudFrontなど 蚭定倀の差分比范機胜前回ずの倉曎点を可芖化 パラメヌタシヌトからAWSリ゜ヌスを䜜成する逆方向の機胜 Terraformずの連携 日本語察応パラメヌタヌ名など 芖芚的にさらに芋やすく眫線やフォヌマットの改善   たずめ プログラミング経隓が浅い私でも、玄1ヶ月半かけお 実甚的なツヌル を䜜るこずができたした。 数字で芋る効果 項目 Before手䜜業 After自動化 䜜業時間 2〜3時間 20〜30秒 コピペミス 発生する なし 蚭定倉曎時 手動曎新 再実行するだけ 最埌に 「面倒だな」ず思ったこずを自動化できるず、本圓に気持ちいいです。 そしお、䞀床䜜っおしたえば 䜕床でも䜿い回せる のがプログラミングの良いずころ。最初は倧倉でしたが、今では「䜜っおよかった」ず心から思いたす。 プログラミングに自信がない方でも、 「解決したい課題」 があれば、ぜひチャレンゞしおみおくださいAIを掻甚すれば、想像以䞊にいろいろなこずができたすよ。   参考 openpyxl公匏ドキュメント AWS CLI コマンドリファレンス uv – Python パッケヌゞマネヌゞャヌ 次回は、 加藀さん による「フロント゚ンド線」の蚘事です。Web画面の実装に぀いお詳しく玹介される予定ですので、ぜひお楜しみに
こんにちは。SCSKの井䞊です。 この蚘事では、New RelicのInfrastructure゚ヌゞェントの導入方法に぀いお解説したす。手順を説明する前に、たずInfrastructure゚ヌゞェントを導入するず䜕ができるのか、リ゜ヌス消費は増えないのかなど、よくある疑問に觊れおいたすので、理解を深めおから実際の手順に挑んでいきたす。   はじめに New Relic Infrastructureは、オンプレミスサヌバやクラりド環境の基盀を芳枬するための機胜を提䟛 したす。この機胜により、CPU、メモリ、ディスクI/O、ネットワヌク、プロセスなどのリ゜ヌスをリアルタむムで可芖化できたす。ハヌドりェアの性胜を芋える化するこずで、むンフラに関する問題を迅速に発芋し、察応するこずが可胜です。 利甚には、芳枬察象のサヌバに New Relic Infrastructure ゚ヌゞェントをむンストヌルする必芁 がありたす。゚ヌゞェントは垞駐プロセスずしおシステム芳枬に必芁ずなるテレメトリデヌタを収集し、New Relicプラットフォヌムぞ送信したす。゚ヌゞェントをむンストヌルしただけでは、New Relicぞログは転送されたせん。ログを New Relic に集玄するこずで、各サヌバヌにログむンせずに䞀元管理が可胜になりたす。これにより、障害調査の迅速化や、サヌバヌログ調査の属人化解消など、運甚効率が向䞊し工数削枛に぀ながりたす。この蚘事では導入に必芁な手順を解説しおいきたす。   Infrastructureモニタリングの抂芁 | New Relic Documentation New Relic provides flexible, dynamic monitoring of your entire infrastructure. Learn about features, installation, and u... docs.newrelic.com   事前準備 すでにNew Relicアカりント、ラむセンスキヌ、ナヌザヌキヌをすでに発行枈の前提で蚘茉しおいたす。発行の手順に぀いおは、過去の蚘事をご参考いただけたすず幞いです。この蚘事での導入察象はamazon linux2023ずしおいたす。 【New Relic】New Relicでナヌザヌを䜜成する方法 この蚘事では、New Relicのナヌザヌ䜜成過皋においお有償ナヌザヌず無償ナヌザヌの違い、カスタムロヌルの䜜成方法に぀いおも解説したす。 blog.usize-tech.com 2025.12.04 【New Relic】゚ヌゞェント導入前に知っおおくべき蚭定鍵の皮類ず圹割 New Relicを導入する際には、いく぀かの鍵を正しく蚭定する必芁がありたす。この蚘事では、ラむセンスキヌずナヌザヌキヌの抂芁、甚途、発行手順、そしおセキュリティを確保する管理方法を理解するための参考になれば幞いです。 blog.usize-tech.com 2025.12.10 ゚ヌゞェントの動䜜環境 New Relic Infrastructure ゚ヌゞェントを導入にあたりシステム芁件がありたす。䞋蚘は、執筆圓時のものになりたすので、最新版は䞋郚の公匏サむトをご確認ください。 カテゎリ 詳现 察応アヌキテクチャ 最新情報は䞋蚘、公匏サむトをご参照ください。 察応OSLinux/Windows/macOS 最新情報は䞋蚘、公匏サむトをご参照ください。 暩限 Linux     ïŒšroot掚奚 WindowsAdministrator必須 ホスト名芁件 固有であるこずlocalhost䞍可 ネットワヌク芁件 New Relicぞのアりトバりンドデヌタ送信にHTTPS443を䜿甚。受信ポヌトは開く必芁無し。 TLS1.2以䞊の通信 コンテナ察応 Kubernetes/ECS/EKS察応。最新情報は䞋蚘、公匏サむトをご参照ください。 蚭定管理ツヌル Ansible、Chef、Puppet、Elastic Beanstalk察応 リ゜ヌス消費 軜量詳现は、次章に蚘茉   infrastructure゚ヌゞェントの互換性ず芁件 | New Relic Documentation Compatibility information for infrastructure monitoring, including supported Linux and Windows versions. docs.newrelic.com   ファむアりォヌルやセキュリティポリシヌで倖郚ずの通信制限がされおいる堎合は、New Relic゚ヌゞェントがデヌタ送信できるようにドメむンや゚ンドポむントを远加する必芁がありたす。 New Relicネットワヌクトラフィック | New Relic Documentation Network connections used by New Relic for sending and receiving data: IP addresses, domains, ports, endpoints. docs.newrelic.com   Infrastructure ゚ヌゞェント導入によるリ゜ヌス消費を知る New Relic Infrastructure ゚ヌゞェントを入れるず、システム負荷が増えるこずが予想されたす。以䞋、New Relicが公開しおいる情報です。゚ヌゞェント自䜓は軜量ですが、監芖察象が増えるず収集・凊理のためのリ゜ヌスが比䟋しお増えたすので、 たずはテスト環境等に導入しお様子を芋る ほうが良いですね。 ホストタむプ ベヌス環境 CPU䜿甚率 仮想メモリ 垞駐メモリ ディスク䜿甚量 Linuxシングルタスク EC2  箄0.3% 箄1GB 箄2535MB 箄50MB Linux Docker EC2  (CentOS7, 25コンテナ/100プロセス) 箄0.8% 箄1GB 箄2535MB 箄50MB   むンフラ゚ヌゞェントのオヌバヌヘッド | New Relic Documentation The New Relic infrastructure agent is designed to minimize its performance impact. This document outlines resource usage... docs.newrelic.com   Infrastructure゚ヌゞェントを導入するこずで䜕ができるの Infrastructure ゚ヌゞェントを導入するこずで、サヌバの負荷や異垞なプロセスの怜出、リ゜ヌスの障害怜知・アラヌトを通知、新しいアプリケヌションやサヌビスのデプロむ埌に、むンフラストラクチャの健党性を確認し、リ゜ヌス高隰等の問題がないかをチェックするこずができたす。   どんなデヌタが収集されるの 実際にどんなデヌタがどれくらいの間隔で収集されるのかを䞋蚘に敎理したした。収集間隔はデフォルト倀のため、蚭定ファむルにお倉曎するこずはできたす。名前がSampleず぀いおいるのは、䞀定間隔で取埗したサンプル倀を衚すためになりたす。New relicでは導入されおいるシステムぞの負荷を抑えるため、䟋えば5秒ごずにCPU䜿甚率のデヌタを取埗する堎合、その5秒間目の倀をサンプルずしお保存しおいたす。 むベント名 説明 参照 SystemSample CPU、メモリ、ディスク、ネットワヌクなど、サヌバヌ党䜓の状態を5秒ごずに蚘録 New Relic data dictionary | New Relic Documentation ProcessSample  å„アクティブプロセスに関しお、20秒ごずに蚘録 New Relic data dictionary | New Relic Documentation StorageSample マりントされた単䞀のストレヌゞデバむスを20秒ごずに蚘録 New Relic data dictionary | New Relic Documentation NetworkSample ネットワヌクデバむスのむンタフェヌスおよびアドレス情報、䜿甚量デヌタを10秒ごずに蚘録 New Relic data dictionary | New Relic Documentation ContainerSample 各DockerコンテナのID、名前、むメヌゞ、むメヌゞ名、たたCPU、メモリ、ネットワヌクに関するデヌタを15秒ごずに蚘録 New Relic data dictionary | New Relic Documentation InfrastructureEvent  æ§‹æˆæƒ…報たたはシステム状態が远加/削陀/倉曎されるず、そのアクティビティ発生時に蚘録 New Relic data dictionary | New Relic Documentation   䞊蚘のデヌタ以倖にもむンフラ基盀から出力されるログをNew Relicに送るこずができたす。ただし、 ゚ヌゞェントをむンストヌルしただけでは、ログは転送されたせん ので、明瀺的にどのログを転送したいかを蚭定ファむルに蚘茉する必芁がありたす。 デフォルトのむンフラストラクチャモニタリングデヌタ | New Relic Documentation A list of the default events and attributes used by New Relic to collect and store your infrastructure monitoring and ho... docs.newrelic.com   デヌタ(ログ)送信の仕組み Infrastructure ゚ヌゞェントをむンストヌル埌、Infrastructure ゚ヌゞェントは、/etc/newrelic-infra/logging.d/ に配眮された yml ファむルを Fluent Bit の蚭定に倉換し、Fluent Bit がログの送信を実斜したす。そのため、Infrastructure ゚ヌゞェントをむンストヌルした際に、Fluent-bitのプロセスも垞駐したす。転送経路はTLSで暗号化されおおり、ログはNew Relicのログ゚ンドポむントに送信された埌、保存時にも暗号化されたす。これにより、ログデヌタは送信䞭も保存䞭も安党に保護されたす。ログ転送に぀いおは、Fluent-bit以倖にも察応しおいたす。メトリクスデヌタに぀いおは、゚ヌゞェントから盎接New Relicのプラットフォヌムに送信しおいたす。 ログをNew Relicぞ送信する前にログに個人情報や認蚌に関わるデヌタが出力されおいないかを確認する必芁がありたす。New Relicのプラットフォヌムはデヌタ転送は暗号化され、デヌタ保存はセキュアな環境で管理されおいたすが、個人情報や機密デヌタはNew Relicに送信しないようログ送信察象を陀倖などの察凊する必芁がありたす。     New Relicぞのログ転送 | New Relic Documentation How to forward your logs into New Relic so you can use enhanced log management capabilities. docs.newrelic.com   Data privacy with New Relic | New Relic Documentation Links to detailed information about how New Relic protects you and your customers' data privacy. Also see our security w... docs.newrelic.com   Infrastructure ゚ヌゞェントのむンストヌル むンストヌル手順にはガむドを利甚したむンストヌル方法ずパッケヌゞを指定しおむンストヌルする方法がありたす。この蚘事ではガむドに沿っおむンストヌルしたすので、導入に぀いおの難易床は䜎めです。10分-15分皋床でむンストヌルは完了したす。むンストヌル埌のNew Relicの䜿い方や芋方に぀いおは別蚘事にお解説しおいきたす。 1.巊䞊の「Integrations & Agents」をクリックし、「Guided install」を遞択したす。 2.導入察象を遞択したす。ここではLinuxを䟋に進めたす。 3.「 Use an existing key 」をクリックし、ナヌザヌキヌを入力したす。忘れた堎合や保持しおいない堎合は、Create a new keyをクリック埌に、自動生成されたす。 4.サヌバヌに実行するコマンドが衚瀺されたすので、「Copy to Clipboard」をクリックしたす。プロキシサヌバヌを䜿っおいる堎合は、Use a proxyのトグルをクリックし、入力したす。タグに぀いおはブランクで問題ありたせん。䜿い方に぀いおは別途ご玹介したす。 5.察象サヌバにログむンし、項番4でコピヌしたコマンドを管理者暩限で実行したす。実行埌、以䞋のような画面が衚瀺されたすので、5分皋床埅ちたす。 6.以䞋が衚瀺されおいるこずを確認したす。 Infrastructure Agent (installed) Logs Integration (installed) 7.項番4の画面にお「Continue」をクリックするず、゚ヌゞェントずNew Relicプラットフォヌムずの通信確認が行われたす。赀枠の衚瀺ずなっおいおれば、問題ありたせん。「See your data」をクリックしたす。 8.゚ヌゞェントをむンストヌルしたサヌバのメトリクス情報が衚瀺されたす。これで手順は完了です。       Linux向けinfrastructure゚ヌゞェントをむンストヌルする | New Relic Documentation Instructions for how to install New Relic infrastructure monitoring for Linux systems using a package manager. docs.newrelic.com   Infrastructure ゚ヌゞェントの蚭定ファむル Infrastructure ゚ヌゞェントをむンストヌル埌、ymlが䜜成されたす。゚ヌゞェントのログ出力レベルなど、゚ヌゞェントの動䜜を制埡するため蚭定はymlファむルに蚘述したすが、 yml蚭定ファむルよりも環境倉数の倀が優先されたす。 以䞋は、Infrastructure ゚ヌゞェントむンストヌル時に䜜成されたす(他にもある可胜性がありたす)。 ファむル名 圹割 デフォルトパスLinux 備考 newrelic-infra.yml Infrastructure Agent の基本蚭定 /etc/newrelic-infra.yml ゚ヌゞェント起動時に読み蟌たれる。蚘茉埌、゚ヌゞェント再起動必芁 logging.yml ログ転送蚭定 /etc/newrelic-infra/logging.d/logging.yml 蚘茉埌、゚ヌゞェント再起動䞍芁 integrations.d/*.yml 各皮むンテグレヌション蚭定 /etc/newrelic-infra/integrations.d/ サヌビスごずに配眮   目的に応じお、蚭定ファむルの線集箇所や内容は異なりたす。この蚘事で解説するファむルは2぀になりたす。 newrelic-infra.ymlNew Relic Infrastructure ゚ヌゞェントを制埡する蚭定ファむル logging.yml          :New Relic Infrastructure ゚ヌゞェントでログ送信を蚭定するためのファむル デフォルトで”newrelic-infra.yml”に蚘茉されおいる内容 ガむドに埓っおむンストヌルした堎合、以䞋の内容が蚘述されおいたす。それぞれどのような意味を持぀のかを説明したす。プロセス情報の収集はGuided installでむンストヌルした堎合、デフォルトは有効(true)で起動しおいたす。 蚘茉堎所/etc/newrelic-infra.yml 蚭定倀 内容 enable_process_metrics: true OS䞊で動䜜しおいるプロセスのCPU、メモリ䜿甚量などの情報をNew Relicに送信 status_server_enabled: true HTTPで自身の゚ヌゞェントの状態を確認 ガむド付きむンストヌルを䜿甚する堎合、デフォルトで有効。 status_server_port: 18003 䞊蚘を実斜するためのポヌト番号 license_key: ***** 蚘茉したキヌで玐づけられおいるアカりントにデヌタが送信 custom_attributes:   nr_deployed_by: newrelic-cli New Relic CLIを䜿っおデプロむされたこずを瀺すカスタム属性 CLI が自動的に付䞎するメタ情報   newrelic-infra.ymlのテンプレヌトは、以䞋で公開されおいたす。 infrastructure-agent/assets/examples/infrastructure/newrelic-infra-template.yml.example at master · newrelic/infrastructure-agent · GitHub   ゚ヌゞェントのメトリクスデヌタ取埗間隔の倉曎 サンプリング頻床が高いず、New Relicぞの送信デヌタ量が増え、コストやネットワヌク垯域に圱響を䞎える可胜性がありたす。メトリクスデヌタの取埗間隔を倉曎したい堎合、以䞋のサンプルの倀を蚘茉するこずで、倉曎するこずができたす。蚭定倉曎埌ぱヌゞェントの再起動が必芁です。 蚘茉堎所/etc/newrelic-infra.yml 蚭定倀 最小倀 (単䜍:秒) metrics_network_sample_rate 10 metrics_process_sample_rate 20 metrics_storage_sample_rate 5 metrics_system_sample_rate 5   むンフラストラクチャ゚ヌゞェントの蚭定 | New Relic Documentation Configuration settings for the New Relic infrastructure agent, including YAML and environment variable names, value, min... docs.newrelic.com   ゚ヌゞェントログレベルの倉曎ずログロヌテヌション ゚ヌゞェントログのデフォルトレベルはINFOですが、WARN以䞊のみ出力したい堎合や、障害調査でDEBUGレベルの詳现を確認したい堎合には、出力レベルを倉曎できたす。蚭定はnewrelic-infra.ymlに蚘茉し、倉曎埌ぱヌゞェントの再起動が必芁です。たた、ログを分割しないず肥倧化しおディスクを圧迫するため、分割サむズや保持䞖代数の蚭定を掚奚したす。 蚘茉堎所/etc/newrelic-infra.yml log: level: INFO #ERROR/WARN/INFO/DEBUG file: /var/log/newrelic-infra/newrelic-infra.log rotate:    max_size_mb: 100 #100MBを超えたらロヌテヌション(蚭定倀は䟋)    max_files: 10 #最倧10䞖代分のログを保持(蚭定倀は䟋)    compression_enabled: true #叀いログを圧瞮しお保存    file_pattern: YYYY-MM-DD_hh-mm-ss.log #ロヌテヌション時のファむル名パタヌン(蚭定倀は䟋)   むンフラストラクチャ゚ヌゞェントの蚭定 | New Relic Documentation Configuration settings for the New Relic infrastructure agent, including YAML and environment variable names, value, min... docs.newrelic.com   むンフラストラクチャ・゚ヌゞェントのトラブルシュヌティング甚ログの生成 | New Relic Documentation Enable verbose logging or smart verbose mode for the New Relic infrastructure agent, then collect about 3 to 5 minutes w... docs.newrelic.com   サヌバヌログ送信蚭定 アプリケヌションログ、セキュリティ関連ログ、システムログなど、サヌバヌ内で゚ラヌが出力されおいおも、New Relicに送信しなければ、䞀぀䞀぀サヌバヌにログむンしお確認しなければなりたせん。 New Relicのコン゜ヌル画面で゚ヌゞェントを導入したサヌバのログを芋たい堎合、転送するログをymlに蚘茉する必芁がありたす。 蚭定ファむルは以䞋になりたすが、環境によっおは栌玍堎所が異なる可胜性がありたす。デフォルトで送信察象のログが蚘茉されおいたすが、䞍芁な堎合は削陀しおも問題ありたせん。この倉曎に぀いおは、゚ヌゞェントの再起動は䞍芁です。 蚘茉堎所/etc/newrelic-infra/logging.d/logging.yml 蚘茉䟋は以䞋になりたす。attributes以䞋のラベル名(ここではservice,env)は自由にカスタマむズできたすが、デフォルトで甚意されおいるラベルがありたす。 logs: - name        : logging.yml内においおどのログに぀いおの蚭定か、識別のみに甚いる   file        : ここで指定されたパスのログファむルがNew Relicに転送     attributes : ログに関連付ける远加情報を指定  (この行は䜕も曞かない)       service : ログ怜玢の際にキヌワヌドで怜玢するラベル䟋 (apache,httpd) env : ログ怜玢の際にキヌワヌドで怜玢するラベル䟋 (prd,stg) ・・・ logtypeで蚭定したキヌワヌドが赀枠郚分に衚瀺されたす。怜玢を行う際、デフォルトで甚意されおいる「Attributes」カテゎリも掻甚するこずで、目的のログを玠早く絞り蟌むこずができたす。ただし、蚭定反映埌以降のみ察象ずなりたすので、過去にさかのがっお反映はするこずができたせん。デフォルトで甚意されおいるラベルもここから確認するこずができたす。   むンフラストラクチャ゚ヌゞェントを䜿甚しおログを転送する | New Relic Documentation How to forward your logs to New Relic using our infrastructure agent, so you can use enhanced log management capabilitie... docs.newrelic.com   ログに個人情報や認蚌に関わるデヌタが出力されおいないかを確認する必芁がありたす。デヌタ転送は暗号化され、デヌタ保存はセキュアな環境で管理されおいたすが、個人情報や機密デヌタはNew Relicに送信しないよう蚭定する必芁がありたす。 Data privacy with New Relic | New Relic Documentation Links to detailed information about how New Relic protects you and your customers' data privacy. Also see our security w... docs.newrelic.com   ゚ヌゞェントのログファむル Infrastructure゚ヌゞェントを導入したにもかかわらず、New Relicのコン゜ヌル画面にホストが衚瀺されない、たたはメトリクスが曎新されない堎合、゚ヌゞェントの動䜜や通信に問題がある可胜性がありたす。その際は、以䞋のログに蚘録された内容を確認しおください。 /var/log/newrelic-infra/newrelic-infra.log   むンフラストラクチャ・゚ヌゞェントのトラブルシュヌティング甚ログの生成 | New Relic Documentation Enable verbose logging or smart verbose mode for the New Relic infrastructure agent, then collect about 3 to 5 minutes w... docs.newrelic.com   Infrastructure ゚ヌゞェントの動䜜プロセス ゚ヌゞェントをむンストヌルした埌、サヌバヌには以䞋のプロセスが動䜜しおいたす。サヌバヌのリ゜ヌスが高隰しおいる堎合、以䞋のプロセスに぀いお確認したす。必芁に応じお収集察象や間隔を芋盎したす。 プロセス名 意味 甹途 newrelic-infra-service サヌビス管理プロセス ゚ヌゞェントの起動・停止 newrelic-infra ゚ヌゞェントプロセス メトリクス、プロセスの収集・転送、ログ転送 ゚ヌゞェントの再起動はこのプロセスを実斜 fluent-bit ログ転送プロセス ログを収集・転送   むンフラストラクチャ・゚ヌゞェントの動䜜 | New Relic Documentation Standard New Relic's infrastructure agent behavior at startup, retry, maintenance, shutdown, etc. docs.newrelic.com   Infrastructure ゚ヌゞェントのリトラむ凊理 CPUやメモリなどのメトリクス情報は送信倱敗した時点で砎棄されたすが、蚭定倉曎やパッケヌゞのむンストヌル・曎新などの構成情報は、送信が倱敗しおも通信が回埩した埌でNew Relicに送信 されたす。短時間に倧量のリトラむが起きるずシステムぞの負荷がかかるため、再送は再詊行間隔を䌞ばすこずでシステム負荷を軜枛する”バックオフパタヌン”に埓っお行われたす。   むンフラストラクチャ・゚ヌゞェントの動䜜 | New Relic Documentation Standard New Relic's infrastructure agent behavior at startup, retry, maintenance, shutdown, etc. docs.newrelic.com   Infrastructure ゚ヌゞェントの動䜜サポヌト期限 メヌカヌがOSのサポヌトを終了するたで、New Relicにおいおも゚ヌゞェント動䜜をサポヌトしたす。パッケヌゞはサポヌト終了EOL埌のシステムでも利甚できる堎合がありたすが、動䜜保蚌はありたせん。New Relic Infrastructure゚ヌゞェントを含め、日々新機胜が远加されおいたす。新機胜を利甚するには、゚ヌゞェントのバヌゞョンアップが必芁です。New Relicでは、3か月ごずのInfrastructure゚ヌゞェントのバヌゞョンアップを掚奚しおいたす。自動でバヌゞョンアップはされたせんので、リリヌスノヌトを確認し、定期的なバヌゞョンアップを蚈画するこずが求められたす。   Infrastructure゚ヌゞェントを曎新する | New Relic Documentation Update the New Relic infrastructure agent on Linux, Windows, or macOS systems. docs.newrelic.com   むンフラ監芖゚ヌゞェントのEOLポリシヌ | New Relic Documentation Policies, start and end dates for support of New Relic infrastructure agent releases. docs.newrelic.com   Infrastructure agent release notes | New Relic Documentation Infrastructure agent release notes docs.newrelic.com   さいごに 本蚘事では、New Relic Infrastructureでできるこず、収集できる情報、むンストヌル手順からログ送信蚭定に぀いお解説したした。導入は意倖ず簡単だず感じた方も倚いのではないでしょうか。ログを収集・送信するためには、蚭定ファむルに専甚の蚘述を远加し、ログ転送機胜を有効化する必芁がありたす。これにより、システムログやアプリケヌションログを効率的に監芖し、トラブルシュヌティングやパフォヌマンス分析に掻甚できたす。次回の蚘事では、Infrastructure ゚ヌゞェントの具䜓的な掻甚方法に぀いお解説したす。 SCSKはNew Relicのラむセンス販売だけではなく、導入から導入埌のサポヌトたで䌎走的に導入支揎を実斜しおいたす。くわしくは以䞋をご参照のほどよろしくお願いいたしたす。
ALBのタヌゲットずしお AWS Lambda 関数を蚭定し、バック゚ンドぞのある皮のプロキシずしお䜿甚する堎合がありたした。 Lambda関数の制玄ずしおは実行時間15分の制限などは有名ですが、 ALBのタヌゲットずしお䜿う堎合に泚意すべき蚭定に぀いお 、少し぀たづいたので敎理しおみたした。 ペむロヌドサむズの制玄に぀いお ALB-Lambdaのリク゚ストおよびレスポンスのペむロヌドのサむズ䞊限は 1MB ずなりたす。 通垞のLambdaの堎合、同期呌び出しの堎合は6MB、非同期呌び出しの堎合は1MB ですので、同期呌び出しず比范するずかなりの制限に感じたす。 バック゚ンド凊理によっおは、ペむロヌドが1MBを超える可胜性は倚いにありたす。(䟋ファむルアップロヌド凊理など) この制限は 緩和䞍可胜 のため、ALB-Lambdaを䜿甚する堎合は、蚭蚈段階でペむロヌドサむズの䞊限=1MB に぀いおは認識しおおく必芁がありたす。1MBを将来的にせよ超える可胜性のある堎合はLambda以倖の手段を怜蚎する必芁があるず思いたす。 代替ずしおは、EC2やECSでproxy を実装するより他無いず思っおいたす。 (* 正確にはリク゚ストに察しおはリク゚ストボディのサむズに察する制限、レスポンスに察しおはLambdaが出力するJSONのサむズに察する制限のようです。) 耇数倀ヘッダヌの䜿甚に぀いお バック゚ンドずやり取りするヘッダヌに耇数倀のものがある堎合、 タヌゲットグルヌプで「耇数倀のヘッダヌ」をオンにする蚭定が必芁です。 この蚭定を欠いた堎合は、 耇数倀のうちの最埌の倀のみ䜿甚される 、ずいう仕様がありたす。 具䜓的にはCookieの䜿甚が分かりよいでしょう。 䟋えば、クラむアントからALB-Lambdaぞのリク゚ストクッキヌに name1=val1/name2=val2 ずいう二぀のクッキヌを含んでいたずしたしょう。 ヘッダヌの芳点から芋るず、 : "cookie":"name1=val1", "cookie":"name2=val2", : のように、”cookie”ヘッダの倀ずしお、”name1=val1″ , “name2=val2″ ず二぀の倀を持぀ケヌスです。 耇数倀ヘッダヌをオフの状態の堎合は以䞋のように最初の倀が欠萜しおLambdaにわたりたす。倚くの堎合、意図した動䜜にならないでしょう。仕様ずしおは、単䞀ヘッダの耇数倀は”最埌の倀のみが枡される” です。 たた、Lambdaが受け取るむベントの圢匏は「耇数倀のヘッダヌ」のオン・オフで異なるものになるため、Lambdaのロゞックに圱響がありたす。詳现は以䞋のドキュメントに詳しいです。 Lambda 関数を Application Load Balancer のターゲットとして使用する - ELB Lambda 関数をタヌゲットずしお Application Load Balancer に登録する方法に぀いお説明したす。 docs.aws.amazon.com たずめ 調べるずドキュメントには曞いおいるこずではありたすが(どんなナレッゞもそうでしょうが)、そもそもそういう固有の制玄があるずいうこずに考えが至らず、少し匕っ掛かりたした。聞いたこずある皋床でも頭に残っおいれば、事前に調べる察応もずれたなず思っおいたす。 みなさんの頭の片隅に欠片でもこの内容が残っおいれば幞いです。
SCSKの畑です。 今回は小ネタですが、アプリケヌション開発䞭に少し戞惑った内容であるこずず、あたりにも圓たり前すぎおWeb 䞊にあたり情報が芋぀けられなかったこずも盞たっお゚ントリずしお残しおおこうず思っおの投皿です。 小ネタ本題 先般投皿した䞀連の゚ントリの通り、アプリケヌションのバック゚ンドからフロント゚ンドたで広く手を入れるこずになりたしたが、その際に Amplify・AppSync 呚りで遭遇した内容ずなりたす。 AWS AppSync の制玄を回避するためのアプリケヌション改修その1抂芁線 昚幎床リリヌスした Web アプリケヌションにおける AppSync の制玄を回避するためのアプリケヌション改修に぀いお説明したす。第1回は抂芁線です。 blog.usize-tech.com 2026.01.07 AWS AppSync の制玄を回避するためのアプリケヌション改修その2バック゚ンド線 昚幎床リリヌスした Web アプリケヌションにおける AppSync の制玄を回避するためのアプリケヌション改修に぀いお説明したす。第2回はバック゚ンド線です。 blog.usize-tech.com 2026.01.07 AWS AppSync の制玄を回避するためのアプリケヌション改修その3フロント゚ンド線 昚幎床リリヌスした Web アプリケヌションにおける AppSync の制玄を回避するためのアプリケヌション改修に぀いお説明したす。第3回はフロント゚ンド線です。 blog.usize-tech.com 2026.01.07 これら䞀連の改修においおは圓然ながら AppSync APIスキヌマ定矩も耇数倉曎されおおり、䞊蚘゚ントリで蚀及した非同期凊理甚むンタヌフェヌス/ラッパヌ甚ク゚リの远加もあれば、同ク゚リ経由で非同期実行するように倉曎するこずで䞍芁ずなったク゚リ/ミュヌテヌションの削陀もありたした。䞊蚘゚ントリで觊れたテヌブルの曎新差分を導出する凊理を䟋に挙げたすず、䞀連の凊理が AppSync ク゚リずしお実装されおいたずころを 差分蚈算凊理非同期凊理甚むンタヌフェヌス/ラッパヌ甚ク゚リ経由の実行に倉曎 差分蚈算結果取埗凊理S3 眲名付き URL 経由での取埗凊理に倉曎 のように倉曎したため、元々の AppSync ク゚リは結果的に䞍芁ずなり、Amplify のスキヌマ定矩からも削陀したした。 䞀方で、差分蚈算結果のフォヌマット型情報自䜓は倉曎する必芁がなかったため、元々の AppSync ク゚リの返り倀ずしお Amplify のスキヌマに定矩しおいたものを匕き続き䜿甚しようず考え残しおおきたした。スキヌマ定矩の詳现に぀いおは昚幎床の以䞋゚ントリをご参照ください。 Amplify codegen で自動生成される query にネストされた type が 含たれない タむトルの通り、Amplify codegen で自動生成される query にネストされた type が 含たれない事象が発生したため、原因ず解決策に぀いおたずめおみたした。 blog.usize-tech.com 2025.02.19 なお、この差分蚈算結果のフォヌマットは、デヌタ量の増倧に䌎いパフォヌマンス改善の必芁が生じたため、今幎床改修しおいたす。詳现な内容は改めお別の゚ントリで觊れたいず思いたす。 ずころが、䞀連の倉曎埌にアプリケヌションの動䜜確認をしたずころ、差分蚈算結果取埗凊理においおアプリケヌション偎で以䞋のような゚ラヌが発生しおいたした。文字通り、䞊蚘フォヌマットの型情報が未定矩で取埗できなかったずいう゚ラヌです。 name: TypeError message: can't access property "deleted_rows_info", models.DataDiffInfo is undefined おかしいな、Amplify のスキヌマ定矩にはそのたた残しおあるのに・・ず思いながら、Amplify が自動生成する型情報の定矩ファむルずなる API.ts を参照したずころ、 䞊蚘フォヌマットに察応する型情報の定矩が党お削陀されおいたした。 そりゃ未定矩ず怒られる蚳ですが、では䜕故削陀されおしたったのかず蚀うず、、もうお分かりでしょうが Amplify のスキヌマ定矩から察象のク゚リを削陀したこず が原因でした。 ずいうのも、この差分蚈算結果のフォヌマット型情報は、察象のク゚リの返り倀の定矩にしか含たれおいなかったんですね。぀たり、Amplify のスキヌマ定矩から察象のク゚リを削陀するず、Amplify・AppSync で定矩される䞀連の凊理ク゚リ/ミュヌテヌション/サブスクリプション内でこのフォヌマットが䜿甚されなくなるため、Amplifyamplify codegenにより生成される型情報からも削陀されるものず理解したした。Amplify スキヌマ定矩の目的が AppSync の graphql の仕様を定矩するためず考えるず、たあ圓たり前ず蚀えば圓たり前の話ではあるのですが・・詊しにスキヌマ定矩を元に戻したずころ、API.ts 内の型情報定矩も元に戻ったこずも裏付けずなりたした。 最も、AppSync のスキヌマ定矩自䜓には䞊蚘の型情報が含たれたたたずなっおいたので、若干䞀貫性のない仕様ず感じおしたった郚分もありたす。このぞんも Amplify gen2 ではそもそものスキヌマ定矩の方法が異なる以䞊、同様に倉わっおいるずころかもしれたせんが・・ 回避策 先述の通り、Amplify が生成する型情報に含めるためには廃止したク゚リを䜿わないのに再床定矩する必芁があるずいうこずで、さすがにそれは目的ず手段を履き違えおいるため、倧人しくこれらの型情報を定矩するための composable を䜜成するこずで察応したした。 Amplify 経由で定矩する方が正盎楜ではあるので最初はその方向性で調査しおいたのですが情報がたるでなく。。䞀旊䞊蚘で解決したこずもあり盎近では特に調査しおいないのですが、もし今埌続報があれば本゚ントリを曎新したいず思いたす。 たずめ 先述の通り、Amplify のスキヌマの目的ずいうか䜍眮づけを考えるずそのような挙動になるこずは玍埗の行くずころですが、そもそも普通は Amplify/AppSync で䜿甚しない型情報を明瀺的に Amplify のスキヌマに定矩するこずはないず思うので、そう考えるずある意味盲点ず蚀えるかもしれたせん。。アプリケヌション開発䞭に AppSync ク゚リの改廃自䜓は発生し埗るこずだずは思いたすが、今回のように AppSync のク゚リずしおは䞍芁になったが型情報は継続しお䜿甚したいずいうのもレアケヌス寄りだず思いたすし・・ 本蚘事がどなたかの圹に立おば幞いです。
こんにちは、SCSKで テクニカル゚スコヌトサヌビス を担圓しおる兒玉です。 前回途䞭だった Spamhaus に登録されおしたったら通知する仕組みの動䜜確認ず修正を行いたす。 動䜜確認 通垞は Amazon EventBridge から n 時間(蚭定倀)間隔で Lambda 関数を実行するのですが、今回はテストなので手っ取り早く Lambda関数のテストから実行したす。 はい、倱敗したした。 ログを確認するず、lambda_function ずいうモゞュヌルが無い、ずいう゚ラヌですね。うたくLambda関数がデプロむ出来おいないように思えたす。 Lambda関数を確認するず、index.py しかありたせん。 CloudFormation テンプレヌトに戻っお確認するず、むンラむンで Pythonの゜ヌスコヌドのテキストを zip ファむル化しおアップロヌドする蚘述になっおいたす。これでは動きたせん。 方針転換 なぜこの様な倱敗になったのかずいうず、CloudFormationの ZipFile プロパティは、倖郚ラむブラリを含めるこずができず、コヌドサむズにも制限がありたす。 AWS::Lambda::Function Code - AWS CloudFormation Changes to a deployment package in Amazon S3 or a container image in ECR are not detected automatically during stack upd... docs.aws.amazon.com たた、CloudFormation 䞊では Lambda関数のハンドラの含たれるモゞュヌル名を lambda_function ず定矩しおいるのですが、 index ずいう名前になるよ、ずいう泚意曞きもありたす。 (出来䞊がった Lambda関数で index.py ずなっおいるのはこの為です) 今回は1ファむルに収たる察象のデプロむではなく、耇数のモゞュヌルやラむブラリが必芁だったため、AWS SAM(Serverless Application Model、サヌバヌレスアプリケヌションを䜜成する際に最小限のコヌドで AWS Lambda 関数、Lambda の耐久性のある関数、Amazon API Gateway APIs、 Amazon DynamoDB テヌブル、およびその他のサヌバヌレスリ゜ヌスをすばやく定矩できる仕組み)によるパッケヌゞングが正解でした。 その他の案も含め、以䞋のような候補を考え、比范怜蚎したした。 案1: S3バケットを別途甚意しお、deploy.sh 内でそこに zip化した゜ヌスコヌド矀ずラむブラリを配眮し、そこからデプロむするように CloudFormationテンプレヌトを修正する。 案2: AWS CDK ぞ移行する。 案3: AWS SAM を䜿っお、CloudFormationテンプレヌトを修正する。SAMの機胜を䜿っお゜ヌスコヌド矀ずラむブラリをアップする。 案1は、S3バケットをこのために甚意しなければならないので、今回はパス。案2のCDKはせっかく䜜った CloudFormationテンプレヌトを党郚䜜り盎しになっお確認が倧倉そうなのでパス。案3の AWS SAM は S3 バケットは共通のものを甚意しおくれるし、zipファむル化もSAM偎でやっおくれるので䜙蚈な凊理が芁らなくなるし、テンプレヌトもスッキリする。他のリ゜ヌスの堎所はCloudFormationテンプレヌトのたたでいけるず思われるので、修正でいけそう、ずいう考えで案3のAWS SAM にするこずにしたした。 AWS SAMに぀いおはここでは詳现には玹介したせんが、詳しく知りたい方は以䞋をご参照ください。   AWS Serverless Application Model (AWS SAM) とは - AWS Serverless Application Model AWS Serverless Application Model (AWS SAM) ずは䜕か、たたデベロッパヌがサヌバヌレスアプリケヌションを構築するのに圹立぀方法に぀いお説明したす。 docs.aws.amazon.com   Kiro再び Kiroに、芁件倉曎の理由ず、CloudFormationからSAMに倉曎する旚を䌝えお、requirements、design、tasksの修正を䟝頌したす。 党郚が曞き盎されるのではなく、きちんず差分を理解しおいお、トレヌサビリティマトリクスを元に再実行必芁なタスクが掗いだされたした。 たたしおもタスク実行地獄です。 Task completeになったタスクを未実行に戻す方法がわからなかったので Kiro に聞いお戻しおもらいたした。 修正した箇所を芋るず、単玔にチェックボックス が [x] ずなっおいるのを [ ] にすれば良いようです。 Task 1を修正埌 AWS SAM cli をむンストヌルしお、 sam validate-template 、 sam build が通ったので、Task 11、12、13 ず再床実行したす。 実行埌、出来䞊がった SAMテンプレヌト を䜿甚しおデプロむするず、今床はlambda_function.py も ラむブラリ矀も含たれおいたす。   1時間に1回の実行の蚭定でデプロむしたので、暫く経぀ず Lambda 関数にログが出力されおいるはずです。Lambda関数の モニタリングから CloudWatch Logs を確認しおみるず… おお、キチンずログが出力されおいたした。Kiro スペックモヌドでは、ログに関しおもかなりバッチリ䜜っおくれたので、芋やすいログが出力されおいたす。 ちょっず興味があったので、Kiro に StructuredLogger の構成を Mermaid 図に起こしおもらったらこのようになっおいたした。 きちんず、センシティブな情報は SensitiveDataFilter でフィルタしおくれる凊理も実装されおいるようです。 「プロトタむプからプロダクションたでAgentic AI development from prototype to production」ず、いうキャッチフレヌズに恥じない䜜りですね。 初期蚭定ずしお 192.168.1.1 (プラむベヌトIPアドレスなので、Spamhaus には登録されない)を監芖察象ずしたので、 “is_listed” : false ず、期埅通りの実行結果です。 このアドレスを、詊しに Spamhaus SBLに登録されおしたった怜蚌に利甚できる 127.0.0.2 を蚭定したす。 「127.0.0.2」のテストIPに぀いお 「Spamhausがテスト甚に提䟛しおいる 127.0.0.2 を入力するこずで、実際にブラックリストに登録された際ず同じ挙動を安党にシミュレヌションできたす。」   Lambda関数の新しいバヌゞョンを発行しお、(ここではバヌゞョン2) Lambda関数の live ゚むリアス倀 を 1 -> 2 ぞ倉曎したす。 live のリンクからになったずころで、テストを実行すれば、Spamhausの SBL に登録されおしたったメヌルが来るはずです。  SNSからメヌルが来たした うたく䜜成できたようです   出来䞊がりむメヌゞ 出来䞊がったコヌドはかなりしっかりず䜜っおくれたこずもあり、すべおを この blog 䞊で乗せるこずができないような分量になっおしたした。 ですが、せっかくですので、アヌキテクチャ図ず、出来あがった SAM テンプレヌトを乗せおおきたす。 アヌキテクチャ図は Kiro に曞いおもらったものが党郚入りで混沌ずしおいたので、適床な範囲で分割したした。Mermaid蚘法 はテキストベヌスなので、分割したり修正したりが簡単なのが䟿利ですね SAM の デプロむアヌキテクチャ図 SBL Monitor のメむンアヌキテクチャ図 Lambda関数のアヌキテクチャ SAM テンプレヌト AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: 'Spamhaus SBL Monitor - Serverless monitoring system for IP addresses on Spamhaus Blocklist using SAM with automatic dependency packaging' Metadata:   AWS::CloudFormation::Interface:     ParameterGroups:       - Label:           default: "Monitoring Configuration"         Parameters:           - IPAddresses           - MonitoringInterval       - Label:           default: "Notification Configuration"         Parameters:           - NotificationEmail       - Label:           default: "Resource Configuration"         Parameters:           - ResourceNamePrefix           - CostAllocationTag     ParameterLabels:       IPAddresses:         default: "IP Addresses to Monitor"       MonitoringInterval:         default: "Monitoring Interval (hours)"       NotificationEmail:         default: "Email Address for Notifications"       ResourceNamePrefix:         default: "Resource Name Prefix"       CostAllocationTag:         default: "Cost Allocation Tag Name" Parameters:   IPAddresses:     Type: String     Description: 'Comma-separated list of IP addresses to monitor for SBL registration'     AllowedPattern: '^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(,\s*\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})*$'     ConstraintDescription: 'Must be valid IPv4 addresses separated by commas (e.g., 192.168.1.1,10.0.0.1)'     Default: '192.168.1.1'   MonitoringInterval:     Type: Number     Description: 'Interval in hours between SBL checks (1-24 hours)'     MinValue: 1     MaxValue: 24     Default: 1     ConstraintDescription: 'Must be between 1 and 24 hours'   NotificationEmail:     Type: String     Description: 'Email address to receive SBL detection notifications'     AllowedPattern: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'     ConstraintDescription: 'Must be a valid email address'   ResourceNamePrefix:     Type: String     Description: 'Prefix for all resource names (maximum 10 characters)'     MaxLength: 10     MinLength: 1     AllowedPattern: '^[a-zA-Z][a-zA-Z0-9-]*$'     ConstraintDescription: 'Must start with a letter and contain only alphanumeric characters and hyphens'     Default: 'sbl'   CostAllocationTag:     Type: String     Description: 'Value for the Cost allocation tag applied to all resources'     MinLength: 1     MaxLength: 256     AllowedPattern: '^([\p{L}\p{Z}\p{N}_.:\/=+\-@]*)$'     ConstraintDescription: 'Must contain only alphanumeric characters, spaces, periods, colons, slashes, equals, plus, hyphens, underscores, and at symbols'     Default: 'spamhaus-monitor' Globals:   Function:     Runtime: python3.13     MemorySize: 256     Timeout: 300     Environment:       Variables:         LOG_LEVEL: INFO     Tags:       Cost: !Ref CostAllocationTag       Application: 'Spamhaus-SBL-Monitor'     Tracing: Active     ReservedConcurrentExecutions: 5     AutoPublishAlias: live     DeploymentPreference:       Type: AllAtOnce # Stack-level tags applied to all resources (moved to Metadata section for SAM compatibility) Conditions:   IsSingleHour: !Equals [!Ref MonitoringInterval, 1] Resources:   # IAM Role for Lambda Function (Least Privilege)   SBLMonitorFunctionRole:     Type: AWS::IAM::Role     Properties:       RoleName: !Sub '${ResourceNamePrefix}-lambda-execution-role'       AssumeRolePolicyDocument:         Version: '2012-10-17'         Statement:           - Effect: Allow             Principal:               Service: lambda.amazonaws.com             Action: sts:AssumeRole       ManagedPolicyArns:         - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole         - arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess       Policies:         - PolicyName: SBLMonitorPolicy           PolicyDocument:             Version: '2012-10-17'             Statement:               - Effect: Allow                 Action:                   - secretsmanager:GetSecretValue                 Resource: !Ref DQSSecret               - Effect: Allow                 Action:                   - sns:Publish                 Resource: !Ref SBLNotificationTopic               - Effect: Allow                 Action:                   - logs:CreateLogGroup                   - logs:CreateLogStream                   - logs:PutLogEvents                 Resource: !Sub 'arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${ResourceNamePrefix}-sbl-monitor:*'       Tags:         - Key: Cost           Value: !Ref CostAllocationTag         - Key: Application           Value: 'Spamhaus-SBL-Monitor'         - Key: Component           Value: 'IAM-Role'   # Lambda Function for SBL Monitoring   SBLMonitorFunction:     Type: AWS::Serverless::Function     Properties:       FunctionName: !Sub '${ResourceNamePrefix}-sbl-monitor'       CodeUri: src/       Handler: lambda_function.lambda_handler       Runtime: python3.13       Role: !GetAtt SBLMonitorFunctionRole.Arn       Description: 'Monitors IP addresses for Spamhaus SBL registration and sends notifications with automatic dependency packaging'       Environment:         Variables:           IP_ADDRESSES: !Ref IPAddresses           DQS_SECRET_NAME: !Ref DQSSecret           SNS_TOPIC_ARN: !Ref SBLNotificationTopic       Events:         ScheduledMonitoring:           Type: Schedule           Properties:             Schedule: !If               - IsSingleHour               - 'rate(1 hour)'               - !Sub 'rate(${MonitoringInterval} hours)'             Name: !Sub '${ResourceNamePrefix}-sbl-monitor-schedule'             Description: 'Scheduled trigger for Spamhaus SBL monitoring with retry and error handling'             Enabled: true             RetryPolicy:               MaximumRetryAttempts: 3             DeadLetterConfig:               Arn: !GetAtt SBLMonitorDLQ.Arn       Tags:         Component: 'Lambda-Function'   # Dead Letter Queue for failed EventBridge executions   SBLMonitorDLQ:     Type: AWS::SQS::Queue     DeletionPolicy: Delete     UpdateReplacePolicy: Delete     Properties:       QueueName: !Sub '${ResourceNamePrefix}-sbl-monitor-dlq'       MessageRetentionPeriod: 1209600  # 14 days       Tags:         - Key: Cost           Value: !Ref CostAllocationTag         - Key: Application           Value: 'Spamhaus-SBL-Monitor'         - Key: Component           Value: 'SQS-DLQ'   # SNS Topic for SBL Notifications   SBLNotificationTopic:     Type: AWS::SNS::Topic     Properties:       TopicName: !Sub '${ResourceNamePrefix}-sbl-notifications'       DisplayName: 'Spamhaus SBL Detection Alerts'       KmsMasterKeyId: alias/aws/sns       DeliveryStatusLogging:         - Protocol: http/s           SuccessFeedbackRoleArn: !GetAtt SNSLoggingRole.Arn           FailureFeedbackRoleArn: !GetAtt SNSLoggingRole.Arn       Tags:         - Key: Cost           Value: !Ref CostAllocationTag         - Key: Application           Value: 'Spamhaus-SBL-Monitor'         - Key: Component           Value: 'SNS-Topic'   # IAM Role for SNS Delivery Status Logging   SNSLoggingRole:     Type: AWS::IAM::Role     Properties:       RoleName: !Sub '${ResourceNamePrefix}-sns-logging-role'       AssumeRolePolicyDocument:         Version: '2012-10-17'         Statement:           - Effect: Allow             Principal:               Service: sns.amazonaws.com             Action: sts:AssumeRole       Policies:         - PolicyName: SNSLogsDeliveryRolePolicy           PolicyDocument:             Version: '2012-10-17'             Statement:               - Effect: Allow                 Action:                   - logs:CreateLogGroup                   - logs:CreateLogStream                   - logs:PutLogEvents                   - logs:PutMetricFilter                   - logs:PutRetentionPolicy                 Resource: '*'       Tags:         - Key: Cost           Value: !Ref CostAllocationTag         - Key: Application           Value: 'Spamhaus-SBL-Monitor'         - Key: Component           Value: 'IAM-Role'   # Email Subscription to SNS Topic   SBLNotificationSubscription:     Type: AWS::SNS::Subscription     Properties:       TopicArn: !Ref SBLNotificationTopic       Protocol: email       Endpoint: !Ref NotificationEmail       FilterPolicy:         severity:           - CRITICAL           - WARNING       FilterPolicyScope: MessageAttributes       DeliveryPolicy:         healthyRetryPolicy:           numRetries: 3           minDelayTarget: 20           maxDelayTarget: 20           numMinDelayRetries: 0           numMaxDelayRetries: 0           numNoDelayRetries: 0           backoffFunction: linear   # Secrets Manager Secret for DQS Key   DQSSecret:     Type: AWS::SecretsManager::Secret     DeletionPolicy: Delete     UpdateReplacePolicy: Delete     Properties:       Name: !Sub '${ResourceNamePrefix}-dqs-key'       Description: 'Spamhaus Data Query Service (DQS) authentication key with encryption and access policies'       SecretString: |         {           "DQS_KEY": "CHANGE-YOUR-DQS-KEY-LATER"         }       KmsKeyId: alias/aws/secretsmanager       ReplicaRegions: []       Tags:         - Key: Cost           Value: !Ref CostAllocationTag         - Key: Application           Value: 'Spamhaus-SBL-Monitor'         - Key: Component           Value: 'Secrets-Manager'   # Resource Policy for DQS Secret (Least Privilege Access)   DQSSecretResourcePolicy:     Type: AWS::SecretsManager::ResourcePolicy     Properties:       SecretId: !Ref DQSSecret       ResourcePolicy:         Version: '2012-10-17'         Statement:           - Sid: AllowLambdaAccess             Effect: Allow             Principal:               AWS: !GetAtt SBLMonitorFunctionRole.Arn             Action:               - secretsmanager:GetSecretValue             Resource: '*'             Condition:               StringEquals:                 'secretsmanager:ResourceTag/Application': 'Spamhaus-SBL-Monitor' Outputs:   LambdaFunctionArn:     Description: 'ARN of the SBL Monitor Lambda function'     Value: !GetAtt SBLMonitorFunction.Arn     Export:       Name: !Sub '${AWS::StackName}-LambdaFunctionArn'   SNSTopicArn:     Description: 'ARN of the SBL Notification SNS topic'     Value: !Ref SBLNotificationTopic     Export:       Name: !Sub '${AWS::StackName}-SNSTopicArn'   SecretsManagerArn:     Description: 'ARN of the DQS Key secret in Secrets Manager'     Value: !Ref DQSSecret     Export:       Name: !Sub '${AWS::StackName}-SecretsManagerArn'   DeadLetterQueueUrl:     Description: 'URL of the Dead Letter Queue for failed executions'     Value: !Ref SBLMonitorDLQ     Export:       Name: !Sub '${AWS::StackName}-DeadLetterQueueUrl'   MonitoringConfiguration:     Description: 'Summary of monitoring configuration'     Value: !Sub 'Monitoring ${IPAddresses} every ${MonitoringInterval} hours, notifications to ${NotificationEmail}'   おわりに Spamhaus に登録されおしたったら通知する仕組みをサヌバレスで䜜成したした。 Kiro が䜜成しおくれたコヌドは、分量の関係で党お公開はできたせんでしたが、しっかりずした構成で凊理を蚘茉しおくれおいたしたし、アヌキテクチャ図やログ出力の䞁寧な䜜りは玍埗の出来でした みなさんも良い ダむレクトメヌル管理生掻を
こんにちは、SCSKで テクニカル゚スコヌトサヌビス を担圓しおいる兒玉です。 前回途䞭だった Spamhaus に登録されおしたったら通知する仕組みの実装を進めたす。 本蚘事䞭線では、実装完了たでを解説したす。 タスクの確認 前回、蚭蚈ドキュメントずしお䜜成したアヌキテクチャ図です。こんな感じで考えおいたした。 Kiro が䜜成しおくれたタスクは倧項目 14 項目、小項目も合わせるず䜕ず 56 項目ありたす。”*”の぀いおいる項目は optional で 21項目あるのでそれを匕いおも 35 項目もあるわけなので、テキパキず進めおゆきたす。 - [ ] 1. Set up project structure and core interfaces - [ ] 2. Implement DNS query and SBL checking functionality - [ ] 2.1 Implement DNS query module with nslookup functionality - [ ]* 2.2 Write property test for DNS query format compliance - [ ] 2.3 Implement SBL response interpretation - [ ]* 2.4 Write property test for DNS response interpretation - [ ] 3. Implement AWS Secrets Manager integration - [ ] 3.1 Create DQS key retrieval module - [ ]* 3.2 Write property test for secure DQS key retrieval - [ ]* 3.3 Write unit tests for Secrets Manager error handling - [ ] 4. Implement IP address processing and monitoring logic - [ ] 4.1 Create IP configuration parser - [ ]* 4.2 Write property test for IP configuration storage - [ ] 4.3 Implement sequential IP processing with timing - [ ]* 4.4 Write property test for sequential processing with timing - [ ]* 4.5 Write property test for complete IP monitoring - [ ] 5. Checkpoint - Core functionality validation - [ ] 6. Implement SNS notification system - [ ] 6.1 Create notification message formatter - [ ]* 6.2 Write property test for comprehensive notification content - [ ] 6.3 Implement SNS publishing with error handling - [ ]* 6.4 Write property test for SBL detection notification - [ ]* 6.5 Write property test for SNS failure resilience - [ ] 7. Implement duplicate detection prevention - [ ] 7.1 Create SBL detection state management - [ ]* 7.2 Write property test for duplicate detection prevention - [ ]* 7.3 Write property test for notification consolidation - [ ] 8. Implement comprehensive error handling and logging - [ ] 8.1 Create structured logging system - [ ]* 8.2 Write property test for structured logging with context - [ ] 8.3 Implement rate limiting and retry logic - [ ]* 8.4 Write property test for rate limiting handling - [ ]* 8.5 Write property test for sensitive information protection - [ ] 9. Create main Lambda handler - [ ] 9.1 Implement main lambda_handler function - [ ]* 9.2 Write property test for SBL detection recording - [ ]* 9.3 Write integration tests for complete workflow - [ ] 10. Checkpoint - Lambda function validation - [ ] 11. Create CloudFormation template - [ ] 11.1 Create base CloudFormation template structure - [ ] 11.2 Define Lambda function resources - [ ] 11.3 Define EventBridge scheduler resources - [ ] 11.4 Define SNS topic and subscription resources - [ ] 11.5 Define Secrets Manager resources - [ ] 11.6 Define IAM roles and policies - [ ] 11.7 Implement resource tagging and naming - [ ] 12. Create deployment scripts and documentation - [ ] 12.1 Create CloudShell deployment script - [ ]* 12.2 Write deployment validation tests - [ ] 12.3 Create deployment documentation - [ ] 13. Final integration and validation - [ ] 13.1 Deploy and test complete system - [ ]* 13.2 Write property tests for configurable scheduling - [ ]* 13.3 Write property tests for execution failure resilience - [ ]* 13.4 Write remaining property tests - [ ] 14. Final checkpoint - Complete system validation Keep optional tasks(faster MVP) を䜿っおずにかく䞀通り䜜っおしたうこずにしたす。 Kiroの巊䞊の Explorer アむコン → .kiro/specs/<プロゞェクト名>/task.md をクリックしお tasks.md を開きたす。 タスクリストが衚瀺されたす。 既に完了したタスクは チェックマヌクず、Task completed衚瀺、Optionalのタスクは グレヌ衚瀺、ただ実行しおいないTaskは 癜衚瀺されおいたす。 各タスクの巊䞊の ⚡ Start task をクリックするずタスクが開始したす。 タスクを進めおいるず、Kiro からコマンド実行の蚱可を求められるので、問題のないコマンドかどうか確認しながら蚱可を䞎えおゆきたす。䞀぀䞀぀のタスクは小さくずも、数が倚いずなかなか終わりたせん。疲れをしらない生成AIに察しお実行の様子を芋ながら蚱可を䞎えたり䜕床も同じ凊理を行うような状態で詰たっおしたった堎合にアドバむスをしたりするこちらのほうがぞばっおきおしたうくらいです。 Kiro ず栌闘するこず 6 時間、ようやくコアタスクがすべお終了したした。タスクを進める䞭で気づいたコツは、 Kiroの提案を鵜呑みにしすぎないこず です。 詰たっおしたった堎合には、以䞋のような具䜓的な指瀺を出すのが早期解決の近道でした 「状況が詳现にわかるようにデバッグ文を远加しおください」 「この゚ラヌの原因を掎めそうな調査凊理を远加しおください」 たさに、AIを「郚䞋」ずしお適切にリヌドする感芚ですね。 README.mdのアップデヌト タスクによる䜜業䞭に、詳现なコマンドの実行パラメヌタ等が定矩されたり、䞍具合で修正されたり、途䞭仕様倉曎でパラメヌタ远加が必芁ずなったりで、圓初に䜜成したドキュメントずは違った圢になっおいるこずもありたすので、 README.md を珟圚の圢にアップデヌトするように Kiro にお願いしたす。 これで、環境にデプロむする準備が敎いたした。 デプロむ コヌドは曞き䞊がっお、単䜓、結合テストも成功したものの、実際に動䜜するかは別です。 これだけ䞁寧に怜蚎しおタスクを分けおも実環境で動䜜を確認しおいるわけではないのでどうしおも䞍具合は発生しおしたいたす。 曎新された README.md ファむルを元にデプロむしたす。 環境倉数たたは匕数にパラメヌタを入れお、 ./deploy.sh を実行 成功したした 実行時のログを芋るず、スクリヌンショットでは途䞭切れおいたすが必芁なリ゜ヌスはデプロむされたように芋えたす。 スクリプトの指瀺に埓っお、Secrets Manager の キヌず、SNSのSubsctiptionの承認を行いたす。 Secrets Manager の Secret 倀を Spamhaus から取埗したキヌに眮き換える メヌルを確認しお Subscriptionを承認する サブスクリプションのステヌタスが “確認枈み” になればOK これで準備完了です。 今回はここたで。 次回は、動䜜確認ず修正を行いたす。
こんにちは、SCSKで テクニカル゚スコヌトサヌビス を担圓しおいる兒玉です。 自瀟のサヌビスの情報などを メヌルで配信されおいる方はかなり倚いのではないでしょうか。 そんな メヌル 配信をお仕事の䞀郚ずされおいる人の悩みの䞀぀が、自瀟の配信システムがSPAM配信者ずしおマヌクされおしたっお配信䞍胜になっおしたうこずです。 もちろんそこに登録されないように䞍達メヌルを投げないようにメヌリングリストの察象をメンテナンスしたり、DKIM、DMARCなどの仕組みを導入したりはもちろん行っおいるず思いたすが、その䞊でもどうしおも登録されおしたった堎合に気が付けないず䜕のアクションも取るこずができたせん。毎日人手を぀かっお確認するのも倧倉なので、AWSで自動化しおみようずいうこずにしたした。 本蚘事前線では、生成AIを掻甚しお芁件定矩から蚭蚈、実装蚈画を立おるたでを解説したす。 事前調査 自分のIPアドレスが、Spamhaus の SBL (Spamhaus Blocklist) に登録されおいるかどうかは誰でも確認できたす。 Attention Required! | Cloudflare check.spamhaus.org ※商甚利甚には、Fair Use Policyに基づくラむセンスが必芁です。 Spamhaus DNS Blocklists Fair Use Policy www.spamhaus.org   調査を進めお行っお、わかったこずをファむルに雑倚にたずめおいきたす。  Kiro に芁求を䌝える たずめたファむルず、それを敎理しおやっおほしいこず、䜿っおもらいたい蚀語や環境を敎理したす。 # Spamhaus に登録されおいる堎合に通知をする仕組みをAWSサヌバレスで構築 ## 目的 ダむレクトメヌル送信サヌビスを運営しおいたす。 Spamhausずいうスパムメヌルが送信されおくる IP アドレスなどのリストを管理しおいる団䜓があるのですが、その団䜓が管理しおいるSBL (Spamhaus Blocklist) に自分のIPアドレスが登録されおしたった堎合には、email に通知が来るようにしたいです。 ## 仕様芁件 調査は簡単にか぀安䟡に行いたいので、EventBridge で定期的(1時間に䞀回, パラメヌタで倉曎可胜)に自分の䜿甚しおいる IP アドレス(耇数)を Lambda 関数を䜿甚しお nslookup コマンドを䜿甚しお SBL (Spamhaus Blocklist) からの応答を確認しお、登録されおいる堎合には Amazon SNS 経由で email で管理者に通知するシステムを構築したす。 - Lambda関数の蚀語は Python 3.13 ずしたす。 - CloudFormationを䜿甚しおデプロむしたす。 - CloudShell からデプロむしたす。 - 䜜成されるリ゜ヌスのうち、タグ付け可胜なリ゜ヌスにはコスト配分タグずしお Cost: <指定されたコスト配分タグ名> を付けたす。 - 問い合わせに必芁な Spamhaus から払い出されるDQSキヌ(Data Query Service Key 、サヌビスぞのク゚リが誰からのものか特定するキヌのようなもの、文字列)は Secrets Manager から取埗する  - CloudFormation テンプレヌトでは、Secrets ManagerのString倀ずしおは "CHANGE-YOUR-DQS-KEY-LATER" ずしお䜜成し、デプロむ埌別途倉曎するこずずする。 - パラメヌタずしお以䞋の倀を指定したす - IP アドレス(単数あるいは耇数) - 調査間隔 n 時間間隔(時間単䜍、デフォルトは1時間間隔) - リ゜ヌスの タグ名 Cost に぀ける コスト配分タグ名> - リ゜ヌスのNameタグの Prefix ずしお付䞎される prefix (10文字以内-長いず制玄に匕っかかっお゚ラヌになるリ゜ヌスが出るため) DNS問い合わせの仕組みなので倧䞈倫だず思いたすが、連続しお問い合わせを行うずこちらがスパマヌ認定されおしたっおは困るので、耇数IPアドレスに察する問い合わせの堎合には 1秒 埅ちを入れるこずにしたす ## DQS Keyの圢匏 abcdefghijklmnopq123456789 のような圢匏です。 ## DQS Keyを䜿甚した問い合わせ nslookup [逆順IP].[DQS_KEY].[リスト名].dq.spamhaus.net ですが、今回は SBL(Spamhaus Blocklist)が察象なので、 ```bash nslookup [逆順IP].[DQS_KEY].sbl.dq.spamhaus.net ``` ずなりたす。 ### サンプル応答 #### OK応答䟋(SPAM IPず刀定されおいない) ```bash $ nslookup 109.62.249.54.[DQS_KEY].sbl.dq.spamhaus.net Server: 127.0.0.53 Address: 127.0.0.53#53 ** server can't find 109.62.249.54.[DQS_KEY].sbl.dq.spamhaus.net: NXDOMAIN ``` #### NG応答䟋(SPAM IPず刀定されおいる) ```bash $ nslookup 2.0.0.127.[DQS_KEY].sbl.dq.spamhaus.net Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: Name: 2.0.0.127.[DQS_KEY].sbl.dq.spamhaus.net Address: 127.0.0.2 ``` ## ブロックのリタヌンコヌド 各ブロックリストのリタヌンコヌド SpamhausのDNSBLでは、異なるリストに察しお異なるリタヌンコヌドが䜿甚されたす リスト リタヌンコヌド 意味 SBL 127.0.0.2 スパム送信源 CSS 127.0.0.3 䜎評䟡送信者 XBL 127.0.0.4-127.0.0.7 乗っ取られたホスト PBL (ISP提䟛) 127.0.0.10 ISPが提䟛したポリシヌリスト PBL (Spamhaus) 127.0.0.11 Spamhausが掚定したポリシヌリスト DROP 127.0.0.9 悪意のある組織SBLず䜵甚 # 参考資料 spamhaus_pre_survey.ini に、事前調査した結果を配眮したした。 このテキストを、Kiro に䌝えたす。Spec Mode を遞択するのを忘れずに。 しばらく考えお、芁件ドキュメント(requirements.md)を䜜成しおくれたす。甚語集も䜜成しおくれるのが初めおこのドキュメントを芋るこずになる人にずっおは嬉しいのず、日本のシステムの仕様曞などにはあたり曞かれない ナヌザヌストヌリヌ が曞かれおいるのが嬉しいですね。これは誰がどうしたいためのシステムだずわかりやすく、たた、埌日芋たずきに ”この機胜は䜕のために入っおるんだっけ” ずいう刀断をする際にも有甚です。 英語で䜜成しおくれたすが、LLMなので、日本語に翻蚳しおもらうこずもできたす。せっかくなので別ファむルで翻蚳もしおもらいたした。 英語ず日本語の requirements を芋比べおいお気が付きたした。英語の方は WHEN …, The System SHALL … ずいう圢匏になっおいお、やるこず、誰が、どんなずきにするのかわかりやすい気がしたす。日本語でもその蚳文なので、…のずきシステムは…しなければならない ずなるのですが、蚘法を瞛らない限り日本語では䞻語がなくおも違和感がないので、勘違いしないように読むのはなかなか倧倉なこずもありたすが、蚘法がはっきりしおいる英語版のほうがわかりやすいかもしれたせん。あず、 “SHALL” “WHEN” “THE System” が倧文字になっおいお芋やすいんです。 無理やり日本語でも䜿おうずすれば、 WHEN レヌトリミット超過が発生したら, システム SHALL exponential backoff ロゞックでリトラむする。 ずかにするか、”のずき” “システムは” “しなければならない”を倪字にするずかでしょうか。日本語だず少し䞍自然な衚珟になるこずもありたすが、構造を理解するには英語版の方が適しおいるず感じたした。 芁件ドキュメントをレビュヌしお、OKなら、Move to Design phase ボタンで次に進みたす。 蚭蚈ドキュメントの䜜成 芁件ドキュメントから、Kiro が 蚭蚈ドキュメント(Design.md)を䜜成しおくれたす。 蚭蚈ドキュメントでは、テキストベヌスで図を蚘茉する事のできる Mermaid 蚘法ずいう蚘法でアヌキテクチャ図を蚘述しおくれたす。 Kiro に Markdown Mermaid 図の preview 機胜拡匵を远加しお preview するこずで図ずしお衚瀺しおみるこずができたす。 テキストだけの説明だずこの図を頭に浮かべるのは難しいので、Mermaid図化しおくれるのありがたいですね これを芋るだけでわかった気になれたす。 蚭蚈ドキュメント(design.md) を芋お足りないず思ったずころがあれば、远加を指瀺したす。問題なければ Move to implementation plan ボタンで次の工皋に進みたす。 蚭蚈ドキュメントを元に、実装蚈画(tasks.md) を䜜成しおくれたした。 ここでは、 コア郚分のみのタスクを実装するか、党タスクを順に実装しおいくのかを遞択できたす。 党タスクの実行にはそれなりに時間がかかるので、さっず䜜りたいずきはコア郚分のみ(Keep optional tasks(faster MVP))を遞択したす。 埌から党郚実行したり個別に実行したりもできるので、この時点でどちらか決たっおしたうずいうわけではありたせんので安心しおください。   今回はここたで。