创建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'
              }
          }
    )
最后修改:2021 年 08 月 17 日 11 : 55 AM
如果觉得我的文章对你有用,请随意赞赏