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

CloudFormationの運用が 辛くならない方法を本気で考えてみた

Yuki_Kurono
September 16, 2023

CloudFormationの運用が 辛くならない方法を本気で考えてみた

「四国クラウドお遍路 2023 - 四国の外のモノサシを知ってみよう-」登壇資料

Yuki_Kurono

September 16, 2023
Tweet

More Decks by Yuki_Kurono

Other Decks in Technology

Transcript

  1. 自己紹介 twitter(X):@kurono_98 #jawsug #cloudohenro 2 黒野 雄稀 Yuki Kurono アイレット株式会社 名古屋で仕事してマス

    普段はインフラ設計・構築や運用構築に従事 2022/2023 Japan AWS All Certifications Engineers 2023 Japan AWS Top Engineers AWS Community Builders(Cloud Operations)
  2. CloudFormationとは 6 AWSで提供されるInfrastructure as Code(IaC)サービス IaC = コードしてインフラを管理しようぜ! テンプレートと呼ばれるファイルにコードを記述する。 記述方法はJson

    or YAMLを使うことができる。 2011/02/25リリース(御年12歳) #jawsug #cloudohenro AWSTemplateFormatVersion: '2010-09-09' Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 Virtual private cloud (VPC) デプロイ
  3. なにが辛いと感じるのか • スタックが肥大化しがち • 冗長的な記述が多い • トライ&エラーに時間がかかる • 更新時に変更される部分が分かりにくいとかもあるけど...w 8

    自分なりに何故辛いと感じるのか、何故敬遠してしまうのか考えてみました。 以下の3大要素が自分の中では辛く感じている部分というのが分かりました。 #jawsug #cloudohenro
  4. 冗長的な記述が多くなる問題 11 CloudFormationの従来の書き方だと同じリソースを複数回定義する必要があ る。S3を100個作りたいとかなった時に絶望する。(これは無いと思うけど) #jawsug #cloudohenro ×100 AWSTemplateFormatVersion: '2010-09-09' Resources:

    - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" AWSTemplateFormatVersion: '2010-09-09' Resources: - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" AWSTemplateFormatVersion: '2010-09-09' Resources: - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" AWSTemplateFormatVersion: '2010-09-09' Resources: - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: "BucketName" - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: 死
  5. 冗長的な記述が多くなる問題 12 ForEachを使うことでかなり記述量を抑えることが可能に。 それでも動的に渡すBacket名などは記述する必要はある。Mappingsを並行して 使用することを心からオススメする。 #jawsug #cloudohenro ×100 AWSTemplateFormatVersion: 2010-09-09

    Transform: "AWS::LanguageExtensions" Resources: "Fn::ForEach::BucketLoopName": - BucketName - - bucketkurono1 - bucketkurono2 - bucketname ・・・100まで - "S3${BucketName}": Type: "AWS::S3::Bucket" Properties: BucketName: !Ref BucketName 流石にまだ良い
  6. 16