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

IaCで全てが上手くいくと思うなよ_失敗事例のご紹介.pdf

mokonist
July 08, 2021
9.3k

 IaCで全てが上手くいくと思うなよ_失敗事例のご紹介.pdf

mokonist

July 08, 2021
Tweet

Transcript

  1. 2 ⾃⼰紹介 ⾨別 優多 - moko クラスメソッド株式会社 AWS事業本部 コンサルティング部 ソリューションアーキテクト

    2020 APN AWS Top Engineer 2021 APN AWS Top Engineer 2021 APN ALL AWS Certifications Engineer 前職: ECサイトのSREっぽい事 ⼊社: 2019/07 好きなIaCツール: TerraformたまにCDK, CFn 好きなAWSサービス: AppSync Twitter/GitHub: @mokocm
  2. 27 あるある失敗例 | ⼿動オペレーションで破綻 ・network.yml︓ VPC/Subnetのスタック ・サブネットIDを出⼒ ・ec2.yml︓ EC2とSecurity Groupのスタック

    ・network.ymlからサブネットIDを参照 ・EC2のIDを出⼒ ・alb.yml︓ ALBとTargetGroupのスタック ・network.ymlからサブネットIDを参照 ・ec2.ymlからEC2のIDを参照 上のスタックから順番にデプロイする必要がある
  3. 28 あるある失敗例 | ⼿動オペレーションで破綻 ・network.yml︓ VPC/Subnetのスタック ・サブネットIDを出⼒ ・ec2.yml︓ EC2とSecurity Groupのスタック

    ・network.ymlからサブネットIDを参照 ・EC2のIDを出⼒ ・alb.yml︓ ALBとTargetGroupのスタック ・network.ymlからサブネットIDを参照 ・ec2.ymlからEC2のIDを参照 ダウンタイムなしでEC2を⼊れ替えたいとなったらどうする︖
  4. 29 あるある失敗例 | ⼿動オペレーションで破綻 ・network.yml︓ VPC/Subnetのスタック ・サブネットIDを出⼒ ・ec2.yml︓ EC2とSecurity Groupのスタック

    ・network.ymlからサブネットIDを参照 ・EC2のIDを出⼒ ・alb.yml︓ ALBとTargetGroupのスタック ・network.ymlからサブネットIDを参照 ・ec2.ymlからEC2のIDを参照 1. ec2.ymlで新しいEC2を作る 2. alb.ymlで新しいEC2をターゲッ トグループへ追加する 3. 正常にヘルスチェックが通って居 ることを確認して、alb.ymlから古 いEC2を削除する 4. ec2.ymlで古いEC2を削除する
  5. 41 3. 2 IaCもCI/CDする ・Gitを適切に利⽤する バージョン管理システムは偉⼤。 Pull Requestをフル活⽤してレビューをきちんとする ・CI/CDをきちんと整える Linterとか⼊れるとPull

    Requestの時点でテストしてくれる のでオススメ Mergeしたら⾃動でデプロイが⾛るようにする。 ⼿動デプロイは⽢え。オペミスの根本的な原因。 普通のアプリケーション開発と同じように扱う。
  6. 47 3. 3 AWS環境は素⼿で触らない ・AWS環境は素⼿で触らない(超重要) Pull Requestで承認されたリソースだけを⾃動でデプロイし てるのに、⼿動でAWS環境を触るとこれまでの苦労が⽔の 泡。 もちろんAWS環境の更新差分をコードに起こして何も無

    かったことにできるけど、不⽑なのでやめましょう。 ・マネコンで使うIAM権限はReadOnlyにする 本当に必要な場合にのみAdmin権限等を取得できるフロー にして、物理的に触れないようにしてしまう。 AWS環境は素⼿で絶対に触らない
  7. 51 3. 5 アプリのデプロイとIaCは別で考える ・アプリケーションのデプロイはアプリケーションの リポジトリ内のCI/CDパイプラインで完結させるべき デプロイのために毎回CloudFormation/Terraformをこねくり回す のはしんどいので分離する。 ・インフラとアプリの境界線をきちんと引く AutoScalingでAMIを⼊れ替える例)

    ・インフラ︓VPC, Subnet, EC2, AutoScaling, Codeシリーズ初期設定 ・アプリ︓PackerでAMI作ってCodeシリーズを直接叩く ・Golden AMIにするかuser-dataにするかは好み AWS CDK / Copilot / SAMなどアプリケーションとセット でインフラを作れるツールの場合はセットで扱う。
  8. 54