前提条件
EC2への権限
EC2、ECS、AWS Batch などに対してフル権限があること。
0. 準備
0.1. より実践的な使い方の完了
AWS Batch #3 より実践的な使い方 が終わっていること
0.2. 変数の確認
#1
, #2
, #3
から引き続き利用する変数を確認します
コマンド
cat << ETX
CFN_STACK_NAME: ${CFN_STACK_NAME}
COMPUTE_ENV_NAME: ${COMPUTE_ENV_NAME}
JOB_QUEUE_NAME: ${JOB_QUEUE_NAME}
JOB_DEFINITION_NAME: ${JOB_DEFINITION_NAME}
CONRAINER_PROPS_FILE: ${CONRAINER_PROPS_FILE}
DOCKER_ENTRYPOINT_FILE: ${DOCKER_ENTRYPOINT_FILE}
DOCKER_FILE: ${DOCKER_FILE}
DOCKER_REPO: ${DOCKER_REPO}
S3_BUCKET_NAME: ${S3_BUCKET_NAME}
Managed 編のみ
BATCH_RESOURCES_FILE: ${BATCH_RESOURCES_FILE}
ETX
結果(例)
CFN_STACK_NAME: aws-batch-xxxxxxxxxx
COMPUTE_ENV_NAME: aws-batch-managed-xxxxxxxxxx
JOB_QUEUE_NAME: aws-batch-job-queue-xxxxxxxxxx
JOB_DEFINITION_NAME: aws-batch-job-def-xxxxxxxxxx
CONRAINER_PROPS_FILE: aws_batch_container_props.json
DOCKER_ENTRYPOINT_FILE: entrypoint.sh
DOCKER_FILE: Dockerfile
DOCKER_REPO: xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/aws-batch-xxxxxxxxxx/sample
S3_BUCKET_NAME: aws-batch-xxxxxxxxxx-xxxxxxxx-xxxxxxxxxxx
Managed 編のみ
BATCH_RESOURCES_FILE: aws_batch_compute_resources.json
0.3. AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.11.36
コマンド
aws --version
結果(例)
aws-cli/1.11.36 Python/2.7.5 Darwin/13.4.0 botocore/1.4.93
バージョンが古い場合は最新版に更新しましょう。
コマンド
sudo -H pip install -U awscli
0.4. AWS アカウントの属性
EC2-Classic が見えない AWS アカウントであること。
コマンド
AWS_SUPPORT_PLATFORMS=$( \
aws ec2 describe-account-attributes \
--query 'AccountAttributes[?AttributeName == `supported-platforms`].AttributeValues[].AttributeValue' \
--output text \
) && echo ${AWS_SUPPORT_PLATFORMS}
結果
VPC
1. リソースの削除
1.1. 定義ファイルの削除
コマンド
rm -f ${CFN_STACK_NAME}.yaml \
${CFN_STACK_NAME}-ecs.yaml ${CFN_STACK_NAME}-job.yaml \
${CONRAINER_PROPS_FILE} ${BATCH_RESOURCES_FILE} \
${DOCKER_ENTRYPOINT_FILE} ${DOCKER_FILE}
1.2. ジョブ投入スタックの削除
コマンド
aws cloudformation delete-stack \
--stack-name ${CFN_STACK_NAME}-job
削除が完了するまで待機します
コマンド
aws cloudformation wait stack-delete-complete \
--stack-name ${CFN_STACK_NAME}-job
1.3. ジョブ投入のための残リソース削除
- ECR リポジトリの削除
コマンド
aws ecr delete-repository --force \
--repository-name $( aws ecr describe-repositories \
| jq '.repositories' \
| jq "map(select(.repositoryUri==\"${DOCKER_REPO}\"))" \
| jq -r '.[].repositoryName' )
結果(例)
{
"repository": {
"registryId": "xxxxxxxxxxxx",
"repositoryName": "aws-batch-xxxxxxxxxx/sample",
"repositoryArn": "arn:aws:ecr:us-east-1:xxxxxxxxxxxx:repository/aws-batch-xxxxxxxxxx/sample",
"createdAt": 1488376409.0,
"repositoryUri": "xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/aws-batch-xxxxxxxxxx/sample"
}
}
- ローカルにある Docker イメージの削除
コマンド
docker rmi ${DOCKER_REPO}
結果
Untagged: xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/aws-batch-xxxxxxxxxx/sample:latest
Untagged: xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/aws-batch-xxxxxxxxxx/sample@sha256:be2fbdefdbfb6b08e6298333e857aa138d293d5804b77ddd61a6145900538f27
Deleted: sha256:a4c9ee04eaea67d8a2c5dc4815b8e9d2d3f064eb48d991eba110c6bd0a4f93d2
Deleted: sha256:81f188eeecd0e2755eef4252aec9248e8d75a67b3d2b637a444e3179eaf27a9a
Deleted: sha256:6a3b014a68b4ce0acd84decd60f5e77c09f0c620fdb123891f2650eb7c3b51d9
- CloudWatch Logs ロググループの削除
コマンド
for group in batch/job lambda/BatchJobTriggerResource
do
aws logs delete-log-group \
--log-group-name /aws/${group}
done
結果
返り値なし
- 結果格納用 S3 バケット
(CloudFormation スタックとして生成したものの、オブジェクトがあるときれいに消えないためここで削除します)
コマンド
aws s3 rb s3://${S3_BUCKET_NAME} --force
結果
返り値なし
- ローカルにダウンロードした帳票ファイル
コマンド
rm ./result-*
結果
返り値なし
1.4. ジョブ定義の無効化
コマンド
for arn in $( aws batch describe-job-definitions \
--job-definition-name ${JOB_DEFINITION_NAME} \
--status ACTIVE \
--query 'jobDefinitions[].jobDefinitionArn' \
--output text)
do
aws batch deregister-job-definition \
--job-definition $arn
done
結果
返り値なし
1.5. ジョブキューの削除
ジョブキューを削除するには、まずキューを無効化します。
コマンド
aws batch update-job-queue \
--job-queue ${JOB_QUEUE_NAME} \
--state DISABLED
結果(例)
{
"jobQueueArn": "arn:aws:batch:us-east-1:xxxxxxxxxxxx:job-queue/aws-batch-job-queue-xxxxxxxxxx",
"jobQueueName": "aws-batch-job-queue-xxxxxxxxxx"
}
その上で削除します
コマンド
aws batch delete-job-queue --job-queue ${JOB_QUEUE_NAME}
結果
返り値なし
[ 重要!!]
AWS Batch にはまだ wait
コマンドがなく不便なのですが、
順序よく消さないと INVALID
な状態となりリソースが消せない
可能性があります。なので、確実に消えたことを確かめます。
コマンド
aws batch describe-job-queues --job-queues ${JOB_QUEUE_NAME}
結果
{
"jobQueues": []
}
1.6. ECS クラスタの削除
(Unmanaged 編のみ)
コマンド
aws cloudformation delete-stack \
--stack-name ${CFN_STACK_NAME}-ecs
削除が完了するまで待機します
コマンド
aws cloudformation wait stack-delete-complete \
--stack-name ${CFN_STACK_NAME}-ecs
1.7. コンピューティング環境の削除
コンピューティング環境も、削除するにはまず無効化が必要です。
コマンド
aws batch update-compute-environment \
--compute-environment ${COMPUTE_ENV_NAME} \
--state DISABLED
結果(例)
{
"computeEnvironmentName": "aws-batch-refarch",
"computeEnvironmentArn": "arn:aws:batch:us-east-1:xxxxxxxxxxxx:compute-environment/aws-batch-refarch"
}
その上で削除します
コマンド
aws batch delete-compute-environment \
--compute-environment ${COMPUTE_ENV_NAME}
結果
返り値なし
[ 重要!!] しばらく待ち、こちらも正常に消えたことを確認します。
コマンド
aws batch describe-compute-environments \
--compute-environments ${COMPUTE_ENV_NAME}
結果
{
"computeEnvironments": []
}
1.8. VPC や IAM の削除
コマンド
aws cloudformation delete-stack \
--stack-name ${CFN_STACK_NAME}
結果
返り値なし
削除が完了するまで待機します
コマンド
aws cloudformation wait stack-delete-complete \
--stack-name ${CFN_STACK_NAME}
完了
お疲れさまでした