|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
name: Rollback ECS Task Revision run-name: Rollback service to previous revision in ${{ github.event.inputs.environment }} on: workflow_dispatch: inputs: environment: type: choice required: true options: - hoge-staging - hoge-production default: hoge-staging revision_back_count: description: "Number of revisions to roll back (1 = previous revision)" type: number required: true default: 1 permissions: id-token: write contents: read jobs: rollback-task-revision: runs-on: ubuntu-latest environment: ${{ github.event.inputs.environment }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} aws-region: ap-northeast-1 - name: Rollback ECS Task Definition run: | ENVIRONMENT="${{ github.event.inputs.environment }}" ENVIRONMENT_TYPE="${ENVIRONMENT#hoge-}" REVISION_BACK_COUNT="${{ github.event.inputs.revision_back_count }}" CLUSTER_NAME="hoge-${ENVIRONMENT_TYPE}" ECS_SERVICE_NAME="hoge-${ENVIRONMENT_TYPE}" echo "Getting current task definition..." CURRENT_TASK_DEF=$(aws ecs describe-services \ --cluster "$CLUSTER_NAME" \ --services "$ECS_SERVICE_NAME" \ --query 'services[0].taskDefinition' \ --output text) TASK_FAMILY=$(aws ecs describe-task-definition \ --task-definition "$CURRENT_TASK_DEF" \ --query 'taskDefinition.family' \ --output text) CURRENT_REVISION=$(aws ecs describe-task-definition \ --task-definition "$CURRENT_TASK_DEF" \ --query 'taskDefinition.revision' \ --output text) TARGET_REVISION=$((CURRENT_REVISION - REVISION_BACK_COUNT)) if [ "$TARGET_REVISION" -lt 1 ]; then echo "Invalid target revision" exit 1 fi TARGET_TASK_DEF="${TASK_FAMILY}:${TARGET_REVISION}" echo "Rolling back to ${TARGET_TASK_DEF}" aws ecs update-service \ --cluster "$CLUSTER_NAME" \ --service "$ECS_SERVICE_NAME" \ --task-definition "$TARGET_TASK_DEF" - name: Wait for deployment to complete run: | aws ecs wait services-stable \ --cluster "hoge-${{ github.event.inputs.environment#hoge- }}" \ --services "hoge-${{ github.event.inputs.environment#hoge- }}" |
デプロイサーキットブレーカーとは別に、ECSの起動自体は正常に完了するものの、アプリケーションの不具合によってリリース後に問題が発覚するケースがある。このような場合、サーキットブレーカーでは検知・自動復旧ができないため、一つ前のタスク定義リビジョンへロールバックする必要がある。GitHub Actionsで管理しておくと便利。
Was this helpful?
0 / 0
1989年生まれのFindy/SRE サブマネージャー。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化、分析基盤の運用、チームマネジメントを担当している。
個人事業主では数社サーバー保守とベンチャー企業のインフラコンサルティングを行うほか、TechBullを創業し、未経験者向けにSREのコーチングやコミュニティ運営、LT大会の開催、 会員管理システム「Members」の開発をリードしている。さらに、エンジニア向けYouTubeメディア「TECH WORLD」ではSRE関連の動画に出演し、過去には脆弱性スキャナ「Vuls」のOSS活動にも貢献。ガジェット系エンジニアYouTuberとしても発信。