AWS
aws-cli
AWS-Batch

[JAWS-UG CLI] AWS Batch #4 環境の破棄

More than 1 year has passed since last update.

前提条件

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}

完了

お疲れさまでした