LoginSignup
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-01-17

前提条件

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}

完了

お疲れさまでした

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4