Skip to content

Instantly share code, notes, and snippets.

@rdemoraes
Last active August 19, 2022 15:02
Show Gist options
  • Save rdemoraes/24e3f26759aa8f2ae95b68f444245a8a to your computer and use it in GitHub Desktop.
Save rdemoraes/24e3f26759aa8f2ae95b68f444245a8a to your computer and use it in GitHub Desktop.
github-action-ecs-task-definition-from-scratch
name: generate-task-definition-json
author: Raphael Moraes
decription: Action to generate a custom task definition json file
inputs:
environment:
description: 'Environment Name'
required: true
default: dev
ecr_name:
description: 'AWS Private Registry Name'
required: true
ecr_repository_name:
description: 'Image Name'
required: true
image_tag:
description: 'Tag Name'
required: true
container_name:
description: 'Container Name'
required: true
container_cpu:
description: 'Container CPU'
required: true
container_memory:
description: 'Container Memory'
required: true
container_port:
description: 'Container Port'
required: true
host_port:
description: 'Host Port'
required: true
execution_role_arn:
description: 'Execution Role Arn'
required: true
app_datasource_password:
description: 'App DS Password'
required: true
app_datasource_url:
description: 'App DS URL'
required: true
app_datasource_username:
description: 'App DS Username'
required: true
runs:
using: "composite"
steps:
-
run: |
cat <<EOF >> task-definition.json
{
"ipcMode": null,
"executionRoleArn": ${{ inputs.execution_role_arn }},
"containerDefinitions": [
{
"dnsSearchDomains": null,
"environmentFiles": null,
"logConfiguration": {
"logDriver": "awslogs",
"secretOptions": null,
"options": {
"awslogs-group": "/ecs/${{ inputs.container_name }}",
"awslogs-region": "${{ inputs.aws_region }}",
"awslogs-stream-prefix": "ecs"
}
},
"entryPoint": null,
"portMappings": [
{
"hostPort": ${{ inputs.host_port }},
"protocol": "tcp",
"containerPort": ${{ inputs.container_port }}
}
],
"command": null,
"linuxParameters": null,
"cpu": "${{ inputs.container_cpu }}",
"environment": [
{
name: "ENVIRONMENT",
value: "${{ inputs.environment }}"
},
{
name: "PORT",
value: "${{ inputs.container_port }}"
},
{
name: "APP_DATASOURCE_PASSWORD",
value: "${{ inputs.app_datasource_password }}"
},
{
name: "APP_DATASOURCE_URL",
value: "${{ inputs.app_datasource_url }}"
},
{
name: "APP_DATASOURCE_USERNAME",
value: "${{ inputs.app_datasource_username }}"
}
],
"resourceRequirements": null,
"ulimits": null,
"dnsServers": null,
"mountPoints": [],
"workingDirectory": null,
"secrets": null,
"dockerSecurityOptions": null,
"memory": "${{ inputs.container_memory }}",
"memoryReservation": null,
"volumesFrom": [],
"stopTimeout": null,
"image": "${{ inputs.ecr_name }}/${{ inputs.ecr_repository_name }}:${{ inputs.image_tag }}",
"startTimeout": null,
"firelensConfiguration": null,
"dependsOn": null,
"disableNetworking": null,
"interactive": null,
"healthCheck": null,
"essential": true,
"links": null,
"hostname": null,
"extraHosts": null,
"pseudoTerminal": null,
"user": null,
"readonlyRootFilesystem": null,
"dockerLabels": null,
"systemControls": null,
"privileged": null,
"name": "${{ inputs.container_name }}"
}
],
"placementConstraints": [],
"memory": "${{ inputs.container_memory }}",
"taskRoleArn": null,
"taskDefinitionArn": "",
"family": "${{ inputs.container_name }}",
"pidMode": null,
"requiresCompatibilities": ["FARGATE"],
"networkMode": "awsvpc",
"cpu": "${{ inputs.container_cpu }}",
"revision": null,
"inferenceAccelerators": null,
"proxyConfiguration": null,
"volumes": []
}
EOF
shell: bash
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment