Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import base64
- import json
- import docker
- import boto3
- import sys
- access_key = 'AKIAII2HDKJB52AXQ5IQ'
- secret_key = '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'
- region = 'eu-west-2'
- td_family = 'petsquare-dev'
- clusters = {
- 'dev': 'default',
- 'test': 'default',
- 'prod': 'petsquare-prod'
- }
- def process_docker_api_line(payload):
- for segment in payload.decode("utf-8").split('\n'):
- line = segment.strip()
- if line:
- try:
- line_payload = json.loads(line)
- except ValueError as ex:
- print("Could not decipher payload from API: " + str(ex))
- continue
- if line_payload:
- if "errorDetail" in line_payload:
- error = line_payload["errorDetail"]
- sys.stderr.write(error["message"])
- raise RuntimeError("Error on build - code " + str(error["code"]))
- elif "stream" in line_payload:
- sys.stdout.write(line_payload["stream"])
- def build_and_push_to_ecr():
- path = '/Users/crookedman/Work/petsquare-python/web'
- repo = '621275034485.dkr.ecr.eu-west-2.amazonaws.com/petsquare'
- local_tag = 'petsquare:dev-latest'
- ecr_client = boto3.client('ecr', region_name=region)
- docker_api = docker.APIClient()
- print("Building image " + local_tag)
- for line in docker_api.build(path=path, tag=local_tag, stream=True):
- process_docker_api_line(line)
- auth = ecr_client.get_authorization_token()
- token = auth["authorizationData"][0]["authorizationToken"]
- username, password = base64.b64decode(token).decode("utf-8").split(':')
- auth_config_payload = {'username': username, 'password': password}
- version_tag = repo + ':dev-latest'
- print('Tagging version', version_tag)
- if docker_api.tag(local_tag, version_tag) is False:
- raise RuntimeError("Tag appeared to fail: " + version_tag)
- print('Pushing to repo', version_tag)
- for line in docker_api.push(version_tag, stream=True, auth_config=auth_config_payload):
- process_docker_api_line(line)
- print('Success!')
- docker_api.remove_image(version_tag, force=True)
- def update_task_definition():
- ecs_client = boto3.client(
- 'ecs',
- aws_access_key_id=access_key,
- aws_secret_access_key=secret_key,
- region_name=region
- )
- td_response = ecs_client.list_task_definitions(
- familyPrefix='petsquare-dev',
- status='ACTIVE',
- sort='DESC',
- )
- last_td = td_response['taskDefinitionArns'][0].split('/')[-1]
- ecs_client.register_task_definition(containerDefinitions=[
- {
- "portMappings": [
- {
- "hostPort": 80,
- "protocol": "tcp",
- "containerPort": 81
- }
- ],
- "cpu": 0,
- "memory": 1024,
- "image": "621275034485.dkr.ecr.eu-west-2.amazonaws.com/petsquare:dev-latest",
- "name": "petsquare-dev"
- }
- ], family=td_family)
- ecs_client.deregister_task_definition(
- taskDefinition=last_td
- )
- task_response = ecs_client.list_tasks(
- cluster='default',
- family=td_family,
- desiredStatus='RUNNING',
- )
- for arn in task_response['taskArns']:
- ecs_client.stop_task(
- cluster='default',
- task=arn
- )
- ecs_client.run_task(
- cluster='default',
- taskDefinition=td_family,
- count=2
- )
- update_task_definition()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement