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

ゼロからはじめる Infrastructure as Code ~SIer企業がAWSで⾃社Webサービスを⽴ち上げて2年間運⽤してきた話~ / Infrastructure as code starting from scratch

ゼロからはじめる Infrastructure as Code ~SIer企業がAWSで⾃社Webサービスを⽴ち上げて2年間運⽤してきた話~ / Infrastructure as code starting from scratch

JAWS DAYS 2020のオンライン登壇で使用した発表資料です。

Hironori Yokoyama

March 14, 2020
Tweet

More Decks by Hironori Yokoyama

Other Decks in Technology

Transcript

  1. 3

  2. 8

  3. 9

  4. 10

  5. 15

  6. 20

  7. 21

  8. 32

  9. クラスメソッドさんブログより [レポート]What’s New in AWS CloudFormation #reinvent #DOP408 https://dev.classmethod.jp/cloud/aws/cloud-formation-dop408/ Q:

    永遠にベータのCloudFormerはいつアップデートされるんです か︖ A: よく聞いてくれたね笑 残念ながらCloudFormarがこれからア ップデートされることはありません。サードパーティ製の Former2というWebベースのサービスがあるのですが、これが⾮ 常によくできているのでそれを使ってください。 “ “ 34
  10. 36

  11. 出⼒したテンプレート例(vpc.yml) AWSTemplateFormatVersion: "2010-09-09" Metadata: Generator: "former2" Description: "" Resources: EC2VPC:

    Type: "AWS::EC2::VPC" Properties: CidrBlock: "10.0.0.0/16" EnableDnsSupport: true EnableDnsHostnames: true InstanceTenancy: "default" Tags: - Key: "Name" Value: "stage" 57
  12. 75

  13. [Tips] 複数の環境に対応させる Parameters でスタック実⾏時の引数として受け取り変数化する CloudFormationの組み込み関数 !Sub を使⽤する Parameters: ENV: Type:

    String # 例: "staging" Resources: VPC: Type: 'AWS::EC2::VPC' Properties: Tags: - Key: Name Value: !Sub "${ENV}-vpc" # staging-vpc 76
  14. [Tips] 作成したリソース名を出⼒する Outputs で出⼒して、クロススタック参照できるようにする 他のスタックから Name を指定すると Value を参照可能 Outputs:

    VPC: Value: !Ref VPC Export: Name: !Sub "${ENV}-VPC" # staging-vpc VPCCIDR: Value: !Ref VPCCIDR # 10.0.0.0/16 Export: Name: !Sub "${ENV}-VPCCIDR" # staging-VPCCIDR 78
  15. 80

  16. [Tips] クロススタック参照を使う Outputs: PublicSubnet1c: Value: !Ref PublicSubnet1c Export: Name: !Sub

    "${ENV}-PublicSubnet1c" # staging-PublicSubnet1c Fn::ImportValue 関数で、別スタックから Outputs の Value を参照 Resources: NATGateway1c: Type: AWS::EC2::NatGateway Properties: SubnetId: Fn::ImportValue: !Sub "${ENV}-PublicSubnet1c" # staging-PublicSubnet1c 81
  17. 83

  18. [Tips] DBのパラメータもコード化 RDSの設定を容易にする バックアップのポリシー、パラメータグループ、MultiAZ等 rds: Type: 'AWS::RDS::DBInstance' Properties: AllocatedStorage: '20'

    DBInstanceClass: db.t3.micro BackupRetentionPeriod: 14 PreferredBackupWindow: '19:00-19:30' PreferredMaintenanceWindow: 'sun:18:00-sun:18:30' DBInstanceIdentifier: !Sub "${ENV}-db" # Staging-db MultiAZ: true 84
  19. 86

  20. [Tips] ⼿動設定が⾯倒なものをコード化 EC2のロール設定 CodeDeployエージェントのインストール Type: 'AWS::IAM::Role' Properties: ManagedPolicyArns: - 'arn:aws:iam::aws:policy/service-role/AWSCodeDeployRole'

    - 'arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM' Type: 'AWS::EC2::Instance' Properties: UserData: !Base64 | #! /bin/bash sudo apt-get update -y sudo apt-get install ruby -y sudo apt-get install wget wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install 87
  21. 93