Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
さいつよのEC2オートスケーリング環境CICDパイプライン2022オータム/Strongest...
Search
Tocyuki
October 08, 2022
Programming
4.4k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
さいつよのEC2オートスケーリング環境CICDパイプライン2022オータム/Strongest EC2 Autoscaling Environment CI/CD Pipeline 2022 Autumn
Tocyuki
October 08, 2022
More Decks by Tocyuki
See All by Tocyuki
HashiCorp製品導入の背景と今後の展望/Background of HashiCorp product introduction and future prospects
tocyuki
0
120
AEON TECH HUBで目指すもの/What we aim for with AEON TECH HUB
tocyuki
0
82
マイクロサービス導入により生まれた組織課題に対するソリューションとしてのTiDB/Developers Summit 2024 TiDB Sponsor Session
tocyuki
0
99
イオンがKubernetesを採用してどうなった/What happened when AEON adopted Kubernetes
tocyuki
0
110
FutureStack_Tokyo_NRUG_2周年特別版
tocyuki
0
67
ecspresso愛を語る/I Love ecspresso
tocyuki
0
3.5k
DevOps実装初期フェーズの組織がTerraformとecspressoで求めるAmazon ECS CICDの最適解/AWS ECS CICD with Terraform and ecspresso
tocyuki
11
5.7k
Terraformで作る分析用Aurora Readerインスタンス/Aurora Reader instance for analysis made with Terraform
tocyuki
0
510
Devに力を授けたいSREのあゆみ / SRE that wants to empower developers
tocyuki
4
1.3k
Other Decks in Programming
See All in Programming
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
180
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
710
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
Oxcを導入して開発体験が向上した話
yug1224
4
320
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
200
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
270
Webフレームワークの ベンチマークについて
yusukebe
0
170
C# and C++ Interoperability - cho-dotnetnew
harukasao
0
280
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
560
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
270
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
260
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
160
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
150
GraphQLとの向き合い方2022年版
quramy
50
15k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
250
Abbi's Birthday
coloredviolet
2
8.1k
Context Engineering - Making Every Token Count
addyosmani
9
970
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
66
55k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Transcript
2022/10/08 株式会社トラストバンク CTO室 SRE 香西俊幸 さいつよのEC2オートスケーリング環境 CI/CDパイプライン2022オータム
自己紹介 名前:Tocyuki(としゆき) 所属:株式会社トラストバンク CTO室 SRE 経歴:Network→Infra→SRE 趣味:ギター、柔術(紫帯) SNS:@Tocyuki 2
会社紹介
会社概要 4 資本金 122,243,816円 親会社 株式会社チェンジ(東京証券取引所第一部) 100%連結子会社 子会社 株式会社Orb 決算期 3月 主な事業・サービス ふるさと納税ポータルサイト「ふるさとチョイス」 パブリテック事業 「LoGoシリーズ」 エネルギー事業 ふるさとエネルギーチョイス「えねちょ」
地域通貨事業 「chiica(チーカ)」
Vision 5 目指すは「自立した持続可能な地域をつくる」こと。 トラストバンクが目指す地域共創で実現する経済循環図
6 ふるさと納税事業 パブリテック事業 エネルギー事業 地域通貨事業 主な事業・サービス
SECTION 7 00 さいつよのEC2オートスケーリング環境 CI/CDパイプライン2022オータム
8 さて、みなさん
9 令和も4年に凸入していますが
10 いまどきEC2なんて使ってねーよwww
11 なんて言ってるやつ・・・
12 いねえよなぁ!!?
13 というわけで
今回お話しすること • AWS移行に伴い改善した開発環境について • EC2オートスケーリング環境下でのAMI更新方法について • これらを実現するIaCとCI/CDの実装について 14
もろもろの経緯 • 2020年トラストバンクにCTOが爆誕し、AWSへのサービスイ ンフラ移行を重要施策の一つとして掲げた • 運用監視の大部分をMSPへ委託しており、運用の内製化、 AWS移行を実現すべくSREの採用活動が始まった • トラストバンク一人目のSREとして俺氏が採用されAWS移行 および運用内製化を進める
15
SECTION 16 01 AWS移行に伴い改善した開発環境について
17 開発環境
AWS移行前の開発環境 18 踏み台サーバー 開発者 APサーバー ssh ssh GitHub Enterprise Server
PR作成 git pull Jenkins unit test DBサーバー
AWS移行前の開発環境 19 踏み台サーバー 開発者 APサーバー ssh ssh GitHub Enterprise Server
git pull Jenkins unit test DBサーバー 利用できる環境の数に限りがあり、利用 に待ちが発生することもあり、環境を増 やすにも手作業が発生 PR作成
AWS移行前の開発環境 20 踏み台サーバー 開発者 APサーバー ssh ssh GitHub Enterprise Server
git pull Jenkins unit test DBサーバー ミドルウェア、設定の管理がされておら ず、複数サービスが乗っかっている PR作成
AWS移行前の開発環境 21 踏み台サーバー 開発者 APサーバー ssh ssh GitHub Enterprise Server
git pull Jenkins unit test DBサーバー Linuxユーザー管理という Toil PR作成
AWS移行前の開発環境 22 踏み台サーバー 開発者 APサーバー ssh ssh GitHub Enterprise Server
git pull Jenkins unit test DBサーバー デプロイのためにわざわざサーバーに SSHしてgit pullするのツライ PR作成
AWS移行前の開発環境 23 踏み台サーバー 開発者 APサーバー ssh ssh GitHub Enterprise Server
git pull Jenkins unit test DBサーバー せっかくJenkinsがいるのにUnitTestの みでしか使われていない PR作成
AWS移行前の開発環境のツラミ 24 • 開発環境の数に限りがあり予約制でツライ • 開発が活発になると待ちが発生し、開発環境の増減もすべて手作業となりツライ • 各サーバーのユーザー管理がツライ • Toil
of Toilという感じでツライ • デプロイ方式がツライ • サーバーにSSHしてgit pull実行ツライ • サーバー、ミドルウェアの設定が変更管理されてなくてツライ • 正しい設定が何かわからず、勝手に変更されてもわからなくてツライ • ビルド処理がなくてツライ • サーバー上でcomposer installを実施したり、フロントエンドビルド成果物をGit管理ツライ
25 改善すっぞ 一人目入社SRE奴こと俺氏
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
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でビルド&デプロイができるように
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でのみ接続可能な状態
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で
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で コード化を実施
開発環境改善ポイント 31 • SSHを廃止し、SSM接続オンリーにしてよりセキュアに • 鍵の管理を不要にし、22ポートを開けないように • IAM Identity Centerによりユーザー運用管理工数を削減
• 必要な権限はすべてIAM Identity Centerで一元管理 • 関連リソースはすべてコード化し変更管理を実施 • Ansible+PackerでAMIを、Terraformでその他のAWSリソースをすべてコード化 • JenkinsとCodeDeployによるビルド&デプロイを導入 • ビルド処理もJenkinsで行い、フロントエンドビルド成果物のGit管理から脱出 • デプロイ処理もJenkinsからCodeDeployを実行するよう
32 開発環境の利用待ち問 題と、開発環境構築の Toilも改善しなきゃ 一人目入社SRE奴こと俺氏 PR作成で専用環境立 ち上げるようにしよう 終わりなき改善活動
その他の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
その他の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環境
その他の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
その他の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
その他の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ができるように
その他の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
その他の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
Preview環境による改善ポイント 40 • PR作成すると専用環境が自動構築されるように • 開発環境構築破棄のToilから開放 • 開発環境の利用待ちから開放
41 ローカル開発環境
ローカル開発環境 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
AWS移行前のローカル開発環境のツラミ 43 • メインメンテナが退職済みでブラックボックス化 • 構成が複雑でわかりづらく、変更しづらい状況だった • メンテナンスもあまりされず環境差分が広がってきていた • CI/CDがない
• DockerのBaseImage更新もローカルでの手作業となっていた • 複数システム共通のローカル開発環境として運用 • 変更が他システムの開発へ影響を及ぼしてしまっていた • init.shで複数のアプリリポジトリを同時にgit cloneするという荒業 • 事業部によっては魔改造されたzipがGoogleDriveに置かれ利用されていた
44 改善すっぞ 一人目入社SRE奴こと俺氏
ローカル開発環境 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
ローカル開発環境改善ポイント 46 • Ansible + Packerの資産を活用し環境差分を最小限に • PackerでDocker ImageをビルドしECRをコンテナレジストリとして利用 •
各サービス専用のローカル開発環境として利用可能に • サービスのリポジトリにDockerfile, docker-compose.ymlを配置 • ECRにあるDocker ImageをBase Imageとして利用 • AWS IAM Identity Centerの認証情報を利用 • ECR、SSM等のAWSリソースへの接続に利用 • よりセキュアにユーザー管理運用工数も削減
Section 1. まとめ 47 • PRを作成すると専用環境がCIで構築されるようにした • Ansible, Packer, Terraformなどですべてコード化した
• ローカル開発環境もIaCコード資産を活用して整備した
SECTION 48 02 EC2オートスケーリング環境下での AMI更新方法について
EC2オートスケーリング環境のツラミ 49 AMIの作成と更新 どうしよう 更新したAMIの デプロイどうしよう オートスケーリング環境 下でどのようなAMIを作る のがよいだろうか これらのツラミはToilになりがち
AMI作成の基本方針 50 • Ansibleでミドルウェア、サーバー設定を実施 • PackerでAMIの作成を実施 • 起動時に必要となる処理はUserDataで対応 • アプリケーションはAutoScalingのLifecycleHookによる
CodeDeployで配置するためAMIに含めない
ハマりポイント 51 • AutoScaling LifecycleHookによるCodeDeployを発動さ せるためには最低1回はCodeDeployによるデプロイを成功さ せて、成功したデプロイメントが記録されている状態にする必 要があるので注意
AMIの作成方法 52 • Packer+Ansible ProvisionerでAMIを作成 • Git管理し、CI/CDでテスト、AMIの作成と更新を実施
AWS Cloud オートスケーリングスケールアウトの挙動 53 CodeDeploy Auto Scaling group Instance Instance
Amazon EC2 Auto Scaling ③Lifecycle Hook Instance (new) ④Deploy ②インスタンスを増やす Launch Template ①トリガー発動
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)
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で実現
• AMIはPackerとAnsibleで作成する • アプリケーションはAutoScaling LifecycleHookによる CodeDeployで配置する • 更新したAMIのデプロイはTerraformによる起動テンプレート &AutoScalingGroup更新をトリガーとしたInstance Refreshによるローリングアップデートで行う
Section 2. まとめ 56
SECTION 57 03 これらを実現するIaCとCI/CDについて
利用しているリポジトリと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コードを配置している リポジトリ
59 アプリケーションのCI/CD
アプリケーションのCI/CD 60 PR作成 UnitTest Preview 環境構築 ビルド Code Deploy PRマージ
Preview 環境破棄 コミット追 加 開発者
アプリケーションのCI/CD 61 PR作成 UnitTest Preview 環境構築 ビルド Code Deploy PRマージ
Preview 環境破棄 コミット追 加 開発者
アプリケーションのCI/CD 62 Jenkins GitHub Enterprise Server 開発者 Terraform (Preview環境) Preview環境リソース
CodeDeploy EC2 S3 ELB Preview環境構築(PR作成時) PR作成 terraform applyを実 行し、Preview環境リ ソースを構築 UnitTest UnitTest実行 ビルド後、CodeDeployを キックし、アプリケーション のデプロイを実施
アプリケーションのCI/CD 63 PR作成 UnitTest Preview 環境構築 ビルド Code Deploy PRマージ
Preview 環境破棄 コミット追 加 開発者
アプリケーションのCI/CD 64 Jenkins GitHub Enterprise Server 開発者 Terraform (Preview環境) Preview環境リソース
CodeDeploy EC2 S3 ELB Preview環境構築(コミット追加時) コミット 追加 terraform applyを実 行するが、差分なしで 進む UnitTest UnitTest実行 ビルド後、CodeDeployを キックし、アプリケーション のデプロイを実施
アプリケーションのCI/CD 65 PR作成 UnitTest Preview 環境構築 ビルド Code Deploy PRマージ
Preview 環境破棄 コミット追 加 開発者
アプリケーションのCI/CD 66 Jenkins GitHub Enterprise Server 開発者 Preview環境リソース CodeDeploy EC2
S3 ELB Preview環境破棄(PRマージ時) PRマージ terraform destroyを 実行し、Preview環境 リソースを破棄 Terraform (Preview環境)
アプリケーションのCI/CD 67 開発環境 GitHub Enterprise Server 開発者 PRマージ 開発者 ジョブ実行
Jenkins CodeDeploy EC2 CodeDeploy をキック デプロイ実行
68 Ansible+PackerのCI/CD
Ansible+PackerのCI/CD 69 PR作成 各種チェッ ク PRマージ リリース PR作成 Instance Refresh
Code Deploy リリース PRマージ Packer ビルド (Docker) Packer ビルド (AMI) 起動テン プレート更 新 Auto Scaling Group 更新 ECR プッシュ SRE&開発者
Ansible+PackerのCI/CD 70 PR作成 各種チェッ ク PRマージ リリース PR作成 Instance Refresh
Code Deploy リリース PRマージ Packer ビルド (Docker) Packer ビルド (AMI) Auto Scaling Group 更新 ECR プッシュ SRE&開発者 起動テン プレート更 新
Ansible+PackerのCI/CD 71 PR作成 各種チェッ ク PRマージ リリース PR作成 Instance Refresh
Code Deploy リリース PRマージ Packer ビルド (Docker) Packer ビルド (AMI) Auto Scaling Group 更新 ECR プッシュ SRE&開発者 起動テン プレート更 新
Ansible+PackerのCI/CD 72 デプロイ用PRの自動作成 GitHub Actions GitHub Enterprise Cloud SRE&開発者 git-pr-releaseでリリース用のPRを
作成し、dev/stg/prd環境それぞれ へのリリースPRマージでデプロイが できるようにする mainブランチへ PRマージ
Ansible+PackerのCI/CD 73 PR作成 各種チェッ ク PRマージ リリース PR作成 Instance Refresh
Code Deploy リリース PRマージ Packer ビルド (Docker) Packer ビルド (AMI) Auto Scaling Group 更新 ECR プッシュ SRE&開発者 起動テン プレート更 新
74 AMIの更新 GitHub Actions GitHub Enterprise Cloud SRE&開発者 AMI PackerのAnsible
Provisionerで Ansibleを実行させる ECR ローカル環境用のDockerイメージ ビルドとAMIの作成を実行 Ansible+PackerのCI/CD リリースPRマージ ECRへのプッシュを実行
Ansible+PackerのCI/CD 75 PR作成 各種チェッ ク PRマージ リリース PR作成 Instance Refresh
Code Deploy リリース PRマージ Packer ビルド (Docker) Packer ビルド (AMI) 起動テン プレート更 新 Auto Scaling Group 更新 ECR プッシュ SRE&開発者
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の起動テン プレートバージョン を更新
Ansible+PackerのCI/CD 77 PR作成 各種チェッ ク PRマージ リリース PR作成 Instance Refresh
Code Deploy リリース PRマージ Packer ビルド (Docker) Packer ビルド (AMI) 起動テン プレート更 新 Auto Scaling Group 更新 ECR プッシュ SRE&開発者
②更新した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マージ
• Preview環境はTerraformを活用して実装 • Ansible変更のCI/CDは以下の流れで実施 • git-pr-releaseで作成したデプロイ用PRのマージ • Packer+AnsibleによるAMIの更新 • Terraformによる起動テンプレートの更新
• TerraformによるAuto Scaling Groupの更新 • Instance Refreshによるインスタンスの入れ替え • CodeDeployによるアプリケーションのデプロイ Section 3. まとめ 79
SECTION 80 04 まとめ
• AWS移行に伴い開発環境を改善した • OSS, IaC, CI/CD等の様々な技術を組み合わせることで 「さいつよ(?)」なEC2オートスケーリング環境が作れた • Infrastructure as
Codeを実践することにより様々な部分で アーキテクチャ選択の幅が広がり、様々な要件に対して柔軟 な改善活動を実現することができた • AWSとIaCは相性抜群なので是非実践してみよう まとめ 81
None