Resources: SingletonServiceRoleDDD815CD: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: Service: Fn::Join: - "" - - lambda. - Ref: AWS::URLSuffix Version: "2012-10-17" ManagedPolicyArns: - Fn::Join: - "" - - "arn:" - Ref: AWS::Partition - :iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Metadata: aws:cdk:path: LambdaCronSagemakerTrain/Singleton/ServiceRole/Resource SingletonServiceRoleDefaultPolicy7525C238: Type: AWS::IAM::Policy Properties: PolicyDocument: Statement: - Action: sagemaker:CreateTrainingJob Effect: Allow Resource: arn:aws:iam::497456752804:role/service-role/AmazonSageMaker-ExecutionRole-20180629T142561 Version: "2012-10-17" PolicyName: SingletonServiceRoleDefaultPolicy7525C238 Roles: - Ref: SingletonServiceRoleDDD815CD Metadata: aws:cdk:path: LambdaCronSagemakerTrain/Singleton/ServiceRole/DefaultPolicy/Resource Singleton8C7B99F3: Type: AWS::Lambda::Function Properties: Code: ZipFile: | import json import boto3 from botocore.vendored import requests import os import datetime #USER VARIABLES timenow = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S") max_depth = os.environ['max_depth'] container = os.environ['container'] base_name = os.environ['base_name'] role_arn = os.environ['role_arn'] s3_input_train = os.environ['s3_input'] s3_input_validation = os.environ['s3_input_validation'] s3_output = os.environ['s3_output'] def run_training(): response = client.create_training_job( TrainingJobName='videogames-xgboost-'+timenow, HyperParameters={ 'max_depth': max_depth }, AlgorithmSpecification={ 'TrainingImage': container, 'TrainingInputMode': 'File', }, RoleArn=role_arn, InputDataConfig=[ { 'ChannelName': 'train', 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix', 'S3Uri': s3_input_train, 'S3DataDistributionType': 'FullyReplicated', } }, 'ContentType': 'libsvm', 'CompressionType': 'None', 'InputMode': 'File', }, { 'ChannelName': 'validation', 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix', 'S3Uri': s3_input_validation, 'S3DataDistributionType': 'FullyReplicated', } }, 'ContentType': 'libsvm', 'CompressionType': 'None', 'InputMode': 'File', }, ], OutputDataConfig={ 'S3OutputPath': s3_output }, StoppingCondition={ 'MaxRuntimeInSeconds': 3000 }, ResourceConfig={ 'InstanceType': 'ml.m4.xlarge', 'InstanceCount': 1, 'VolumeSizeInGB': 3, }, Tags=[ { 'Key': 'Training Time', 'Value': timenow }, { 'Key': 'Max depth used', 'Value': max_depth }, ]) print(response) def lambda_handler(event, context): # TODO implement client = boto3.client('sagemaker-runtime') print("Calling Sagemaker endpoint") try: run_training() except Exception as e: print("something went wrong ...") print(e) return { 'statusCode': 200, 'body': json.loads(response['Body'].read()) } Handler: index.lambda_handler Role: Fn::GetAtt: - SingletonServiceRoleDDD815CD - Arn Runtime: python3.6 Environment: Variables: base_name: video-game-xgboost max_depth: "5" container: 811284229777.dkr.ecr.us-east-1.amazonaws.com/xgboost:1 role_arn: arn:aws:iam::497456752804:role/service-role/AmazonSageMaker-ExecutionRole-20180629T142561 s3_input_train: s3://sagemaker-us-east-1-497456752804/sagemaker/videogames-xgboost/train s3_input_validation: s3://sagemaker-us-east-1-497456752804/sagemaker/videogames-xgboost/validation s3_output: s3://sagemaker-us-east-1-497456752804/sagemaker/videogames-xgboost/output Timeout: 300 DependsOn: - SingletonServiceRoleDefaultPolicy7525C238 - SingletonServiceRoleDDD815CD Metadata: aws:cdk:path: LambdaCronSagemakerTrain/Singleton/Resource SingletonAllowEventRuleLambdaCronSagemakerTrainRule20424AC83E2E579C: Type: AWS::Lambda::Permission Properties: Action: lambda:InvokeFunction FunctionName: Fn::GetAtt: - Singleton8C7B99F3 - Arn Principal: events.amazonaws.com SourceArn: Fn::GetAtt: - Rule4C995B7F - Arn Metadata: aws:cdk:path: LambdaCronSagemakerTrain/Singleton/AllowEventRuleLambdaCronSagemakerTrainRule20424AC8 Rule4C995B7F: Type: AWS::Events::Rule Properties: ScheduleExpression: cron(0 18 ? * MON-FRI *) State: ENABLED Targets: - Arn: Fn::GetAtt: - Singleton8C7B99F3 - Arn Id: Singleton Metadata: aws:cdk:path: LambdaCronSagemakerTrain/Rule/Resource CDKMetadata: Type: AWS::CDK::Metadata Properties: Modules: aws-cdk=0.34.0,@aws-cdk/assets=0.34.0,@aws-cdk/assets-docker=0.34.0,@aws-cdk/aws-applicationautoscaling=0.34.0,@aws-cdk/aws-autoscaling=0.34.0,@aws-cdk/aws-autoscaling-common=0.34.0,@aws-cdk/aws-autoscaling-hooktargets=0.34.0,@aws-cdk/aws-certificatemanager=0.34.0,@aws-cdk/aws-cloudformation=0.34.0,@aws-cdk/aws-cloudfront=0.34.0,@aws-cdk/aws-cloudwatch=0.34.0,@aws-cdk/aws-codebuild=0.34.0,@aws-cdk/aws-codecommit=0.34.0,@aws-cdk/aws-codepipeline=0.34.0,@aws-cdk/aws-ec2=0.34.0,@aws-cdk/aws-ecr=0.34.0,@aws-cdk/aws-ecs=0.34.0,@aws-cdk/aws-elasticloadbalancing=0.34.0,@aws-cdk/aws-elasticloadbalancingv2=0.34.0,@aws-cdk/aws-events=0.34.0,@aws-cdk/aws-events-targets=0.34.0,@aws-cdk/aws-iam=0.34.0,@aws-cdk/aws-kms=0.34.0,@aws-cdk/aws-lambda=0.34.0,@aws-cdk/aws-logs=0.34.0,@aws-cdk/aws-route53=0.34.0,@aws-cdk/aws-route53-targets=0.34.0,@aws-cdk/aws-s3=0.34.0,@aws-cdk/aws-secretsmanager=0.34.0,@aws-cdk/aws-servicediscovery=0.34.0,@aws-cdk/aws-sns=0.34.0,@aws-cdk/aws-sqs=0.34.0,@aws-cdk/aws-stepfunctions=0.34.0,@aws-cdk/cdk=0.34.0,@aws-cdk/cx-api=0.34.0,@aws-cdk/region-info=0.34.0,jsii-runtime=Python/3.6.5