mirror of
https://github.com/farcasclaudiu/terraform-course.git
synced 2026-06-29 01:02:16 +03:00
@@ -0,0 +1,10 @@
|
||||
version: 0.0
|
||||
Resources:
|
||||
- TargetService:
|
||||
Type: AWS::ECS::Service
|
||||
Properties:
|
||||
# <TASK_DEFINITION> will be replaced by codedeploy when the pipeline runs
|
||||
TaskDefinition: "<TASK_DEFINITION>"
|
||||
LoadBalancerInfo:
|
||||
ContainerName: demo
|
||||
ContainerPort: 3000
|
||||
@@ -0,0 +1,21 @@
|
||||
version: 0.2
|
||||
|
||||
phases:
|
||||
pre_build:
|
||||
commands:
|
||||
- $(aws ecr get-login --no-include-email)
|
||||
build:
|
||||
commands:
|
||||
- docker build -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$CODEBUILD_RESOLVED_SOURCE_VERSION .
|
||||
post_build:
|
||||
commands:
|
||||
# push
|
||||
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$CODEBUILD_RESOLVED_SOURCE_VERSION
|
||||
# create new task definition
|
||||
- ./create-new-task-def.sh $IMAGE_REPO_NAME
|
||||
- ./set-network-configuration.sh $IMAGE_REPO_NAME
|
||||
|
||||
artifacts:
|
||||
files:
|
||||
- 'appspec.yaml'
|
||||
- 'taskdef.json'
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
set -ex
|
||||
SERVICE_NAME=$1
|
||||
IMAGE_URI="$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$CODEBUILD_RESOLVED_SOURCE_VERSION"
|
||||
TASKDEF_NAME=$(aws ecs list-task-definitions |jq --raw-output '.taskDefinitionArns[] | select(contains("'${SERVICE_NAME}'"))' | tail -n1)
|
||||
CURRENT_TASKDEF=`aws ecs describe-task-definition --task-definition $TASKDEF_NAME`
|
||||
CURRENT_TASKDEF_CONTAINERDEF=`echo $CURRENT_TASKDEF| jq --raw-output ".taskDefinition.containerDefinitions"`
|
||||
TASKDEF_ROLE_ARN=`echo $CURRENT_TASKDEF| jq --raw-output ".taskDefinition.taskRoleArn"`
|
||||
EXECUTION_ROLE_ARN=`echo $CURRENT_TASKDEF| jq --raw-output ".taskDefinition.executionRoleArn"`
|
||||
TASKDEF=`echo $CURRENT_TASKDEF_CONTAINERDEF | jq ' [ .[] | .image = "'${IMAGE_URI}'" ]'`
|
||||
CPU=$(echo $CURRENT_TASKDEF |jq -r '.taskDefinition.cpu')
|
||||
MEMORY=$(echo $CURRENT_TASKDEF |jq -r '.taskDefinition.memory')
|
||||
NETWORK_MODE=$(echo $CURRENT_TASKDEF |jq -r '.taskDefinition.networkMode')
|
||||
REQUIRES_COMPATIBILITIES=$(echo $CURRENT_TASKDEF |jq '.taskDefinition.requiresCompatibilities[]' | tr '\n' ',' | sed 's/.$//')
|
||||
echo '{"family": "'${SERVICE_NAME}'", "taskRoleArn": "'${TASKDEF_ROLE_ARN}'", "executionRoleArn": "'${EXECUTION_ROLE_ARN}'", "containerDefinitions": '$TASKDEF', "cpu": "'$CPU'", "memory": "'$MEMORY'", "requiresCompatibilities": ['$REQUIRES_COMPATIBILITIES'], "networkMode": "'${NETWORK_MODE}'" }' > taskdef.json
|
||||
#aws ecs register-task-definition --cli-input-json file://task-def-template.json.new > task-def-template.json.out
|
||||
#NEW_TASKDEF_ARN=`cat task-def-template.json.out |jq -r '.taskDefinition.taskDefinitionArn'`
|
||||
sed -i 's#$TASKDEF#'$NEW_TASKDEF_ARN'#' appspec.yaml
|
||||
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
# set subnet, security groups, public ip
|
||||
SERVICE_NAME=$1
|
||||
CLUSTER_NAME=$1
|
||||
NETWORK_CONFIGURATION=$(aws ecs describe-services --services $SERVICE_NAME --cluster $CLUSTER_NAME |jq -r '.services[].networkConfiguration')
|
||||
SUBNETS=$(echo $NETWORK_CONFIGURATION |jq '.awsvpcConfiguration.subnets[]' | tr '\n' ',' | sed 's/.$//')
|
||||
SECURITY_GROUPS=$(echo $NETWORK_CONFIGURATION |jq '.awsvpcConfiguration.securityGroups[]' | tr '\n' ',' | sed 's/.$//')
|
||||
PUBLIC_IP=$(echo $NETWORK_CONFIGURATION |jq '.awsvpcConfiguration.assignPublicIp')
|
||||
sed -i 's/$SUBNETS/'$SUBNETS'/' appspec.yaml
|
||||
sed -i 's/$SECURITY_GROUPS/'$SECURITY_GROUPS'/' appspec.yaml
|
||||
sed -i 's/$PUBLIC_IP/'$PUBLIC_IP'/' appspec.yaml
|
||||
Reference in New Issue
Block a user