Upgrade to Pro — share decks privately, control downloads, hide ads and more …

インプレースデプロイからBlue/Greenデプロイへの変更をゴリ押しで進めた話

 インプレースデプロイからBlue/Greenデプロイへの変更をゴリ押しで進めた話

Toshiaki Furukawa

March 14, 2022
Tweet

Other Decks in Programming

Transcript

  1. 5 はじめに AWS CodeBuild AWS CodeCommit AWS CodeDeploy 弊社はAWS専業なので、CI/CD導⼊案件ではAWS Codeシリーズを使⽤するこ

    とが多いです 今回お話する案件では、Jenkinsにより既にCI/CDが導⼊されており、 Jenkins からAWS Fargate上にアプリケーションをインプレースデプロイしています
  2. 8 デプロイ⽅式 ECSはローリングアップデート Serverless Frameworkのプラグイン 「serverless-aws-nested-stacks」を 使⽤し、CFnのテンプレートファイルを 読み込む sls deployで⼀括デプロイ

    # serverless.yml Custom: :nested-stacks: location: ./ stacks: - id: ${self:service}${self:provider.stackName} template: elb.yml enabled: true timeout: 60 parameters: - VPC: vpc-********** - Subnet1: subnet-********** - Subnet2: subnet-**********
  3. 17 ⽐較検討 ⼿法 実装コスト ダウンタイム 備考 1. タスクセット切り替え ⾼ ⾼

    改修が必要 2. ALBの追加 低 低 実現不可 3. IPベースでの重み付け ⾼ 低 4. ターゲットグループを直接 切り替え 低 ⾼ ダウンタイムがどのぐ らいか要検証 実装コストを第⼀優先に考えると、4.ターゲットグループ を直接切り替えが望ましい 実際に、B/G切り替えによるダウンタイムを⼿動にて検証 したところ、10秒かかった。
  4. 21 懸念点 # nginx.conf events { } http { proxy_connect_timeout

    60; proxy_send_timeout 60; proxy_read_timeout 60; server { location / { proxy_pass http://a-blue.service; } location /static/ { proxy_pass http://static-blue.service/; } location /a/ { proxy_pass http://a-blue.service:8080/; } } } Nginxでリバースプロ キシ設定
  5. 23 ゴリ押しポイント 既存のテンプレートを使いたい ので、あくまでServeless Frameworkを使う プラグイン「serverless- plugin-additional-stack」に変 更 `deploy --stage

    ${STAGE} ` で、STAGEにBlueかGreenを設 定することで、 additionalStacks: blue: StackName: blue-${self:service}-${self:provider.stage}-backend DeployParameters: - ParameterKey: Name ParameterValue: blue-${self:service}-${self:provider.stage}-backend - ParameterKey: Stage ParameterValue: ${self:provider.stage} Parameters: ${file(./backend.template.yml):Parameters} Resources: ${file(./backend.template.yml):Resources green: StackName: green-${self:service}-${self:provider.stage}-backend DeployParameters: - ParameterKey: Name ParameterValue: green-${self:service}-${self:provider.stage}-backend - ParameterKey: Stage ParameterValue: ${self:provider.stage} - ParameterKey: PrivateSubnets Parameters: ${file(./backend.template.yml):Parameters} Resources: ${file(./backend.template.yml):Resources
  6. 25 切り替え⼿順 Blue→Green STEP Jenkinsジョブ名 役割 1 enable-test-listener テストリスナー(green)を作成し、有効化 2

    docker-push-nginx green環境⽤nginxのdocker imageをPUSH 3 deploy-all-new-infra green環境⽤のリソースをデプロイ 4 replace-live-listener 重み付け変更によりライブリスナーを切り替え 5 remove-all-previous-infra blue環境⽤の削除 切り戻し(Green→Blue) STEP Jenkinsジョブ名 1 rollback-to-previous-version リスナーの重み付けを変更 2 remove-all-previous-infra green環境⽤のリソースを変更