import boto3 from aws_lambda_powertools import Logger, Tracer from aws_lambda_powertools.utilities.typing import LambdaContext # ãƒã‚°ã¨ãƒˆãƒ¬ãƒ¼ã‚¹ã®æ©Ÿèƒ½ã‚’åˆæœŸåŒ– logger = Logger() tracer = Tracer() # AWS サービスã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’åˆæœŸåŒ– omics = boto3.client('omics') # Omics ワークフãƒãƒ¼ã®å®Ÿè¡ŒçŠ¶æ…‹ã‚’å–å¾—ã™ã‚‹ Step Functions タスクを実装ã—㟠Lambda 関数ã®ãƒãƒ³ãƒ‰ãƒ© # CloudWatch Logs 㨠X-Ray ã«ã‚ˆã‚‹ãƒã‚°ã¨ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’有効化 @tracer.capture_lambda_handler @logger.inject_lambda_context(log_event=True) def handler(event: dict, context: LambdaContext) -> dict: analysisId = event['AnalysisId'] omicsRun = event['OmicsRun'] # Step Functions ステートマシンã‹ã‚‰æ¸¡ã•ã‚ŒãŸãƒ‘ラメーターã‹ã‚‰ runId 㨠status ã‚’å–å¾—ã™ã‚‹ runId = omicsRun['RunId'] # ワークフãƒãƒ¼ã®å®Ÿè¡ŒçŠ¶æ…‹ã‚’å–å¾—ã™ã‚‹ response = omics.get_run(id=runId) runId = response['id'] status = response['status'] statusMessage = response.get('statusMessage') name = response.get('name') runGroupId = response.get('runGroupId') workflowType = response.get('workflowType') workflowId = response.get('workflowId') parameters = response.get('parameters') or {} outputUri = response.get('outputUri') priority = response.get('priority') storageCapacity = response.get('storageCapacity') accelerators = response.get('accelerators') roleArn = response.get('roleArn') logLevel = response.get('logLevel') tags = response.get('tags') startedBy = response.get('startedBy') creationTime = response.get('creationTime') startTime = response.get('startTime') stopTime = response.get('stopTime') # status ã«å¿œã˜ã¦ã€Œã‚¨ãƒ©ãƒ¼ã€ãŠã‚ˆã³ã€Œå®Œäº†ã€ã®ãƒ•ãƒ©ã‚°ã‚’è¨å®šã—ã€ãƒ¯ãƒ¼ã‚¯ãƒ•ãƒãƒ¼å®Ÿè¡Œã®çŠ¶æ…‹ãƒ‡ãƒ¼ã‚¿ã¨å…±ã«è¿”ã™ isError = status in ['DELETED', 'CANCELLED', 'FAILED'] isFinished = status in ['COMPLETED'] or isError return { 'AnalysisId': analysisId, 'RunId': runId, 'RoleArn': roleArn, 'Status': status, 'StatusMessage': statusMessage, 'IsFinished': isFinished, 'IsError': isError, 'WorkflowType': workflowType, 'WorkflowId': workflowId, 'OutputUri': outputUri, 'Parameters': parameters, 'Name': name, 'Priority': priority, 'StorageCapacity': storageCapacity, 'Accelerators': accelerators, 'RunGroupId': runGroupId, 'LogLevel': logLevel, 'Tags': tags, 'StartedBy': startedBy, 'CreationTime': creationTime.isoformat() if creationTime is not None else None, 'StartTime': startTime.isoformat() if startTime is not None else None, 'StopTime': stopTime.isoformat() if stopTime is not None else None, }