Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goで作成したコンテナ形式のLambdaに New Relicを導入する際の備忘録
Search
imkaoru
March 11, 2025
Programming
33
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goで作成したコンテナ形式のLambdaに New Relicを導入する際の備忘録
imkaoru
March 11, 2025
More Decks by imkaoru
See All by imkaoru
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
5
1.9k
Other Decks in Programming
See All in Programming
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
210
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.6k
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
0
140
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
810
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
18k
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
480
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
170
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
130
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
150
What's New in Android 2026
veronikapj
0
250
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
750
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.7k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Designing Powerful Visuals for Engaging Learning
tmiket
1
470
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
420
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Skip the Path - Find Your Career Trail
mkilby
1
180
Thoughts on Productivity
jonyablonski
76
5.3k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
Designing for Performance
lara
611
70k
Everyday Curiosity
cassininazir
0
270
Transcript
Goで作成したコンテナ形式のLambdaに New Relicを導入する際の備忘録 2025/03/11 Fukuoka.go#21 なんと10周年 @imkaoru
自己紹介 ディップ株式会社 / バイトルアプリAPIチーム所属 社会人もうすぐ3年目のサーバーサイドエンジニア : ) Goのすきなところ:後方互換性 / 明示的で可読性が高い
/ 標準ライブラリが充実 福岡歴:大学から。一旦東京で社会人して昨年9月に戻ってきました! Qiita:@imkaoru / Kaoru Sato 佐藤 薫
Agenda 背景 Lambda拡張を⼊れてみた GoAgentも組み込む 所感
背景 01
新規開発したとあるバッチの話です 背景 使⽤技術 Lambda(コンテナ形式) Go ※⼀部リソースは省略
今回は入れた監視周りのお話をします 背景 ※ 一部リソースは省略 使用技術 Lambda(コンテナ形式) Go
実現したい「監視要件」 背景 処理の成功・失敗がわかるように New Reli cにログを出力する そのほかのテレメトリデータは、 大きいシステムでないため不要 できれば、 コストの面で
CloudWatchを介さず実現したい ログ取り込みやデータ転送に関 する課金を回避させたい ※ 一部リソースは省略
簡単に導入できるので、ぜひ!! 背景 今回の構成で監視要件を実現するまでの 流れを時系列で書いてみました 一部詰まったポイントがありましたが 「簡単に導入できる」ので、ぜひご参考 にして頂けますと嬉しいです 😊 ※ 一部リソースは省略
Lambda拡張を ⼊れてみた 02
newrelic-lambda-extention Lambda拡張を⼊れてみた サーバレス環境に最適化された NewRelicの拡張レイヤー CloudWatchを介さずにログ転送 可能 レイヤー+Lambda環境変数だけ で簡単に導⼊できる 【出典:Containerizedinstrumentation(https://docs.newrelic.com/docs/)】
2.Lambda環境変数 Lambda拡張を⼊れてみた NEW_RELIC_ACCOUNT_ID アカウントID NEW_RELIC_LICENSE_KEY_SECRET SecretsManagerのシークレット名 NEW_RELIC_EXTENSION_SEND_FUNCTION _LOGS ロギングの有効化 1.Dockerfile
FROMpublic.ecr.aws/newrelic-lambda- layers-for-docker/newrelic-lambda- layers-lambdaextension:x86aslayer ランタイムと互換性のあるレイヤーを追加 COPY--from=layer/opt//opt/ 実⾏⽤コンテナにコピーする CMD[ /opt/extensions/newrelic- lambda-extension ] Lambdaの実⾏と並⾏して動作させる
Lambda拡張を入れてみた New Rel icに ログが出力できていることを確認 🎉
Lambda拡張を入れてみた New Rel icに ログが出力できていることを確認 🎉 ・・・!?
Lambda拡張を入れてみた New Rel icに ログが出力できていることを確認 🎉 ・・・!? でも、あれ? Lambda実行が終わらない 😇
発⽣した問題 Lambda拡張を⼊れてみた ログは出⼒されるものの、設定したタイムアウト上限時間まで実⾏が 終了されない≒不要な課⾦時間が発⽣してしまう 例えば、タイムアウト上限時間を5分に設定していたとして、処理 ⾃体は15秒で終わっていたとしても5分経つまで実⾏が続く タイムアウトエラーになるわけではなく、正常終了はする 終了のシグナルがない場合は拡張レイヤーが待機し、実際にタイ ムアウトする前に必要なクリーンアップを⾏うため
発生した問題 Lambda拡張を入れてみた ログは出力されるものの、設定したタイムアウト上限時間まで実行が 終了されない ≒ 不要な課金時間が発生してしまう 例えば、タイムアウト上限時間を5分に設定していたとして、処理 自体は15秒で終わっていたとしても5分経つまで実行が続く タイムアウトエラーになるわけではなく、正常終了はする 終了のシグナルがない場合は拡張レイヤーが待機し、実際にタイ
ムアウトする前に必要なクリーンアップを行うため そこでNew Relicに 問い合わせしてみました 🥲
GoAgentも組み込む 03
Go Agentも組み込む 結論としては、 「Extensi onのLayer導入のみが実施されており Agentが組み込まれていないことが原因で 期待通りに動作していない ものと思われる」 旨の回答をいただきました 🫡
↓↓↓ GoAgentも組み込む
追加した記述 GoAgentも組み込む nrlambda.ConfigOption() NewRelicエージェント固有の設定を⾏う サーバレスモードやトレーサーの有効化など nrlambda.Start(handler.HandleRequest,app) 適切にトランザクション管理がされるようになる それにより、処理の終了と共に実⾏が終了するようになった!!
ついでに、ログをエンティティに紐付ける Go Agentも組み込む
Go Agentも組み込む
Go Agentも組み込む
Go Agentも組み込む
Go Agentも組み込む O K ! ! 🎉
所感 04
所感 結果的には 「レイヤー + Lambda環境変数 + mai n関数に記述追加」 だけで簡単に導入できた 😊
ただ、結構ドキュメントや情報が点在していて苦戦する場面も.. CloudWatchと比較したときに、もし システムの拡張に合わせてメト リクスやトレースもいい感じにしたい! だったり 柔軟なアラート設定 したい! となった場合に 実現の幅が大きいことも嬉しい 😌 またログについては slog のLogs i n Contextに対応してたりする
参考にさせていただいたDocsたち 🙏 Introduction to AWS Lambda monitoring Containerized instrumentation Environment
variables for AWS Lambda CloudWatch Logsを介さずにLambdaのテレメトリを行うnewrelic-lambda- extensionとその仕組み SDK based instrumentation > Go Go agent configuration v3/integrations/nrlambda Log event data
ThankYou! ご清聴いただきありがとうございました!