Files
oam/taskfile/aws.yml
2026-01-08 23:37:32 +01:00

122 lines
4.2 KiB
YAML

---
version: "3"
tasks:
cli:session-manager-plugin:install:
desc: install the session manager plugin for the aws cli
summary: |-
Install the session manager plugin for the AWS CLI.
platforms:
- darwin/arm64
interactive: true
cmds:
- >-
curl --continue-at '-'
--url 'https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac_arm64/session-manager-plugin.pkg'
--output 'session-manager-plugin.pkg'
- sudo installer -pkg 'session-manager-plugin.pkg' -target '/'
- sudo ln -fs '/usr/local/sessionmanagerplugin/bin/session-manager-plugin' '/usr/local/bin/session-manager-plugin'
status:
- test -r '/usr/local/sessionmanagerplugin/bin/session-manager-plugin'
- test -r '/usr/local/bin/session-manager-plugin'
ecr:login:
desc: login to an ecr
summary: |-
Login to an ECR.
Enables pulling and pushing images to it, as long as the AWS user has sufficient permissions.
internal: true
requires:
vars:
- ECR_URL
cmd: aws ecr get-login-password | docker login --username 'AWS' --password-stdin '{{.ECR_URL}}'
ecs:service:check:can-execute:
desc: check one can execute commands in an ecs service's tasks
summary: |-
Check one can execute commands in an ECS service's tasks.
internal: true
requires:
vars:
- AWS_PROFILE
- CLUSTER
- SERVICE_NAME
vars:
CLUSTER: '{{.CLUSTER}}'
cmd: >-
aws ecs list-tasks --cluster '{{.CLUSTER}}' --service-name '{{.SERVICE_NAME}}' --query 'taskArns' --output 'text'
| xargs aws ecs describe-tasks --cluster '{{.CLUSTER}}' --output 'yaml'
--query 'tasks[0] | {
"managedAgents": containers[].managedAgents[?@.name==`ExecuteCommandAgent`][],
"enableExecuteCommand": enableExecuteCommand
}'
--tasks
ecs:service:execute:
desc: execute a command in an ecs service's task
summary: |-
Execute a command in an ECS service's task.
internal: true
interactive: true
deps:
- cli:session-manager-plugin:install
requires:
vars:
- AWS_PROFILE
- CLUSTER
- CONTAINER_NAME
- SERVICE_NAME
- COMMAND
vars:
CLUSTER: '{{.CLUSTER}}'
cmd: >-
aws ecs list-tasks --cluster '{{.CLUSTER}}' --service-name '{{.SERVICE_NAME}}' --query 'taskArns[0]' --output 'text'
| xargs -o -I '%%' aws ecs execute-command --interactive --command '{{.COMMAND}}' --cluster '{{.CLUSTER}}' --container '{{.CONTAINER_NAME}}' --task '%%'
ecs:service:get-shell:
desc: get a shell in an ecs service's task
summary: |-
Get a shell in an ECS service's task.
internal: true
interactive: true
cmd:
task: ecs:service:execute
vars:
COMMAND: bash
CONTAINER_NAME: '{{.CONTAINER_NAME}}'
SERVICE_NAME: '{{.SERVICE_NAME}}'
ecs:service:get-tasks-ips:
desc: get the ip addresses of an ecs service's tasks
summary: |-
Get the IP addresses of an ECS service's tasks.
internal: true
requires:
vars:
- AWS_PROFILE
- CLUSTER
- SERVICE_NAME
vars:
CLUSTER: '{{.CLUSTER}}'
cmd: >-
aws ecs list-tasks --cluster '{{.CLUSTER}}' --service-name '{{.SERVICE_NAME}}' --query 'taskArns[0]' --output 'text'
| xargs -I '%%' aws ecs describe-tasks --cluster '{{.CLUSTER}}' --tasks '%%' --query "tasks[].attachments[].details[?(@.name=='privateIPv4Address')].value" --output 'text'
ecs:service:restart:
desc: restart an ecs service's tasks
summary: |-
Restart an ECS service's tasks.
requires:
vars:
- AWS_PROFILE
- AWS_USER
- CLUSTER
- SERVICE_NAME
- REASON
vars:
AWS_USER:
sh: aws sts get-caller-identity --output 'json' | jq -r '.Arn'
CLUSTER: '{{.CLUSTER | default "Staging"}}'
REASON: 'Entity {{.AWS_USER}} requested manual restart'
cmd: >-
aws ecs list-tasks --cluster '{{.CLUSTER}}' --service-name '{{.SERVICE_NAME}}' --query 'taskArns' --output 'text'
| xargs -n '1' aws ecs stop-task --cluster '{{.CLUSTER}}' --output 'text' --query 'task.lastStatus' --reason '{{.REASON}}' --task