创建Log Group(如果有就跳过)
import boto3
import botocore
log_group_name = '/ml-cicd-test/xgboost-test-001' # CloudWatch上的log group名字,用于创建log group
client = boto3.client('logs')
try:
response = client.create_log_group(
logGroupName=log_group_name,
)
print(response)
except Exception as e:
if 'ResourceAlreadyExistsException' in str(e):
print('Log Group already existed')
else:
print(e)
创建TaskDefinition
import boto3
task_name = 'xgboost-test-001' # TaskDefinition的名字
log_group_name = '/ml-cicd-test/xgboost-test-001' # CloudWatch上的log group名字,用于创建log group
region = 'ca-central-1' # log group所在的region
stream_prefix = 'ecs' # log group流的prefix
cmd = ['./cmd.sh', 's3://xxxx'] # CMD命令
image = 'xxx.dkr.ecr.cn-northwest-1.amazonaws.com/ecr/xgboost' # ECR上的路径
task_role_arn = 'arn:aws-cn:iam::xxx:role/ecsTaskExecutionRole' # Task Role,要给AmazonECSTaskExecutionRolePolicy
execution_role_arn = 'arn:aws-cn:iam::xxx:role/ecsTaskExecutionRole' # Task Role,要给AmazonECSTaskExecutionRolePolicy
cpu = str(4096) # cpu数,每1024为1核,最高4核
memory = str(30720) # memory 30720为30G,最高30G
client = boto3.client('ecs')
response = client.register_task_definition(
family=task_name,
taskRoleArn=task_role_arn,
executionRoleArn=execution_role_arn,
networkMode='awsvpc',
containerDefinitions=[
{
'name': 'container1',
'image': image,
'command': cmd,
'logConfiguration': {
'logDriver': 'awslogs',
'options': {
'awslogs-region' : region,
'awslogs-group' : log_group_name,
'awslogs-stream-prefix': stream_prefix
}
},
},
],
requiresCompatibilities=[
'FARGATE',
],
cpu=cpu,
memory=memory
)
启动TaskDefinition
import json
import boto3
def lambda_handler(event, context):
client = boto3.client('ecs')
cluster = 'Cluster-Name' #集群
task_name = 'xgboost-test-001'
subnets = ['subnet-xxx']
security_groups = ['sg-xxx']
response = client.run_task(
cluster=cluster,
taskDefinition=task_name,
count=1,
launchType='FARGATE',
networkConfiguration={
'awsvpcConfiguration': {
'subnets': subnets,
'securityGroups': security_groups,
'assignPublicIp': 'ENABLED'
}
}
)