ããã«ã¡ã¯ã
ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¹é¨ãDevOpsæ
å½ã®å
¼å®ã§ãã
ä»åã¯ãå æ¥AWS Lambdaã®ã³ã¼ã«ãã¹ã¿ã¼ããç縮ããAWS Lambda SnapStartãPythonã®ãµãã¼ããéå§ããã¨ãããã¨ã§ãããã«ã¤ãã¦ãç´¹ä»ãã¾ãã
- æ¬è¨äºã®å¯¾è±¡è
- AWS Lambda SnapStartã¨ã¯
- AWS Lambdaã®ã³ã¼ã«ãã¹ã¿ã¼ãã¨ã¦ã©ã¼ã ã¹ã¿ã¼ã
- AWS Lambdaã®ã³ã¼ã«ãã¹ã¿ã¼ããèµ·ããã¦ã¿ã
- AWS Lambda SnapStartã使ã£ã¦ã³ã¼ã«ãã¹ã¿ã¼ããæ¹å
- ã¾ã¨ã
æ¬è¨äºã®å¯¾è±¡è
æ¬è¨äºã¯AWS Lambdaã®åºç¤ç¥èãããæ¹ãããã¦éè¦å¢ã«åãã¦ãã¥ã¼ãã³ã°ã®å¿ è¦æ§ãæãã¦ããããæ¹ã対象ã¨ãã¦ãã¾ãã
AWS Lambda SnapStartã¨ã¯
AWS Lambda SnapStartã¯ãAWS Lambda颿°ã®ã³ã¼ã«ãã¹ã¿ã¼ãã®æéãç縮ããæ©è½ã§ãã
ããã¾ã§ã¯ãJavaã®ã¿ã§å©ç¨å¯è½ã§ããããPythonã¨.NETã§ãå©ç¨å¯è½ã«ãªãã¾ããã
AWS Lambda SnapStartã«ã¤ãã¦ã¯ãAWS re:Invent 2024ã®ã»ãã·ã§ã³ã§ãåãä¸ãããã¦ãããåç»ãå
¬éããã¦ãã¾ãã
ä½µãã¦è¦è´ããã ããã¨ãããçè§£ãæ·±ã¾ããã¨æãã¾ãã
AWS Lambdaã®ã³ã¼ã«ãã¹ã¿ã¼ãã¨ã¦ã©ã¼ã ã¹ã¿ã¼ã
AWS Lambda SnapStartã®ç´¹ä»ã®åã«ãã¾ãã¯AWS Lambdaã®ã³ã¼ã«ãã¹ã¿ã¼ãã¨ã¦ã©ã¼ã ã¹ã¿ã¼ãã«ã¤ãã¦ç°¡åã«èª¬æãã¾ãã
ã³ã¼ã«ãã¹ã¿ã¼ãã¨ã¯ãLambda颿°ãåãã¦å¼ã³åºãããéã«ãLambdaã©ã³ã¿ã¤ã ãæ°ããã³ã³ãããèµ·åãã颿°ã®ã³ã¼ããèªã¿è¾¼ãã§åæåãããã¨ãæãã¾ãã
ãã®åæåå¦çã«ã¯ãLambda颿°ã®ã³ã¼ããèªã¿è¾¼ãã ãã§ãªããä¾åé¢ä¿ã®è§£æ±ºãåæåå¦çãªã©ãå«ã¾ãããããã³ã¼ã«ãã¹ã¿ã¼ãã®æéã¯ã¦ã©ã¼ã ã¹ã¿ã¼ãã«æ¯ã¹ã¦é·ããªãã¾ãã
å対ã«ãã¦ã©ã¼ã ã¹ã¿ã¼ãã¨ã¯ãLambda颿°ãæ¢åã®ã³ã³ããä¸ã§ç´ æ©ãå®è¡ãããç¶æ
ãæãã¾ãã
ä¸è¬çã«ãã³ã¼ã«ãã¹ã¿ã¼ãã¯ä»¥ä¸ã®ãããªã±ã¼ã¹ã§çºçãã¾ãã
- AWS Lambda颿°ã®ã³ã¼ããè¨å®ãæ´æ°ãããå ´å
- éè¦å¢ã«ãããAWS Lambda颿°ã®æ°ããå®è¡ç°å¢ãå¿ è¦ã«ãªã£ãå ´å
åºæ¬çã«ãAWS Lambda颿°ãä¸åº¦å¼ã³åºããå¾ã¯ã極ååå©ç¨ããããããã«ãªã£ã¦ãããã¦ã©ã¼ã ã¹ã¿ã¼ããçºçãããã¨ãå¤ãã§ãããéè¦å¢ã«ããã³ã¼ã«ãã¹ã¿ã¼ããçºçãããã¨ãããã¨è§£éããæ¹ãè¯ãã§ãããã
AWS Lambdaã®ã³ã¼ã«ãã¹ã¿ã¼ããèµ·ããã¦ã¿ã
ã¾ãã¯ãLambda颿°ã«ãããã³ã¼ã«ãã¹ã¿ã¼ãèªä½ã確èªãã¦ããã¾ãã
ãµã³ãã«ã³ã¼ãã¯ãã¡ãã§ãã
import time import logging logger = logging.getLogger() logger.setLevel(logging.INFO) large_resource = None def initialize_large_resource(): global large_resource logger.info("Initializing large resource (only on cold start)...") time.sleep(3) # æ¬ä¼¼çãªé å»¶ large_resource = [i for i in range(10**6)] # 大ããªãªã¹ãã使 logger.info("Resource initialized!") # Lambdaãã³ãã©ã¼ def lambda_handler(event, context): global large_resource # ã°ãã¼ãã«å¤æ°ãåæåããã¦ããªããªãåæå if large_resource is None: initialize_large_resource() start_time = time.time() response = {"message": "Hello, World!", "input": event} end_time = time.time() logger.info(f"Execution time: {end_time - start_time:.3f} seconds") return response
ãã®ã³ã¼ãããããã¤ããç´å¾ã«ãLambda颿°ãå¼ã³åºãã¨ãã³ã¼ã«ãã¹ã¿ã¼ããçºçãã¾ãã
ååã¯ã°ãã¼ãã«å¤æ°ãåæåããã¦ããªãã®ã§ãåæåå¦çãå®è¡ããã¾ãã
åæåå¦çã«æ°ç§ãããå®è£
ã«ãã¦ãããããèµ·åæã«æéããããæåã«ãªãã¾ãã
Function Logs: START RequestId: 6bbce71b-04cd-4f2f-b482-bedd5693eb0e Version: $LATEST [INFO] 2024-12-24T09:05:00.610Z 6bbce71b-04cd-4f2f-b482-bedd5693eb0e Initializing large resource (only on cold start)... [INFO] 2024-12-24T09:05:04.812Z 6bbce71b-04cd-4f2f-b482-bedd5693eb0e Resource initialized! [INFO] 2024-12-24T09:05:04.812Z 6bbce71b-04cd-4f2f-b482-bedd5693eb0e Execution time: 0.000 seconds END RequestId: 6bbce71b-04cd-4f2f-b482-bedd5693eb0e REPORT RequestId: 6bbce71b-04cd-4f2f-b482-bedd5693eb0e Duration: 4241.56 ms Billed Duration: 4242 ms Memory Size: 128 MB Max Memory Used: 69 MB Init Duration: 101.13 ms Request ID: 6bbce71b-04cd-4f2f-b482-bedd5693eb0e
2åç®ä»¥éã®å®è¡ã§ã¯ãã¦ã©ã¼ã ã¹ã¿ã¼ããçºçããåæåå¦çãã¹ãããããããããå®è¡æéãç縮ããã¾ãã
Function Logs: START RequestId: 874e1347-0313-4a38-b163-050a02eb87c4 Version: $LATEST [INFO] 2024-12-24T09:05:48.614Z 874e1347-0313-4a38-b163-050a02eb87c4 Execution time: 0.000 seconds END RequestId: 874e1347-0313-4a38-b163-050a02eb87c4 REPORT RequestId: 874e1347-0313-4a38-b163-050a02eb87c4 Duration: 1.81 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 69 MB Request ID: 874e1347-0313-4a38-b163-050a02eb87c4
ãã®é¢æ°ã«å¯¾ãã¦ãæ¹è¡ã追å ã§ããªãã§ãããã®ã§ä¿®æ£ãå ãã¦ãããã¤ããå度å¼ã³åºãã¨ãåã³ã³ã¼ã«ãã¹ã¿ã¼ããçºçãã¾ãã
ãã®ããã«ãã³ã¼ã«ãã¹ã¿ã¼ãã¯Lambda颿°ã®ã³ã¼ããè¨å®ãæ´æ°ãããå ´åã«çºçãããã¨ããããã¾ãã
AWS Lambda SnapStartã使ã£ã¦ã³ã¼ã«ãã¹ã¿ã¼ããæ¹å
ã§ã¯ãããã«å¯¾ãã¦AWS Lambda SnapStartã試ãã¦ã¿ã¾ãã
SnapStartã¯ä»¥ä¸ã®ã¹ãããã§åä½ãããã¨ã§ãã³ã¼ã«ãã¹ã¿ã¼ãã®æéãç縮ããæ©è½ã§ãã
- Lambda颿°ã®ã³ã¼ããã¹ãããã·ã§ããã¨ãã¦ä¿å
- 次å以éã®èµ·åæã«ã¹ãããã·ã§ããã復å ãã
- 復å å¾ã®ç¶æ ããLambda颿°ãèµ·åãã
ãã®æã1.ã¨2.ã«ããã¦å¦çãæããã¨ãã§ãããããããã¯ã¨å¼ã³ã¾ãã
ãã®ããã¯ã¨ä½µãããã¨ã§ãããå®åã«æ²¿ã£ãä½¿ãæ¹ãã¤ã¡ã¼ã¸ã§ããã¨æãã®ã§ã䏿°ã«ããã¯å¦çã試ãã¦ã¿ã¾ãã
Pythonã«ãããSnapStartã®ããã¯ã®ä½¿ãæ¹ã¯ãã¡ãã«è¨è¼ããã¦ãã¾ãã
ããã¯ï¼register_before_snapshotã使ã£ã¦ã¿ã
ã¾ãã¯ãSnapStartã®ããã¯ï¼register_before_snapshotã使ã£ã¦ã¿ã¾ãã
import time import logging from snapshot_restore_py import register_before_snapshot logger = logging.getLogger() logger.setLevel(logging.INFO) large_resource = None @register_before_snapshot def before_checkpoint(): if large_resource is None: initialize_large_resource() def initialize_large_resource(): global large_resource logger.info("Initializing large resource (only on cold start)...") time.sleep(3) # æ¬ä¼¼çãªé å»¶ large_resource = [i for i in range(10**6)] # 大ããªãªã¹ãã使 logger.info("Resource initialized!") # Lambdaãã³ãã©ã¼ def lambda_handler(event, context): global large_resource # ã°ãã¼ãã«å¤æ°ãåæåããã¦ããªããªãåæå if large_resource is None: initialize_large_resource() start_time = time.time() response = {"message": "Hello, World!", "input": event} end_time = time.time() logger.info(f"Execution time: {end_time - start_time:.3f} seconds") return response
ããããããã¤ããå¾ãã¹ãããã·ã§ããã使ãã¾ãã
ã¾ãã¯ãè¨å®ã§SnapStartãæå¹ã«ãã¾ãã

ãã®ç¶æ
ã§ãã¼ã¸ã§ã³ã使ãã¾ãã
ã¡ãã»ã¼ã¸ãããããã«ãSnapStartãæå¹ã«ãã¦ãããã¼ã¸ã§ã³ã使ããã¨ããã¼ã¸ã§ã³ä½æã«æéããããããã«ãªãã¾ãã

æ´ãã¦ãã¼ã¸ã§ã³ã使ããããããã®ãã¼ã¸ã§ã³ãæå®ãã¦Lambda颿°ãå¼ã³åºãã¨ãååã®ã³ã¼ã«ãã¹ã¿ã¼ãæã§ãã°ãã¼ãã«å¤æ°ã®åæåãã¹ããããããèµ·åæéãç縮ããã¦ãããã¨ã確èªã§ãã¾ãã
ããã¯SnapStartã®æ©è½ã«ãããã³ã¼ãã®èªã¿è¾¼ã¿ã¨ã°ãã¼ãã«å¤æ°ã®åæåå¦çãæ¸ãã ç¶æ
ã§Lambda颿°ãèµ·åãããããã§ãã
ããã¯ï¼register_before_snapshotã¯ãã¹ãããã·ã§ããã使ããåã«å®è¡ããããããåæåå¦çãã¹ãããã·ã§ããã«å«ã¾ãããã¨ã«ãªãã¾ãã
Function Logs: RESTORE_START Runtime Version: python:3.13.v13 Runtime Version ARN: arn:aws:lambda:ap-northeast-1::runtime:b881cbc9a10a8bcb3def9d9e9fe38f922bb36510a1d92d4ce85cf2a899eeabd8 RESTORE_REPORT Restore Duration: 566.08 ms START RequestId: 23361531-c5e9-4080-9978-0d9be9793e03 Version: 1 [INFO] 2024-12-24T08:51:45.369Z 23361531-c5e9-4080-9978-0d9be9793e03 Execution time: 0.000 seconds END RequestId: 23361531-c5e9-4080-9978-0d9be9793e03 REPORT RequestId: 23361531-c5e9-4080-9978-0d9be9793e03 Duration: 28.67 ms Billed Duration: 93 ms Memory Size: 128 MB Max Memory Used: 76 MB Restore Duration: 566.08 ms Billed Restore Duration: 64 ms Request ID: 23361531-c5e9-4080-9978-0d9be9793e03
ããã¯ï¼register_after_restoreã使ã£ã¦ã¿ã
ä»åº¦ã¯ãã¹ãããã·ã§ããã復å
ããå¾ã®ããã¯ï¼register_after_restoreã使ã£ã¦ã¿ã¾ãã
import time import logging from snapshot_restore_py import register_after_restore logger = logging.getLogger() logger.setLevel(logging.INFO) large_resource = None @register_after_restore def after_restore(): if large_resource is None: initialize_large_resource() def initialize_large_resource(): global large_resource logger.info("Initializing large resource (only on cold start)...") time.sleep(3) # æ¬ä¼¼çãªé å»¶ large_resource = [i for i in range(10**6)] # 大ããªãªã¹ãã使 logger.info("Resource initialized!") # Lambdaãã³ãã©ã¼ def lambda_handler(event, context): global large_resource # ã°ãã¼ãã«å¤æ°ãåæåããã¦ããªããªãåæå if large_resource is None: initialize_large_resource() start_time = time.time() response = {"message": "Hello, World!", "input": event} end_time = time.time() logger.info(f"Execution time: {end_time - start_time:.3f} seconds") return response
ãã¡ããåãããã«ãããããããã¤ããå¾ãã¹ãããã·ã§ãããæå¹åããç¶æ
ã§ãã¼ã¸ã§ã³ã使ãã¾ãã
ããã¦ã使ãããã¼ã¸ã§ã³ãæå®ãã¦Lambda颿°ãå¼ã³åºãã¨ãååã¯ã°ãã¼ãã«å¤æ°ã®åæåå¦çãèµ°ãèµ·åãé
ãã2åç®ä»¥éã¯åæåå¦çãã¹ãããããã¦èµ·åãæ©ãã¨ããã¹ãããã·ã§ãããé©ç¨ããåã¨åãæåã確èªã§ãã¾ãã
ããã¯ï¼register_after_restoreã¯ãã¹ãããã·ã§ããã復å
ããå¾ã«å®è¡ããããããåæåå¦çãã¹ãããã·ã§ããã«å«ã¾ããªããã¨ã«ãªãã¾ãã
ããããregister_before_snapshotã使ã£ãæã¨ã®æåã®éããç£ãã§ãã¾ãã
register_before_snapshotã¨register_after_restoreã®ä½¿ãåã
Lambda颿°ãæ¸ãæãèµ·åãæ©ãããããä¸é¨ã®å¤æ°ãã°ãã¼ãã«å¤æ°ã«ãã¦ãããã¨ãããã¾ãã
ãã®æããã¼ã¿ãã¼ã¹ã³ãã¯ã·ã§ã³ãªã©ãæ°¸ç¶çã«ä¿æãããã¨åé¡ã«ãªã夿°ã¯ãregister_after_restoreã使ãã¨ããã§ãããã
ããã以å¤ã®ã1åããåæåããªã夿°ã»ãã¼ã¿ã¯ãregister_before_snapshotã使ãã¨ããã¨æããã¾ãã
ã¾ã¨ã
AWS Lambda SnapStartã使ããã¨ã§ãLambda颿°ã®ã³ã¼ã«ãã¹ã¿ã¼ããæ¹åãããã¨ãã§ãã¾ãã
ã³ã¼ã«ãã¹ã¿ã¼ãã¯ãããã¤ä»¥å¤ã ã¨ã䏿ãªéè¦å¢ã«ããçºçãããã¨ãå¤ãã®ã§ãéè¦ã®äºæ¸¬ãé£ããå ´åã«ã¯AWS Lambda SnapStartã¯æå¹ã§ãã
å ¼å® è¡(å·çè¨äºã®ä¸è¦§)
ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¹é¨ DS3課æå±
2025 Japan AWS Top Engineers (AI/ML Data Engineer)
2025 Japan AWS All Certifications Engineers
2025 AWS Community Builders
Certified ScrumMaster
PMP
åºå³¶å¨ä½ã§ãã仿¥ãææ¥ãä¿®è¡ä¸ã§ãã
X(æ§Twitter)