$30 off During Our Annual Pro Sale. View Details »

さいつよのEC2オートスケーリング環境CICDパイプライン2022オータム/Strongest EC2 Autoscaling Environment CI/CD Pipeline 2022 Autumn

Tocyuki
October 08, 2022

さいつよのEC2オートスケーリング環境CICDパイプライン2022オータム/Strongest EC2 Autoscaling Environment CI/CD Pipeline 2022 Autumn

Tocyuki

October 08, 2022
Tweet

More Decks by Tocyuki

Other Decks in Programming

Transcript

  1. 2022/10/08
    株式会社トラストバンク CTO室 SRE 香西俊幸
    さいつよのEC2オートスケーリング環境
    CI/CDパイプライン2022オータム

    View Slide

  2. 自己紹介
    名前:Tocyuki(としゆき)
    所属:株式会社トラストバンク
       CTO室 SRE
    経歴:Network→Infra→SRE
    趣味:ギター、柔術(紫帯)
    SNS:@Tocyuki
    2

    View Slide

  3. 会社紹介

    View Slide

  4. 会社概要
    4
    資本金 122,243,816円
    親会社 株式会社チェンジ(東京証券取引所第一部) 100%連結子会社
    子会社 株式会社Orb
    決算期 3月
    主な事業・サービス
     ふるさと納税ポータルサイト「ふるさとチョイス」
     パブリテック事業 「LoGoシリーズ」
     エネルギー事業  ふるさとエネルギーチョイス「えねちょ」
     地域通貨事業   「chiica(チーカ)」

    View Slide

  5. Vision
    5
    目指すは「自立した持続可能な地域をつくる」こと。
    トラストバンクが目指す地域共創で実現する経済循環図

    View Slide

  6. 6
    ふるさと納税事業 パブリテック事業
    エネルギー事業
    地域通貨事業
    主な事業・サービス

    View Slide

  7. SECTION
    7
    00 さいつよのEC2オートスケーリング環境
    CI/CDパイプライン2022オータム

    View Slide

  8. 8
    さて、みなさん

    View Slide

  9. 9
    令和も4年に凸入していますが

    View Slide

  10. 10
    いまどきEC2なんて使ってねーよwww

    View Slide

  11. 11
    なんて言ってるやつ・・・

    View Slide

  12. 12
    いねえよなぁ!!?

    View Slide

  13. 13
    というわけで

    View Slide

  14. 今回お話しすること
    • AWS移行に伴い改善した開発環境について
    • EC2オートスケーリング環境下でのAMI更新方法について
    • これらを実現するIaCとCI/CDの実装について
    14

    View Slide

  15. もろもろの経緯
    • 2020年トラストバンクにCTOが爆誕し、AWSへのサービスイ
    ンフラ移行を重要施策の一つとして掲げた
    • 運用監視の大部分をMSPへ委託しており、運用の内製化、
    AWS移行を実現すべくSREの採用活動が始まった
    • トラストバンク一人目のSREとして俺氏が採用されAWS移行
    および運用内製化を進める
    15

    View Slide

  16. SECTION
    16
    01 AWS移行に伴い改善した開発環境について

    View Slide

  17. 17
    開発環境

    View Slide

  18. AWS移行前の開発環境
    18
    踏み台サーバー
    開発者
    APサーバー
    ssh
    ssh
    GitHub Enterprise Server
    PR作成
    git pull
    Jenkins
    unit test
    DBサーバー

    View Slide

  19. AWS移行前の開発環境
    19
    踏み台サーバー
    開発者
    APサーバー
    ssh
    ssh
    GitHub Enterprise Server
    git pull
    Jenkins
    unit test
    DBサーバー
    利用できる環境の数に限りがあり、利用
    に待ちが発生することもあり、環境を増
    やすにも手作業が発生
    PR作成

    View Slide

  20. AWS移行前の開発環境
    20
    踏み台サーバー
    開発者
    APサーバー
    ssh
    ssh
    GitHub Enterprise Server
    git pull
    Jenkins
    unit test
    DBサーバー
    ミドルウェア、設定の管理がされておら
    ず、複数サービスが乗っかっている
    PR作成

    View Slide

  21. AWS移行前の開発環境
    21
    踏み台サーバー
    開発者
    APサーバー
    ssh
    ssh
    GitHub Enterprise Server
    git pull
    Jenkins
    unit test
    DBサーバー
    Linuxユーザー管理という Toil
    PR作成

    View Slide

  22. AWS移行前の開発環境
    22
    踏み台サーバー
    開発者
    APサーバー
    ssh
    ssh
    GitHub Enterprise Server
    git pull
    Jenkins
    unit test
    DBサーバー
    デプロイのためにわざわざサーバーに
    SSHしてgit pullするのツライ
    PR作成

    View Slide

  23. AWS移行前の開発環境
    23
    踏み台サーバー
    開発者
    APサーバー
    ssh
    ssh
    GitHub Enterprise Server
    git pull
    Jenkins
    unit test
    DBサーバー
    せっかくJenkinsがいるのにUnitTestの
    みでしか使われていない
    PR作成

    View Slide

  24. AWS移行前の開発環境のツラミ
    24
    • 開発環境の数に限りがあり予約制でツライ
    • 開発が活発になると待ちが発生し、開発環境の増減もすべて手作業となりツライ
    • 各サーバーのユーザー管理がツライ
    • Toil of Toilという感じでツライ
    • デプロイ方式がツライ
    • サーバーにSSHしてgit pull実行ツライ
    • サーバー、ミドルウェアの設定が変更管理されてなくてツライ
    • 正しい設定が何かわからず、勝手に変更されてもわからなくてツライ
    • ビルド処理がなくてツライ
    • サーバー上でcomposer installを実施したり、フロントエンドビルド成果物をGit管理ツライ

    View Slide

  25. 25
    改善すっぞ
    一人目入社SRE奴こと俺氏

    View Slide

  26. Auto Scaling group
    開発環境
    AWS移行後の改善した開発環境
    26
    開発者
    GitHub Enterprise Server
    PR作成
    Jenkins
    CodeDeploy
    EC2
    S3
    ELB
    create deployment
    deploy
    create revision
    ssm
    DB
    IAM Identity Center
    認証
    build
    unittest

    View Slide

  27. Auto Scaling group
    開発環境
    AWS移行後の改善した開発環境
    27
    開発者
    GitHub Enterprise Server
    PR作成
    Jenkins
    CodeDeploy
    EC2
    S3
    ELB
    create deployment
    deploy
    create revision
    ssm
    DB
    IAM Identity Center
    認証
    build
    unittest
    Jenkinsでビルド&デプロイができるように

    View Slide

  28. Auto Scaling group
    開発環境
    AWS移行後の改善した開発環境
    28
    開発者
    GitHub Enterprise Server
    PR作成
    Jenkins
    CodeDeploy
    EC2
    S3
    ELB
    create deployment
    deploy
    create revision
    ssm
    DB
    IAM Identity Center
    認証
    build
    unittest
    EC2にはSSMでのみ接続可能な状態

    View Slide

  29. Auto Scaling group
    開発環境
    AWS移行後の改善した開発環境
    29
    開発者
    GitHub Enterprise Server
    PR作成
    Jenkins
    CodeDeploy
    EC2
    S3
    ELB
    create deployment
    deploy
    create revision
    ssm
    DB
    IAM Identity Center
    認証
    build
    unittest
    ユーザー管理はAWS IAM Identity Centerで

    View Slide

  30. Auto Scaling group
    開発環境
    AWS移行後の改善した開発環境
    30
    開発者
    GitHub Enterprise Server
    PR作成
    Jenkins
    CodeDeploy
    EC2
    S3
    ELB
    create deployment
    deploy
    create revision
    ssm
    DB
    IAM Identity Center
    認証
    build
    unittest
    AMIはAnsible+Packerでコード化し、
    その他のAWSリソースはTerraformで
    コード化を実施

    View Slide

  31. 開発環境改善ポイント
    31
    • SSHを廃止し、SSM接続オンリーにしてよりセキュアに
    • 鍵の管理を不要にし、22ポートを開けないように
    • IAM Identity Centerによりユーザー運用管理工数を削減
    • 必要な権限はすべてIAM Identity Centerで一元管理
    • 関連リソースはすべてコード化し変更管理を実施
    • Ansible+PackerでAMIを、Terraformでその他のAWSリソースをすべてコード化
    • JenkinsとCodeDeployによるビルド&デプロイを導入
    • ビルド処理もJenkinsで行い、フロントエンドビルド成果物のGit管理から脱出
    • デプロイ処理もJenkinsからCodeDeployを実行するよう

    View Slide

  32. 32
    開発環境の利用待ち問
    題と、開発環境構築の
    Toilも改善しなきゃ
    一人目入社SRE奴こと俺氏
    PR作成で専用環境立
    ち上げるようにしよう
    終わりなき改善活動

    View Slide

  33. その他のAWS
    リソース
    Preview環境
    そして誕生したPreview環境
    33
    開発者
    GitHub Enterprise Server
    PR作成
    Jenkins
    CodeDeploy
    EC2
    S3
    ELB
    terraform apply
    create deployment
    deploy
    create revision
    DB
    Launch
    Template
    IAM Identity Center
    認証
    build & unittest
    ssm

    View Slide

  34. その他のAWS
    リソース
    Preview環境
    34
    開発者
    GitHub Enterprise Server
    PR作成
    Jenkins
    CodeDeploy
    EC2
    S3
    ELB
    terraform apply
    create deployment
    deploy
    create revision
    PRを作成するとUnitTestと共にJenkinsで
    TerraformによるPreview環境構築、ビルド
    処理、CodeDeployによるPRブランチのアプ
    リケーションがデプロイされる
    Launch
    Template
    DB
    IAM Identity Center
    認証
    build & unittest
    ssm
    そして誕生したPreview環境

    View Slide

  35. その他のAWS
    リソース
    Preview環境
    35
    開発者
    GitHub Enterprise Server
    PR作成
    Jenkins
    CodeDeploy
    EC2
    S3
    ELB
    terraform apply
    create deployment
    deploy
    create revision
    構築したEC2にはSSMでのみ接続可能な状態
    Launch
    Template
    DB
    認証
    IAM Identity Center
    認証
    build & unittest
    そして誕生したPreview環境
    ssm

    View Slide

  36. その他のAWS
    リソース
    Preview環境
    36
    開発者
    GitHub Enterprise Server
    PR作成
    Jenkins
    CodeDeploy
    EC2
    S3
    ELB
    terraform apply
    create deployment
    deploy
    create revision
    ユーザー権限管理は AWS IAM Identity Centerにて実施
    Launch
    Template
    DB
    認証
    IAM Identity Center
    認証
    build & unittest
    そして誕生したPreview環境
    ssm

    View Slide

  37. その他のAWS
    リソース
    Preview環境
    37
    開発者
    GitHub Enterprise Server
    PR作成
    Jenkins
    CodeDeploy
    EC2
    S3
    ELB
    terraform apply
    create deployment
    deploy
    create revision
    Launch
    Template
    DB
    IAM Identity Center
    認証
    build & unittest
    そして誕生したPreview環境
    ssm
    Preview環境用のAWSリソースは
    Terraformでコード化してJenkinsによる
    Apply&Destroyができるように

    View Slide

  38. その他のAWS
    リソース
    Preview環境
    38
    開発者
    GitHub Enterprise Server
    PR
    Merge
    Jenkins
    CodeDeploy
    EC2
    S3
    ELB
    Launch
    Template
    PRマージ or 日次のバッチでTerraformによるリ
    ソース削除が行われる
    DB
    IAM Identity Center
    そして誕生したPreview環境
    terraform destroy

    View Slide

  39. その他のAWS
    リソース
    Preview環境
    39
    開発者
    GitHub Enterprise Server
    PR
    Merge
    Jenkins
    CodeDeploy
    EC2
    S3
    ELB
    Launch
    Template
    PRマージ or 日次のバッチでTerraformによるリ
    ソース削除が行われる
    DB
    IAM Identity Center
    そして誕生したPreview環境
    terraform destroy

    View Slide

  40. Preview環境による改善ポイント
    40
    • PR作成すると専用環境が自動構築されるように
    • 開発環境構築破棄のToilから開放
    • 開発環境の利用待ちから開放

    View Slide

  41. 41
    ローカル開発環境

    View Slide

  42. ローカル開発環境
    AWS移行前のローカル開発環境
    42
    Application 1
    Application 2
    ローカル開発環境
    Application 3
    開発者
    init.sh
    Docker Base Image
    git clone
    git clone
    git clone
    git clone
    docker
    pull
    踏み台サーバー
    DBサーバー
    ssh port forwarding
    docker
    push
    docker compose up

    View Slide

  43. AWS移行前のローカル開発環境のツラミ
    43
    • メインメンテナが退職済みでブラックボックス化
    • 構成が複雑でわかりづらく、変更しづらい状況だった
    • メンテナンスもあまりされず環境差分が広がってきていた
    • CI/CDがない
    • DockerのBaseImage更新もローカルでの手作業となっていた
    • 複数システム共通のローカル開発環境として運用
    • 変更が他システムの開発へ影響を及ぼしてしまっていた
    • init.shで複数のアプリリポジトリを同時にgit cloneするという荒業
    • 事業部によっては魔改造されたzipがGoogleDriveに置かれ利用されていた

    View Slide

  44. 44
    改善すっぞ
    一人目入社SRE奴こと俺氏

    View Slide

  45. ローカル開発環境
    AWS移行後のローカル開発環境
    45
    Application 2
    開発者
    Ansible
    Repository
    git clone
    docker
    pull
    DB
    EC2
    ECR
    docker
    push
    Application 3
    Application 1
    git clone
    git clone
    IAM Identity Center
    認証
    ssm port forwarding
    docker compose up

    View Slide

  46. ローカル開発環境改善ポイント
    46
    • Ansible + Packerの資産を活用し環境差分を最小限に
    • PackerでDocker ImageをビルドしECRをコンテナレジストリとして利用
    • 各サービス専用のローカル開発環境として利用可能に
    • サービスのリポジトリにDockerfile, docker-compose.ymlを配置
    • ECRにあるDocker ImageをBase Imageとして利用
    • AWS IAM Identity Centerの認証情報を利用
    • ECR、SSM等のAWSリソースへの接続に利用
    • よりセキュアにユーザー管理運用工数も削減

    View Slide

  47. Section 1. まとめ
    47
    • PRを作成すると専用環境がCIで構築されるようにした
    • Ansible, Packer, Terraformなどですべてコード化した
    • ローカル開発環境もIaCコード資産を活用して整備した

    View Slide

  48. SECTION
    48
    02 EC2オートスケーリング環境下での
     AMI更新方法について

    View Slide

  49. EC2オートスケーリング環境のツラミ
    49
    AMIの作成と更新
    どうしよう
    更新したAMIの
    デプロイどうしよう
    オートスケーリング環境
    下でどのようなAMIを作る
    のがよいだろうか
    これらのツラミはToilになりがち

    View Slide

  50. AMI作成の基本方針
    50
    • Ansibleでミドルウェア、サーバー設定を実施
    • PackerでAMIの作成を実施
    • 起動時に必要となる処理はUserDataで対応
    • アプリケーションはAutoScalingのLifecycleHookによる
    CodeDeployで配置するためAMIに含めない

    View Slide

  51. ハマりポイント
    51
    • AutoScaling LifecycleHookによるCodeDeployを発動さ
    せるためには最低1回はCodeDeployによるデプロイを成功さ
    せて、成功したデプロイメントが記録されている状態にする必
    要があるので注意

    View Slide

  52. AMIの作成方法
    52
    • Packer+Ansible ProvisionerでAMIを作成
    • Git管理し、CI/CDでテスト、AMIの作成と更新を実施

    View Slide

  53. AWS Cloud
    オートスケーリングスケールアウトの挙動
    53
    CodeDeploy
    Auto Scaling group
    Instance Instance
    Amazon EC2
    Auto Scaling
    ③Lifecycle Hook
    Instance
    (new)
    ④Deploy
    ②インスタンスを増やす
    Launch
    Template
    ①トリガー発動

    View Slide

  54. AWS Cloud
    更新したAMIのデプロイ
    54
    CodeDeploy
    Auto Scaling group
    Instance Instance
    Amazon EC2
    Auto Scaling
    Instance
    (new)
    ③Instance Refresh
    Launch
    Template
    ④Lifecycle Hook
    ⑤Deploy
    ①Update
    ②Update
    (terminated)

    View Slide

  55. AWS Cloud
    更新したAMIのデプロイ
    55
    CodeDeploy
    Auto Scaling group
    Instance Instance
    Amazon EC2
    Auto Scaling
    Instance
    (new)
    ③Instance Refresh
    Launch
    Template
    ④Lifecycle Hook
    ⑤Deploy
    ①Update
    ②Update
    (terminated)
    ①と②の更新はTerraformで実現

    View Slide

  56. • AMIはPackerとAnsibleで作成する
    • アプリケーションはAutoScaling LifecycleHookによる
    CodeDeployで配置する
    • 更新したAMIのデプロイはTerraformによる起動テンプレート
    &AutoScalingGroup更新をトリガーとしたInstance
    Refreshによるローリングアップデートで行う
    Section 2. まとめ
    56

    View Slide

  57. SECTION
    57
    03 これらを実現するIaCとCI/CDについて

    View Slide

  58. 利用しているリポジトリとCIについて
    58
    リポジトリ ホスティング CI ブランチ戦略 用途
    アプリケーション
    GitHub
    Enterprise Server
    Git Flow
    アプリケーションソースを配置している
    リポジトリ
    Ansible+Packer
    GitHub
    Enterprise Cloud
    GitHub Flow
    EC2サーバープロビジョニング用の
    Ansible Playbookのソースを配置し
    ているリポジトリ
    Terraform
    (Dev/Stg/Prd環境用)
    GitHub
    Enterprise Cloud
    GitHub Flow
    すべてのAWSリソースを管理している
    Terraformコードを配置しているリポジ
    トリ
    Terraform
    (Preview環境用)
    GitHub
    Enterprise Cloud
    GitHub Flow
    PR毎に立ち上がる環境(Preview環
    境)のTerraformコードを配置している
    リポジトリ

    View Slide

  59. 59
    アプリケーションのCI/CD

    View Slide

  60. アプリケーションのCI/CD
    60
    PR作成
    UnitTest
    Preview
    環境構築
    ビルド
    Code
    Deploy
    PRマージ
    Preview
    環境破棄
    コミット追

    開発者

    View Slide

  61. アプリケーションのCI/CD
    61
    PR作成
    UnitTest
    Preview
    環境構築
    ビルド
    Code
    Deploy
    PRマージ
    Preview
    環境破棄
    コミット追

    開発者

    View Slide

  62. アプリケーションのCI/CD
    62
    Jenkins
    GitHub
    Enterprise Server
    開発者
    Terraform
    (Preview環境)
    Preview環境リソース
    CodeDeploy
    EC2
    S3
    ELB
    Preview環境構築(PR作成時)
    PR作成
    terraform applyを実
    行し、Preview環境リ
    ソースを構築
    UnitTest
    UnitTest実行
    ビルド後、CodeDeployを
    キックし、アプリケーション
    のデプロイを実施

    View Slide

  63. アプリケーションのCI/CD
    63
    PR作成
    UnitTest
    Preview
    環境構築
    ビルド
    Code
    Deploy
    PRマージ
    Preview
    環境破棄
    コミット追

    開発者

    View Slide

  64. アプリケーションのCI/CD
    64
    Jenkins
    GitHub
    Enterprise Server
    開発者
    Terraform
    (Preview環境)
    Preview環境リソース
    CodeDeploy
    EC2
    S3
    ELB
    Preview環境構築(コミット追加時)
    コミット
    追加
    terraform applyを実
    行するが、差分なしで
    進む
    UnitTest
    UnitTest実行
    ビルド後、CodeDeployを
    キックし、アプリケーション
    のデプロイを実施

    View Slide

  65. アプリケーションのCI/CD
    65
    PR作成
    UnitTest
    Preview
    環境構築
    ビルド
    Code
    Deploy
    PRマージ
    Preview
    環境破棄
    コミット追

    開発者

    View Slide

  66. アプリケーションのCI/CD
    66
    Jenkins
    GitHub
    Enterprise Server
    開発者
    Preview環境リソース
    CodeDeploy
    EC2
    S3
    ELB
    Preview環境破棄(PRマージ時)
    PRマージ
    terraform destroyを
    実行し、Preview環境
    リソースを破棄
    Terraform
    (Preview環境)

    View Slide

  67. アプリケーションのCI/CD
    67
    開発環境
    GitHub
    Enterprise Server
    開発者
    PRマージ
    開発者
    ジョブ実行
    Jenkins
    CodeDeploy EC2
    CodeDeploy
    をキック
    デプロイ実行

    View Slide

  68. 68
    Ansible+PackerのCI/CD

    View Slide

  69. Ansible+PackerのCI/CD
    69
    PR作成
    各種チェッ

    PRマージ
    リリース
    PR作成
    Instance
    Refresh
    Code
    Deploy
    リリース
    PRマージ
    Packer
    ビルド
    (Docker)
    Packer
    ビルド
    (AMI)
    起動テン
    プレート更

    Auto
    Scaling
    Group
    更新
    ECR
    プッシュ
    SRE&開発者

    View Slide

  70. Ansible+PackerのCI/CD
    70
    PR作成
    各種チェッ

    PRマージ
    リリース
    PR作成
    Instance
    Refresh
    Code
    Deploy
    リリース
    PRマージ
    Packer
    ビルド
    (Docker)
    Packer
    ビルド
    (AMI)
    Auto
    Scaling
    Group
    更新
    ECR
    プッシュ
    SRE&開発者
    起動テン
    プレート更

    View Slide

  71. Ansible+PackerのCI/CD
    71
    PR作成
    各種チェッ

    PRマージ
    リリース
    PR作成
    Instance
    Refresh
    Code
    Deploy
    リリース
    PRマージ
    Packer
    ビルド
    (Docker)
    Packer
    ビルド
    (AMI)
    Auto
    Scaling
    Group
    更新
    ECR
    プッシュ
    SRE&開発者
    起動テン
    プレート更

    View Slide

  72. Ansible+PackerのCI/CD
    72
    デプロイ用PRの自動作成
    GitHub
    Actions
    GitHub
    Enterprise Cloud
    SRE&開発者
    git-pr-releaseでリリース用のPRを
    作成し、dev/stg/prd環境それぞれ
    へのリリースPRマージでデプロイが
    できるようにする
    mainブランチへ
    PRマージ

    View Slide

  73. Ansible+PackerのCI/CD
    73
    PR作成
    各種チェッ

    PRマージ
    リリース
    PR作成
    Instance
    Refresh
    Code
    Deploy
    リリース
    PRマージ
    Packer
    ビルド
    (Docker)
    Packer
    ビルド
    (AMI)
    Auto
    Scaling
    Group
    更新
    ECR
    プッシュ
    SRE&開発者
    起動テン
    プレート更

    View Slide

  74. 74
    AMIの更新
    GitHub
    Actions
    GitHub
    Enterprise Cloud
    SRE&開発者
    AMI
    PackerのAnsible Provisionerで
    Ansibleを実行させる
    ECR
    ローカル環境用のDockerイメージ
    ビルドとAMIの作成を実行
    Ansible+PackerのCI/CD
    リリースPRマージ
    ECRへのプッシュを実行

    View Slide

  75. Ansible+PackerのCI/CD
    75
    PR作成
    各種チェッ

    PRマージ
    リリース
    PR作成
    Instance
    Refresh
    Code
    Deploy
    リリース
    PRマージ
    Packer
    ビルド
    (Docker)
    Packer
    ビルド
    (AMI)
    起動テン
    プレート更

    Auto
    Scaling
    Group
    更新
    ECR
    プッシュ
    SRE&開発者

    View Slide

  76. 76
    更新したAMIのデプロイ
    Launch
    Template
    Terraform
    Auto Scaling Group
    EC2
    GitHub
    Actions
    起動テンプレートと
    Auto Scaling Groupを管理してい
    るTerraformをCheckoutし、対象リ
    ソースのみを更新
    CodeDeploy
    instance refresh
    起動テンプレートの更新をトリガーに
    Instance RefreshによるAuto Scaling
    Group内のインスタンスの入れ替えが行
    われる
    GitHub
    Enterprise Cloud
    SRE&開発者
    lifecycle hook
    最新のAMIを取り込み
    起動テンプレートを
    バージョンアップ
    Ansible+PackerのCI/CD
    リリースPRマージ
    Lifecycle Hookによる
    CodeDeploy実行によりア
    プリケーションデプロイが実
    施される
    Auto Scaling
    Groupの起動テン
    プレートバージョン
    を更新

    View Slide

  77. Ansible+PackerのCI/CD
    77
    PR作成
    各種チェッ

    PRマージ
    リリース
    PR作成
    Instance
    Refresh
    Code
    Deploy
    リリース
    PRマージ
    Packer
    ビルド
    (Docker)
    Packer
    ビルド
    (AMI)
    起動テン
    プレート更

    Auto
    Scaling
    Group
    更新
    ECR
    プッシュ
    SRE&開発者

    View Slide

  78. ②更新したAMIの入れ替え
    ①AMI更新&Dockerイメージを作成
    78
    Launch
    Template
    Terraform
    Auto Scaling Group
    EC2
    GitHub
    Actions CodeDeploy
    instance refresh
    GitHub
    Enterprise Cloud
    SRE&開発者
    lifecycle hook
    AMI
    ECR
    パイプライン化
    Ansible+PackerのCI/CD
    リリースPRマージ

    View Slide

  79. • Preview環境はTerraformを活用して実装
    • Ansible変更のCI/CDは以下の流れで実施
    • git-pr-releaseで作成したデプロイ用PRのマージ
    • Packer+AnsibleによるAMIの更新
    • Terraformによる起動テンプレートの更新
    • TerraformによるAuto Scaling Groupの更新
    • Instance Refreshによるインスタンスの入れ替え
    • CodeDeployによるアプリケーションのデプロイ
    Section 3. まとめ
    79

    View Slide

  80. SECTION
    80
    04 まとめ

    View Slide

  81. • AWS移行に伴い開発環境を改善した
    • OSS, IaC, CI/CD等の様々な技術を組み合わせることで
    「さいつよ(?)」なEC2オートスケーリング環境が作れた
    • Infrastructure as Codeを実践することにより様々な部分で
    アーキテクチャ選択の幅が広がり、様々な要件に対して柔軟
    な改善活動を実現することができた
    • AWSとIaCは相性抜群なので是非実践してみよう
    まとめ
    81

    View Slide

  82. View Slide