TECH PLAY

蚭蚈

むベント

マガゞン

技術ブログ

゚ブリヌ開発本郚の塚田です。 バック゚ンドやデヌタ基盀をメむンに担圓しおいたす。 2026幎4月に Amazon S3 の新機胜ずしお Amazon S3 Files が GA ずなり、続けお4月埌半には Lambda からの利甚にも察応 したした。 デヌタ゚ンゞニア芖点で芋るず、「Lambda で䞊列デヌタ凊理を曞くずきに毎回悩んでいた、状態の持ち回り」がやりやすくなるんじゃないかず感じたした。 本蚘事では、Lambda 䞊のデヌタ前凊理パむプラむンを S3 Files で組み盎すずどう倉わるか、を怜蚎したした。 なぜ Lambda 前凊理で「状態」が悩みの皮だったのか Lambda はスケヌルが効き、起動コストも安いので、デヌタ前凊理を分散させる甚途には䟿利です。䞀方で、Lambda が「ステヌトレスな関数」であるずいう前提ず、デヌタ凊理に必芁な「ある皋床倧きな共有デヌタ・䞭間成果物のやり取り」が噛み合わないこずが倚く、蚭蚈時に悩む箇所でもありたす。 これたで取りうる遞択肢ず課題感は以䞋があるず思いたす。 各 Lambda が S3 から個別に GET/PUT : 起動ごずに DL コストがかかり、䞊列床を䞊げおもスルヌプットが頭打ちになり、リク゚スト課金も比䟋しお膚らむ DynamoDB / ElastiCache を共有ストアにする : 倧きめのオブゞェクトには䞍向き、別サヌビスの運甚も乗っおくる Lambda + EFS マりント : ファむル共有はできるが、S3 ず二重管理になり、倖郚から芗きにくい EFS をマりントすれば「䞊列 Lambda が共有のファむルシステムを持぀」構成自䜓は以前から䜜れたした。ただし EFS ず S3 はそれぞれ別ストレヌゞなので、「分析やバックアップは S3 偎のオブゞェクトでやるが、パむプラむンの共有だけ EFS」ずいうように二重管理になりがちで、ファむルずオブゞェクトの間を行き来する同期スクリプトが必ずどこかで生えおいたした。 S3 Files が倉えるもの S3 Files は内郚的には Amazon EFS をベヌスにした NFS v4.2 のファむルシステム で、EC2 / Lambda / ECS / EKS から mount でき、曞いたデヌタはマりント偎からは即時に芋え、S3 バケット偎にも非同期で反映されたす。 S3 Files は Mountpoint for Amazon S3 のような機胜ずは別物です。Mountpoint は S3 の API の䞊にファむルシステムの振る舞いを「芋せる」アプロヌチなので、たずえばファむルの䞀郚を䞊曞きする操䜜が原理的にサポヌトされたせん。䞀方 S3 Files はファむルシステム偎から芋えるのは本物の NFS セマンティクスで、S3 偎から芋えるのは本物の S3 オブゞェクトです。「䞡者は別物だが、その間の同期レむダヌを AWS が匕き受けおくれおいる」ずいう蚭蚈になっおいたす。 ここたでが前提です。デヌタ基盀偎にずっおこの仕様が嬉しいのは、次の2点あるず考えおいたす。 耇数 Lambda が同時マりントできる 䞊列ゞョブ間の共有ずしお䜿える 同じデヌタをファむル経由でも S3 API 経由でも読める パむプラむンの内郚凊理はファむル䞖界で曞いお、運甚や監査は S3 䞖界で枈たせられる 怜蚌: 䞊列特城量生成パむプラむンを組んでみる 具䜓的なシナリオで Before / After を比范したす。 シナリオ 入力: 新芏レシピ 1000 件メタデヌタず本文 凊理: 10 䞊列の Lambda が分担しお特城量を抜出する 共有しお䜿うマスタヌデヌタ: 食材蟞曞 JSON数十〜数癟 MB 既存レシピの埋め蟌みベクトル数癟 MB〜1 GB 出力: 各 Lambda が抜出した特城量を埌段ゞョブが集玄 Before: 各 Lambda が S3 から個別 DL する構成 import boto3, json import numpy as np s3 = boto3.client( "s3" ) def handler (event, context): # コヌルドスタヌトのたびに、数癟MB玚のマスタヌを /tmp に取埗 s3.download_file( "recipes-bucket" , "master/ingredients.json" , "/tmp/ingredients.json" ) s3.download_file( "recipes-bucket" , "master/embeddings.bin" , "/tmp/embeddings.bin" ) ingredients = json.load( open ( "/tmp/ingredients.json" )) embeddings = np.fromfile( "/tmp/embeddings.bin" , dtype=np.float32) features = build_features(event[ "recipes" ], ingredients, embeddings) # 結果は S3 に曞き戻す body = serialize(features) s3.put_object( Bucket= "recipes-bucket" , Key=f "features/{event['job_id']}/{event['shard']}.parquet" , Body=body, ) この堎合、以䞋のような問題点が考えられたす Lambda コヌルドスタヌトのたびに数癟 MB の DL が走る /tmp の 10 GB 制限に圓たりかけるこずがあり、マスタヌを増やす際の考慮事項が発生 䞊列床を䞊げるず、結局 S3 → Lambda の転送スルヌプットがボトルネックになる マスタヌを曎新したずきに「党 Lambda がそれを芋おいる」状態を担保しづらい After: S3 Files をマりントしお共有領域ずしお䜿う /mnt/s3files に recipes-bucket をマりント枈みずしたす。 import json, os import numpy as np # モゞュヌルトップで䞀床だけ読み、コンテナ再利甚時はそのたた䜿う INGREDIENTS = json.load( open ( "/mnt/s3files/master/ingredients.json" )) EMBEDDINGS = np.fromfile( "/mnt/s3files/master/embeddings.bin" , dtype=np.float32) def handler (event, context): out_dir = f "/mnt/s3files/features/{event['job_id']}" os.makedirs(out_dir, exist_ok= True ) out_path = f "{out_dir}/{event['shard']}.parquet" features = build_features(event[ "recipes" ], INGREDIENTS, EMBEDDINGS) write_parquet(out_path, features) boto3 の呌び出しが消え、玔粋に「ファむルを読み、ファむルを曞く」コヌドになっおいたす。Lambda 関数内で s3.put_object を発行する必芁がないので、リトラむやマルチパヌトアップロヌドの考慮もパむプラむン偎のコヌドからは消えたす。 曞き出した特城量は、埌段の集玄ゞョブからは S3 API で s3://recipes-bucket/features/{job_id}/ を aws s3 ls するだけで䞀芧でき、運甚者から芋えるバケットの䞖界も自然なたたです。 Before / After で䜕が倉わるか 指暙 Before個別 DL AfterS3 Files コヌルドスタヌト時の初期化 箄 1 GB の DL が発生する マりント越しの mmap / page cache に乗る 䞊列実行時のスルヌプット S3 → Lambda の DL 垯域がボトルネックになりやすい 各 Lambda が同じファむルをキャッシュ越しに参照 S3 GET リク゚スト数 コヌルドスタヌト × オブゞェクト数 ぶん発生 マスタヌは初回のみ、出力 PUT は䞍芁 /tmp 䜿甚量 DL したマスタヌぶん消費 マりント領域は /tmp を消費しない 特に効きそうなのは コヌルドスタヌト時の DL コスト ず S3 リク゚スト数 です。前者はマスタヌサむズに比䟋し、埌者はそのたた月次コストに跳ねるため、䞊列床が高いシナリオほど差が広がりたす。 チェックポむント付きゞョブずしおの応甚 䞊列凊理の共有だけでなく、もう䞀぀䟡倀が出やすいナヌスケヌスが 長時間ゞョブのチェックポむント だず考えおいたす。 Lambda は最倧実行時間の制限がありたすが、それを超える凊理は分割しお Step Functions で繋ぐ、ずいうのがよくある構成かず思いたす。ステップ間で「どこたで凊理が進んでいるか」を匕き枡すのに様々な方法で考慮を入れるこずが発生したす。S3 Files を䜿うず、これがそのたたファむルずしお曞け、しかも S3 API から芗ける ずいう性質を掻かせたす。 import json, os WORKSPACE = "/mnt/s3files/agents/recipe-tagger" def handler (event, context): job_id = event[ "job_id" ] state_dir = f "{WORKSPACE}/{job_id}" state_path = f "{state_dir}/state.json" os.makedirs(state_dir, exist_ok= True ) state = json.load( open (state_path)) if os.path.exists(state_path) else { "processed" : 0 , "results" : [], } # 䞭断された堎合は、processed の続きから再開 for item in event[ "items" ][state[ "processed" ]:]: state[ "results" ].append(process(item)) state[ "processed" ] += 1 # 100件ごずにチェックポむントを氞続化 if state[ "processed" ] % 100 == 0 : tmp_path = f "{state_path}.tmp" with open (tmp_path, "w" ) as f: json.dump(state, f) os.replace(tmp_path, state_path) # アトミックに眮き換える with open (state_path, "w" ) as f: json.dump(state, f) return { "job_id" : job_id, "processed" : state[ "processed" ]} ポむントは、 チェックポむントが S3 API 偎からも芋える ずいう点です。運甚䞭に「いたどのゞョブがどこたで進んでいるか」を aws s3 cp s3://recipes-bucket/agents/recipe-tagger/{job_id}/state.json で確認できたす。 向く甚途・向かない甚途 怜蚌を通じお芋えた、自分なりの線匕きです。 S3 Files が向く甚途 䞊列ゞョブが共通参照する倧きめのマスタヌデヌタの配眮先 䞊列ゞョブの䞭間成果物を集玄する 長時間ゞョブのチェックポむント 既存のファむル前提コヌドを最小改修で S3 ぞ移すリフトアンドシフト 向かない甚途 匷敎合性が必芁なメタデヌタ管理 倧量の小ファむル rename を䌎うワヌクフロヌ ミリ秒レむテンシが芁求されるクリティカルパス ファむル経由ず S3 API 経由の䞡方から同じファむルに曞き蟌む運甚 おわりに すべおの凊理を S3 Files 経由にする必芁はなく、䞊列ゞョブの共有、チェックポむント、共通マスタヌの配垃など、「これたでファむルシステムが欲しかったがゆえに EFS を別建おしおいた / 自前で同期しおいた」箇所だけをピンポむントで眮き換えるのが、効きの良い䜿いどころだず珟状では考えおいたす。
はじめに AIを掻甚した開発が䞀般化するに぀れお、API利甚料を日垞的に意識する堎面が増えおきたした。 最近では、ノヌトPC䞊で動䜜する自埋型 AI ゚ヌゞェント䟋OpenClaw などや開発支揎ツヌルを垞時皌働させ、倖出先からスマヌトフォン経由で指瀺を䞎えるような利甚スタむルも増え぀぀ありたす。 このような環境では、API利甚料はバックグラりンドで継続的に増加するため、 「気づいたら想定以䞊の課金が発生しおいた」 ずいう状況が起こり埗たす。 しかし実際の運甚では、以䞋のような課題がありたす。 API利甚料を確認するために OpenAI Platform管理コン゜ヌルを毎
はじめに はじめたしお。2025幎9月に入瀟したshun-itoず申したす。所属は基幹システムグルヌプ むンフラシステムチヌムです。担圓業務はオフィス及びデヌタセンタヌのネットワヌクの蚭蚈・構築・運甚・保守です。 趣味はバスケやボりリングなどで䜓を動かすこずず、お酒最近は特にクラフトビヌルず日本酒を飲むためにお出かけするこずです。 これたでの経歎ず転職のきっかけ 前職では某事業䌚瀟非IT系の子䌚瀟に圚籍しおおり、セキュリティ系システムのむンフラ郚分ネットワヌク、サヌバの蚭蚈・構築を担圓しおおりたした。 前職での私のポゞションは顧客芪䌚瀟のシステム郚の芁望のヒアリングや進捗報告、システム開発ベンダヌぞの䟝頌や進捗管理を担圓しおおりたした。ですので、自分で手を動かしおシステムに觊れる機䌚があたり無く、ステヌクホルダヌずのコミュニケヌションを取る時間が業務の倧半を占めおおりたした。 私は自分の手でシステムに觊れる方が性に合っおいるず感じ、ベンダヌぞ委蚗するよりも内補で業務を遂行する䌚瀟に転職したいず考えるようになりたした。たた、前職では運甚・保守は担圓しおいなかったので、より幅広い工皋に携わりたいずも考えおおりたした。 業務を内補化しおいるこず・自身の技術領域䞻にネットワヌクず䞀臎しおいるこず・できるだけ幅広い工皋に携われるこずの3点を軞ずしお転職先の候補ずなる䌚瀟を調べおいたずころ、ニフティにたどり着きたした。 ネットワヌク゚ンゞニアずしお圓然ニフティは存じ䞊げおおり、転職掻動の早い段階で候補に䞊がりたした。他にも候補は䜕瀟かありたしたが、他の䌚瀟ず比范するず求められるスキルや経隓が私の持぀ものず共通点が倚く志向性が合いそうだず考えお応募し、幞いにも内定を頂くこずができたした。 入瀟しお感じたこず 応募した職皮は文字通り「ネットワヌク゚ンゞニア」でしたので、抂ね予想しおいた通りの業務内容ではありたした。 しかし、䞀口に「ネットワヌク゚ンゞニア」ず蚀いたしおも、やはり䌚瀟によっお採甚しおいる技術領域には僅かな違いがありたす。先ほど「求められるスキルや経隓が私の持぀ものず共通点が倚かった」ず申し䞊げたしたが、僅かに違う技術領域の習埗は必芁になりたしたので、慣れるたでの苊劎はありたしたニフティに転職するたでは、CiscoやJuniperの機噚を䜿甚したオンプレのネットワヌクの経隓しかなく、AWSやAzure等のパブリッククラりドを䜿甚した経隓がありたせんでした ただ、オンボヌディングの内容が䜓系的にたずめられおおり、䜕をどの順番で習埗しおいけばいいのかが分かりやすかったのが倧きな助けになりたした。 今埌の目暙・抱負 実は私は僭越ながらも「リヌド゚ンゞニア候補」ずいう枠で入瀟させおいただきたした。過去にもチヌムリヌダヌの経隓あたり自芚は無いですが呚りからはそう芋られおいたようですはありたしたが、ニフティのリヌダヌクラスの方々を芋おいるず、知識の広さや深さ、そしお刀断の速さに驚かされる機䌚も倚いです。そういった方々が身近にいらっしゃるこずは倧倉心匷いのですが、その䞀方で将来的には自身がそのような立ち䜍眮に付いおいるこずを期埅されおいるず考えるず「本圓に自分で倧䞈倫かな・・・」ず䞍安になるこずもありたす。 今埌は技術や知識を身に着けおいくこずはもちろん、リヌダヌシップを発揮できるようなコミュニケヌションスキルも身に着けおいき、期埅に応えられるようにリヌダヌずしお掻躍しおいきたいです。 最埌に ここたで読んでいただきありがずうございたした。 ニフティは提䟛サヌビスが倚く、その分採甚しおいる技術領域の幅が広いので自分に合ったチヌムが芋぀かりやすい䌚瀟だず思いたす。 「自分の埗意分野で掻躍したい」ずいう想いも「新しいこずにチャレンゞしたい」ずいう想いも叶えられる環境がありたす。 少しでもニフティにご興味を持っおいただけたのであれば、ぜひ応募しおいただき、カゞュアル面談や面接でお話しおみたせんか 皆さんず䞀緒に働ける日をお埅ちしおおりたす

動画

曞籍

おすすめマガゞン

蚘事の写真

【アクセンチュア】20幎のキャリアで芋぀けた、自分で遞び取る働き方ずは

蚘事の写真

AI゚ヌゞェントの本番運甚を成功に導くアヌキテクチャ蚭蚈ずデヌタ前凊理の実践

蚘事の写真

【オムロン】ITずOTはなぜ分かり合えないのか ―時間ずデヌタをめぐる蚭蚈のリアル、補造業DXの「泥臭い」真実

新着動画

蚘事の写真

【3分】守れる゚ンゞニアが匷くなる理由。Project Glasswingの本質は“新モデル”じゃない / Claude...

蚘事の写真

【ゞュニア゚ンゞニア䞍芁論】最匷組織は短呜に終わる/質ずスピヌドはトレヌドオフじゃない/和田卓人氏(t-wada)/埌線...

蚘事の写真

【3分でわかる】SNSで議論沞隰「ハヌネス゚ンゞニアリング」賛吊䞡論の本質は / AI゚ヌゞェントの品質を最倧化 / ...