SlideShare una empresa de Scribd logo
1 de 71
Descargar para leer sin conexión
AWSマイスターシリーズ
~CloudFormation~


             2012年03月03日
             片山 暁雄( @c9katayama )
             ソリューションアーキテクト
AWSサービス一覧
                            お客様のアプリケーション

 ライブラリ & SDKs                                   IDE プラグイン            デプロイと自動化
                        Web インターフェース
  Java, PHP, .NET,                                 Eclipse         AWS Elastic Beanstalk
    Python, Ruby         Management Console                        AWS CloudFormation
                                                Visual Studio


                                                                  ネットワーク&ルーティング
    認証 & 請求                                                            Amazon VPC
      AWS IAM               モニタリング              スケーリング
                                                                     Amazon Elastic LB
 Identity Federation     Amazon CloudWatch      Auto Scale
                                                                     Amazon Route 53
 Consolidated Billing                                               AWS Direct Connect


 コンテンツ配信                                           分散処理         ワークフロー
                    メッセージ通知        キューイング                                       メール配信
   Amazon                                           Elastic       Simple
                    Amazon SNS     Amazon SQS                                  Amazon SES
  CloudFront                                      MapReduce      Workflow

                                        ストレージ                       データベース
  コンピュータ処理                            Amazon S3
                                                                     Amazon RDS
                                                                  Amazon DynamoDB
       Amazon EC2                    Amazon EBS                    Amazon SimpleDB
                                  AWS Storage Gateway             Amazon Elasticache


                            AWS のグローバルなインフラ
Agenda
 CloudFormationの概要
 スタック
 テンプレート
 Cloud-init
 CloudFormation helpers
 CloudFormer
 その他Tips
 まとめ

               Copyright © 2011 Amazon Web Services
CloudFormationの概要
CloudFormation

 EC2やELBなどを使ったAWSサービスのシステム構築
 を、設定ファイル(テンプレート)を元に行えるサービ
 ス

 テンプレートを自由に作成できるため、自分好みのシス
 テム構成が可能

 テンプレートは、AWSのサービスを操るための新しい
 言語
CloudFormation
                                     テンプレートに基づき
                                      各サービスが起動
                     スタック




                        ElasticLoadBalanceing
テンプレート
                                                   S3

           Cloud
         Formation
                                                   SNS


                            EC2         EC2
                              AutoScaling
                                                CloudWatch
利用シーンと利点
一度テンプレートを作成すれば、同じ構成を再現できる
  開発環境の構築
  Blogシステム、Webシステム、ゲームプラットフォームなど、
   同じ仕組みでアプリやデータが異なるようなもの

ベストプラクティスが盛り込まれたテンプレートが使用可能
  システムアーキテクチャの再利用
  WordPress,Redmineなどが入った、多くのサンプルテンプレ
   ートが提供済み

起動時にパラメータを渡せる
  例えばDBのエンドポイントをEC2に渡せる
利用料金

CloudFormationの利用自体は無料

テンプレートに従って構築された各AWSサービスに対して
課金
スタック
スタック

リソース(EC2インスタンスやS3バケット、RDSインスタン
スなど)の集合のこと

スタック単位でリソースの管理が可能。スタック破棄を実行
すると、スタックにひもづくリソースを破棄することが可能

使用するリソースおよびリソースの構築順は、テンプレート
の依存関係で決定

 スタック           これらを一度に生成・破棄可能

               App      Web
              Server   Server
スタック可能なリソース
    これらをスタックに組み込み、設定を行える
Amazon EC2 Instances                       Amazon Simple Storage Service (S3) Buckets

Amazon Elastic Block Store (EBS) Volumes   Amazon Simple DB Domains

Elastic Load Balancers                     Amazon Simple Queue Service (SQS) Queues

Elastic IP Addresses                       Amazon Simple Notification Service (SNS) Topics

Amazon EC2 Security Groups                 Amazon SNS Subscriptions

Auto Scaling Groups                        Amazon Route 53 DNS Records
Amazon Relational Database Service (RDS)
                                           Amazon CloudFront Distributions
Instances
                                           AWS Identity and Access Management users and
Amazon RDS Security Groups
                                           groups
AWS Elastic Beanstalk                      AWS Identify and Access Management policies

Amazon CloudWatch Alarms
スタック構築方法

AWS ManagementConsoleから構築
コマンドラインツール
  http://aws.amazon.com/developertools/AWS-
   CloudFormation/2555753788650372
Java・.Net・PHPの各種SDK
  Java : http://aws.amazon.com/jp/sdkforjava/
  .NET : http://aws.amazon.com/jp/sdkfornet/
  PHP : http://aws.amazon.com/jp/sdkforphp/
AWS ManagementConsoleから構築-1
demo




                スタックの名称


              ・サンプルテンプレート

              ・ローカルファイルの
                              いずれか
               テンプレート

             ・テンプレートファイルURL
             (同一リージョンのS3上)
AWS ManagementConsoleから構築-2




                  各種パラメータの入力
                  (後で説明)
AWS ManagementConsoleから構築-3




                 スタック構築開始
AWS ManagementConsoleから構築-4




                  スタック構築実行中
AWS ManagementConsoleから構築-5




                  スタック構築完了
                  この時点ですべてのサービスが
                  起動している
テンプレート
{
                         "AWSTemplateFormatVersion" : "2010-09-09",

テンプレート                   "Description" : “Sample",

                         "Parameters" : {
                           "KeyName" : {
                             "Description" : “Sample key,
                             "Type" : "String"
                           }
                         },
                         "Mappings" : {
                         },

                         "Resources" : {

CloudFormationの心臓部
                          "Ec2Instance" : {
                            "Type" : "AWS::EC2::Instance",
                            "Properties" : {
スタック構築の設計図                    "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ],
                              "KeyName" : { "Ref" : "KeyName" },

JSONフォーマットで記述
                              "ImageId" : { "Fn::FindInMap" : [
                                  "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}
                            }
                          },

                             "InstanceSecurityGroup" : {
                               "Type" : "AWS::EC2::SecurityGroup",
                               "Properties" : {
                                 "GroupDescription" : "Enable SSH access via port 22",
                                 "SecurityGroupIngress" : [ {
                                  "IpProtocol" : "tcp",
                                  "FromPort" : "22",
                                  "ToPort" : "22",
                                  "CidrIp" : "0.0.0.0/0"
                                 }]
                               }
                             }
                         }
                     }
テンプレート解説
                                                         テンプレートのバージョン
{                                                         (最新は2010-09-09)
    "AWSTemplateFormatVersion" : “2010-09-09",

    "Description" : "Valid JSON strings up to 4K",     テンプレートの詳細(説明文)

    "Parameters" : {
       set of parameters                                 CloudFormation実行時に
    },                                                 後で変更可能なパラメータを列挙
                                                        (例:DBユーザー名など)
    "Mappings" : {
        set of mappings
     },                                                  Hashtableのようなもの
                                                        キーに応じて値を特定出来る
    "Resources" : {                                  (例:リージョンに応じたAMI番号など)
        set of resources
     },
                                                      EC2やRDSなど、スタックを構成する
    "Outputs" : {                                            リソースを定義
      set of outputs
    }
}                                                      スタック構築後に取得したい値
                                                        (例:アクセスURLなど)
Parameters
{
    "AWSTemplateFormatVersion" : “2010-09-09",

    "Description" : "Valid JSON strings up to 4K",

    "Parameters" : {
       set of parameters                               CloudFormation実行時に
    },                                               後で変更可能なパラメータを列挙
                                                      (例:DBユーザー名など)
    "Mappings" : {
        set of mappings
     },

    "Resources" : {
        set of resources
     },

    "Outputs" : {
      set of outputs
    }
}
Parametersとは
   スタック構築時に値の入力が可能
   データ型、デフォルト値、最小最大値など設定可能


"Parameters" : {
   "Age":{
      "Type":"Number",
      “Default” : “30”,
      “MinValue”: “20”,
      “MaxValue”: “60”,
      "Description":"input your age.“
   },
   "FirstName":{
      "Type":"String",
      "Description":"input your first name.“
   },
}
Parametersのプロパティ
  利用出来るプロパティ

プロパティ                   内容
Type                    データ型 “String” “Number” “CommaDelimitedList”
Default                 デフォルト値
NoEcho                  入力時に*****となる(パスワードなどに使用)
AllowedValues           入力可能値の一覧指定 (例:[“true”,”false”] )
AllowedPattern          正規表現で入力可能パターンを指定(例:[a-zA-Z]*)
MaxLength               最大文字数
MaxValue                最大値
MinValue                最小値
Description             プロパティの詳細説明
ConstraintDescription   入力した値がAllowedPatternやMaxLengthなどの制約
                        に引っかかった時に表示する説明
                        (どのような制約があるかの説明を記述)
Parametersの参照
 入力したパラメータ値は、テンプレート中で “Ref”を使用し
 て参照可能
 ユーザー名、パスワード、ドメインなどの可変部分に便利




                          ここにパラメータ入力値が反映される
                “Resources" : {
                  “MyServer":{
                    “Type":“AWS::EC2::Instance",
                    “Properties” : {
                      “KeyName”: { “Ref” : “Age”},
                      “Tags” : { “Ref” : “FirstName”}
                    }
                  }
                }
Function
    Ref
      パラメータを参照する
    Fn::Base64
      文字列をBase64エンコードする
    Fn::FindInMap
      Mapから値を取り出す
    Fn::GetAtt
      リソースから属性を取り出す
      例:"Fn::GetAtt" : [ "MyELB" , "DNSName"]
    Fn:GetAZs
      指定リージョンのアベイラビリティゾーンを返す
    Fn:Join
      文字列の連結
      “Fn::Join” : [ “:”, [ “a”, “b”, “c” ] ] は 「a:b:c」を返す
      “:”がセパレータ。不要な場合は ”” を定義


http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuid
e/index.html?intrinsic-function-reference.html
Pseudo Parameter
    実行リージョンやスタック名といったパラメータを取得出来る予約語
    AWS::Region
      スタック構築対象のリージョンを取得する
      { “Ref” : “AWS::Region” } で値を取得可能
    AWS::StackName
      スタックの名前を取得する
      { “Ref” : “AWS::StackName” } で値を取得可能

    “Resources" : {
      “MyServer":{
         “Type":“AWS::EC2::Instance",
         “Properties” : {
            “KeyName”: { “Ref” :
    “AWS::StackName”},
            “Tags” : { “Ref” : “AWS::Region”}
         }
      }
    }


http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuid
e/index.html?pseudo-parameter-reference.html
Mappings
{
    "AWSTemplateFormatVersion" : “2010-09-09",

    "Description" : "Valid JSON strings up to 4K",

    "Parameters" : {
       set of parameters
    },

    "Mappings" : {
        set of mappings
     },                                                  Hashtableのようなもの
                                                        キーに応じて値を特定出来る
    "Resources" : {                                  (例:リージョンに応じたAMI番号など)
        set of resources
     },

    "Outputs" : {
      set of outputs
    }
}
Mappingsとは
    キーとバリューのテーブル
    例えば、入力値やリージョンによって値が変わるようなもの
    を決めるような使い方
 "Mappings" : {
   "RegionTable" : {
     "us-east-1" : {                 マッピングを定義
        "AMI" : "ami-           (この例の場合、”RegionTable”という
8c1fece5“,                          マッピングを定義)
        “Key” : “myKey-east”
     },
     "us-west-1" : {             “Fn::FindInTemplate”
        "AMI" : "ami-
3bc9997e“,
        “Key” : “myKey-west”
     },
     "ap-northeast-1" : {
        "AMI" : "ami-
300ca731“,
        “Key” : “myKey-japan”
     }
   }
  },
Mappingsの使い方
    “Fn:FindInMap”で値を取得
    "Fn::FindInMap" : [ "MapName", "Key", "Value"]
    MapName,key,Valueには”Ref”が利用可能
“Resources" : {                                  "Mappings" : {
  “MyServer":{                                     "RegionTable" : {
     “Type":“AWS::EC2::Instance",                    "us-east-1" : {
     “Properties” : {                                   "AMI" : "ami-8c1fece5“,
        “ImageId”: {                                    “Key” : “myKey-east”
              “Fn:FindInMap” : [                     },
                      “RegionTable” ,                "us-west-1" : {
                         { “Ref” : “region” },          "AMI" : "ami-3bc9997e“,
                              “AMI”]                    “Key” : “myKey-west”
                     },                              },
     }                                               "ap-northeast-1" : {
  }                                                     "AMI" : "ami-300ca731“,
}                                                       “Key” : “myKey-japan”
          この例だと、入力された                                }
         regionパラメータによって                           }
        利用するAMIのIDを決定できる                          },
Resources
{
    "AWSTemplateFormatVersion" : “2010-09-09",

    "Description" : "Valid JSON strings up to 4K",

    "Parameters" : {
       set of parameters
    },

    "Mappings" : {
        set of mappings
     },

    "Resources" : {
        set of resources
     },
                                                     EC2やRDSなど、スタックを構成する
    "Outputs" : {                                           リソースを定義
      set of outputs
    }
}
Resourcesとは
     EC2やELB,RDSなど、起動するサービスを設定
     リソース毎に決められたパラメータを設定する

“Resources" : {
   “MyWebServer" : {
     “Type" : “AWS:EC2::Instance”
     “Properties" : {
        “KeyName" : "ami-8c1fece5“,
        “ImageId” : “myKey-east”
     },
     "us-west-1" : {
        "AMI" : "ami-3bc9997e“,
        “Key” : “myKey-west”
     },
     "ap-northeast-1" : {
        "AMI" : "ami-300ca731“,
        “Key” : “myKey-japan”
     }
   }
 },
EC2+SecurityGroupの例
"Resources" : {
   "Ec2Instance" : {                                  リソースタイプ
     "Type" : "AWS::EC2::Instance",
     "Properties" : {
       "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ],
       "KeyName" : { "Ref" : "KeyName" },
       "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}
     }
   },
   "InstanceSecurityGroup" : {                                      リソース毎のプロパティ
     "Type" : "AWS::EC2::SecurityGroup",
     "Properties" : {
       "GroupDescription" : "Enable SSH access via port 22",
       "SecurityGroupIngress" : [ {
         "IpProtocol" : "tcp",
         "FromPort" : "22",
         "ToPort" : "22",
         "CidrIp" : "0.0.0.0/0"
       }]
     }
   }
 }
リソースタイプ
Auto Scaling AutoScalingGroup         AWS::AutoScaling::AutoScalingGroup        Auto Scaling AutoScalingGroup         AWS::AutoScaling::AutoScalingGroup

IAM Access Key                        AWS::IAM::AccessKey                       Auto Scaling LaunchConfiguration      AWS::AutoScaling::LaunchConfiguration

IAM Group                             AWS::IAM::Group                           Auto Scaling Policy                   AWS::AutoScaling::ScalingPolicy

IAM Policy                            AWS::IAM::Policy                          Auto Scaling Trigger                  AWS::AutoScaling::Trigger

IAM Add User to Group                 UserToGroupAddition                       Amazon CloudFormation Stack           AWS::CloudFormation::Stack

IAM User                              AWS::IAM::User                            Amazon CloudFormation WaitCondition   AWS::CloudFormation::WaitCondition
                                                                                Amazon CloudFormation
Elastic Load Balancing LoadBalancer   AWS::ElasticLoadBalancing::LoadBalancer                                         AWS::CloudFormation::WaitConditionHandle
                                                                                WaitConditionHandle

Amazon RDS DBInstance                 AWS::RDS::DBInstance                      Amazon CloudFront Distribution        AWS::CloudFront::Distribution

Amazon RDS DBSecurityGroup            AWS::RDS::DBSecurityGroup                 Amazon CloudWatch                     AWS::CloudWatch::Alarm

Amazon Route 53 Resource Record Set   AWS::Route53::RecordSet                   Amazon EBS Volume                     AWS::EC2::Volume

Amazon Route 53 Resource Record Set                                             Amazon EBS Volume Attachment          AWS::EC2::VolumeAttachment
                                      AWS::Route53::RecordSetGroup
Group
                                                                                Amazon EC2 Elastic IP Address         AWS::EC2::EIP
Amazon S3 Bucket                      AWS::S3::Bucket
                                                                                Amazon EC2 Elastic IP Address
                                                                                                                      AWS::EC2::EIPAssociation
Amazon S3 Bucket Policy               AWS::S3::BucketPolicy                     Association
                                                                                Amazon EC2 Instance                   AWS::EC2::Instance
Amazon SimpleDB Domain                AWS::SDB::Domain
                                                                                Amazon EC2 Security Group             AWS::EC2::SecurityGroup
SNS Topic Policy                      AWS::SNS::TopicPolicy
                                                                                Amazon EC2 Security Group Ingress     AWS::EC2::SecurityGroupIngress
Amazon SNS Subscription               AWS::SNS::Subscription
                                                                                Amazon SQS Queue Policy               AWS::SQS::QueuePolicy
Amazon SNS Topic                      AWS::SNS::Topic
                                                                                Amazon SQS Queue                      AWS::SQS::Queue



    http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/index.h
    tml?aws-template-resource-type-ref.html
Outputs
{
    "AWSTemplateFormatVersion" : “2010-09-09",

    "Description" : "Valid JSON strings up to 4K",

    "Parameters" : {
       set of parameters
    },

    "Mappings" : {
        set of mappings
     },

    "Resources" : {
        set of resources
     },

    "Outputs" : {
      set of outputs
    }
}                                                    スタック構築後に取得したい値
                                                      (例:アクセスURLなど)
Outputsとは

 スタック構築後に取得・表示したい情報の定義

 例えばアクセスURLや、DBの通信先情報、作ったIAMユーザ
 ー名など、あとで使用するもの

 マネジメントコンソールから確認できるので、スタックに関
 する情報を出力すると便利(キーペア名、AZ、インスタン
 スIDなど)
Outputの定義
                                     出力したい名称を定義
"Outputs" : {
"InstanceId" : {
     "Description" : "InstanceId of the newly created EC2 instance",                    説明
     "Value" : { "Ref" : "Ec2Instance" }
   },                                                     値
   "AZ" : {
     "Description" : "Availability Zone of the newly created EC2 instance",
     "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] }
   },
   "ApplicationURL" : {
     "Description" : "URL of running web application",
     "Value" :
         { "Fn::Join":
            ["", [ "http://", { "Fn::GetAtt": [ "Ec2Instance" , "PublicIp"] } , "/index.html"] ] }
   }
 }                                                   Functionを使って文字列を
                                                               加工
Outputの定義
"Outputs" : {
  "InstanceId" : {
     "Description" : "InstanceId of the newly created EC2 instance",
     "Value" : { "Ref" : "Ec2Instance" }
   },
   "AZ" : {
     "Description" : "Availability Zone of the newly created EC2 instance",
     "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] }
   },
   "ApplicationURL" : {
     "Description" : "URL of running web application",
     "Value" :
         { "Fn::Join":
            ["", [ "http://", { "Fn::GetAtt": [ "Ec2Instance" , "PublicIp"] } , "/index.html"] ] }
   }
 }
テンプレートのまとめ

Parameters,Mappings,Resources,Outputsの4つのブロッ
クに定義を記述

可変項目はパラメーター化したり、Mappingで定義

Functionsを使用して、参照や文字連結などの操作が可能

Resourceのパラメータはリソースタイプにより異なる。ドキ
ュメントを利用して定義
  http://docs.amazonwebservices.com/AWSCloudFormation
   /latest/UserGuide/index.html?aws-template-resource-
   type-ref.html
テンプレートTips
 リソース定義にEC2インスタンスが必須ではない
  DB構築だけ、オートスケールだけ、アラーム設定だけでもOK
 参照関係があると、依存関係があるとみなされる。相互参照
 や循環参照はNG(エラーとなる)
 参照関係がある部分は、参照の整合性が取れるよう起動順を
 CloudFormationが決定
 スタックを破棄すると、スタックにひもづくリソースは破棄
 される
  ただし”DeletionPolicy”を”Retain”にすると破棄されない
   "Resources" : {
      "myS3Bucket" : {
        "Type" : "AWS::S3::Bucket",
        "DeletionPolicy" : "Retain"
      }
    }
テンプレートTips

 リソース数が多いと、何のリソースか分からなくなるので、
 Tagsプロパティを使用する

 "MyInstance" : {
   "Type" : "AWS::EC2::Instance",
   "Properties" : {
      "SecurityGroups" : [ { "Ref" : "MySecurityGroup" } ],
      "ImageId" : "ami-20b65349",
     "Tags" : [
         { "Key" : “Name", "Value" : “MyInstance" }
     ]
   }
 }
テンプレートTips

 CloudFormationで作られたリソースには、スタック名など
 のタグが付与される
CloudFormer
CloudFormer
 既に構築済みのシステム構成から、テンプレートを作成する
 ツール
 テンプレート作成のベースとなるテンプレートを構築するの
 に利用可能
 ベータ版



                                 テンプレート


                   CloudFormer

    EC2      EC2

    AutoScaling
CloudFormer実行方法

 https://forums.aws.amazon.com/ann.jspa?annID=10
 48 でテンプレートを入手

 テンプレートからスタックを構築(リージョンは問わず)
 構築後、Outputsに表示されているURLにアクセス
CloudFormer実行方法

 テンプレート化したいリージョンを選ぶと、ウィザード形式
 でリソースの選択が可能
 チェックボックスを入れたリソースを元にテンプレートが完
 成
まとめ
まとめ
CloudFormationを使用すると、システム構成をテンプレー
ト化できる
AmazonLinuxにはOS初期化のための仕組みが用意されてい
る
cloud-initとcfnヘルパー、またchefなどをCloudFormation
と組み合わせると、アプリケーションのセットアップも柔軟
に可能
システム構築の発想を変えてみる
  OSは素材
  テンプレート化で、よりクラウドの特性を生かしたシステム構
   築が可能に!
CloudFormationで
真のクラウドマイスターを目指せ!



          App      Web
         Server   Server
Appendix
Cloud-init
Cloud-init

 AmazonLinuxに入っている、初期設定ツール
   元々はUbuntuで作られたもの
 EC2インスタンスの起動時に、「userdata」として設定した
 スクリプトを呼び出す。
   「#!」 で始まる文字列の場合のみ、スクリプトを実行
 スクリプトを記述できるので、ロケール変更、アプリインス
 トール、ファイル書き換えなどが可能
Cloud-init

                    EC2インスタンス起動




     User Dataに定義
                    Cloud-initがuserdata
                         を読み込む




                    読み込んだスクリプト
                        を実行
Cloud-initの利点と欠点
 利点
 インスタンス起動時に、インスタンスの初期化が可能
  AMIとユーザーデータは分離できるので、AMIの作り込みが不要
   になる
  Apacheインストール済みのAMIを用意すると、OSやApacheの
   バージョンが上がったときに再作成になる


 欠点
 userdataは一度定義すると、書き換えは不可能
  書き換えて再実行が出来ない(後述のスタック更新に使えない)
 設定できるデータ量は、16KByteまで
CloudFormationとの連携
 EC2リソースのプロパティ「UserData」に内容を記載
"MyInstance": {
   "Type": "AWS::EC2::Instance",
   "Properties": {
     "ImageId" : "ami-dcfa4edd",
     "KeyName"        : { "Ref" : "KeyName" },
     "UserData"      : { "Fn::Base64" : { "Fn::Join" : ["", [
        "#!/bin/bashn",
        "log='/tmp/init.log'n",
        "apt-get update &>> $logn",
        "apt-get install -y ruby &>> $logn",
        "cd /tmpn",
        "wget http://rubygems.org/rubygems.tgz &>> $logn",
        "tar zxf rubygems.tgz &>> $logn",
        "cd rubygemsn",
        "ruby setup.rb --no-format-executable &>> $logn",
        ]]
      }
    }
 }
CloudFormationとの連携
 CloudFormationでUserDataを定義すると、定義中にRefや
 Fn::GetAttrを使用することが可能
 例えばRDSのEndPointをUserDataに埋め込むといったこと
 が出来る
"Resources" : {
   "MyInstance": {
     "Type": "AWS::EC2::Instance",
      "Properties": {
       "ImageId" : "ami-dcfa4edd",
       "UserData"        : { "Fn::Base64" : { "Fn::Join" : ["", [
         "#!/bin/bashn",
         "cd /home/ec2-usern",
            { "Fn::Join" : ["", [
               "echo ", {"Fn::GetAtt" : ["DBInstance", "Endpoint.Address"]} , "> db.confn"
             ]]}
        ]]}
       } } },
   "DBInstance" : {
     "Type": "AWS::RDS::DBInstance",
   }
 }
CloudFormation helpers
CloudFormation helpers

 EC2インスタンス初期化時のヘルパースクリプト群
 AmazonLinux正式版(2011.09)以降に搭載
 /opt/aws/bin に格納
     cfn-init
     cfn-get-metadata
     cfn-signal
     cfn-hup
 Python製
cfn-init
 パッケージやファイルのダウンロード、ファイルの生成を行
 うスクリプト
 実行のための設定は、Metadata領域に定義
   sources,packages,files,services
 "Resources": {
  "MyInstance": {
    "Type": "AWS::EC2::Instance",
    "Metadata" : {
      "AWS::CloudFormation::Init" : {
         "config" : {
                                      source,package,files,services
           "sources" : { : },
           "packages" : { : }               の順に実行される
           "files" : { : }
           "services" : { : } }
        }
     },
     "Properties": { : }
   }
cfn-initの設定
 sources
  指定したURLからファイルをダウンロードして展開
  Tar,zip,tar+gzip,tar+bz2
  "sources" : {
     "/etc/myapp" : "https://s3.amazonaws.com/mybucket/myapp.tar.gz"
  }

 packages
  パッケージシステムを使用してアプリをインストール
  Apt,yum,rubygems,python,rpm
  "packages" : {
    "yum" : {              最新版
      "httpd" : [],
      "php" : [],
                             バージョン
    },
                               指定
    "rubygems" : {
      "chef" : [ "0.10.2" ],
    }
  }
cfn-initの設定
 files
   指定パスへのファイルの生成

   "files" : {                                 ファイルパス
        "/app/db.conf" : {
          "content" : { "Fn::Join" : ["", [
            "db.name=", {"Ref" : "DBName"}, "n",          ファイルの中身
            "db.user=", {"Ref" : "DBUser"}, "n",              を生成
            "db.pass=", {"Ref" : "DBPassword" },"n",
            "db.host=", {"Fn::GetAtt" : ["DBInstance", "Endpoint.Address"]}, "n",
          ]] },
          "mode" : "000644",
          "owner" : "root",
          "group" : "root"
        }                                           S3などから取得
       "/etc/myapp/myapp-init.pp" : {
           "source" : "https://s3.amazonaws.com/myapp/myapp-init.pp",
           "mode" : "100644",
           "owner" : "root",
           "group" : "wheel"
       }
     }
cfn-initの設定
 services
  サービスの起動・再起動の指定
  現在sysvinitのみ
  "services" : {                   OS起動時に起動さ
   "sysvinit" : {                    せるかどうか
    "nginx" : {
      "enabled" : "true",
                                           cfn-init終了後に起動するかどうか
      "ensureRunning" : "true",
      "files" : ["/etc/nginx/nginx.conf"],
      "sources" : ["/var/www/html"]        設定ファイルもしくは指定ディ
    },
                                           レクトリのファイルが変わって
    "php-fastcgi" : {
      "enabled" : "true",                  いた場合にサービス再起動する
      "ensureRunning" : "true",
      "packages" : { "yum" : ["php", "spawn-fcgi"] }
    }
  }                                          Cfg-initでパッケージを入れて
                                       いたらサービス再起動
cfn-initの起動

 cfn-initはデフォルトでは動作しない
 User-dataにcfn-initを起動するスクリプトを記述して、
 cloud-init経由で起動
 引数にスタック名、リソース名、リージョン、アクセスキー
 、シークレットキーを指定
  "Properties": {
    "UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [
         "#!/bin/bashn",
         "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" }, " -r WebServer ",
         "      --access-key ", { "Ref" : "HostKeys" },
         "      --secret-key ", {"Fn::GetAtt": ["HostKeys", "SecretAccessKey"]},
         "      --region ", { "Ref" : "AWS::Region" }, "n",
      ]]}}
     }
初期化シーケンス

 EC2インスタンス起動
                    cfn-init内で、meta-dataの読み込み


  Init.dに登録してある
 cloud-initが実行される
                       Meta-dataの設定に従い、
                    Sources(ファイルダウンロード)
 User-data領域から、        Packages(インストール)
 スクリプトを読み込み                Files(設定作成)
                          Services(サービス)
                                 を実行
  スクリプト内で、
  cfg-initを呼び出し




     起動完了
https://s3.amazonaws.com/cloudformation-templates-
Chef(solo)との連携例      us-east-1/wordpress-via-chef-solo.template
                     が分かりやすい例

 EC2インスタンス起動

                      cfn-init内で、meta-dataの読み込み
  Init.dに登録してある
 cloud-initが実行される

                           Meta-dataの設定に従い、
 User-data領域から、
                    Sources(レシピファイルダウンロード)
 スクリプトを読み込み
                    Packages(rubygemでchefインストール)
                        Files(レシピの一部書き換え)
  スクリプト内で、                          を実行
  cfg-initを呼び出し


  スクリプト内で、
   Chefを実行            ダウンロードしたレシピを元に、
                          chefがサーバ構築

     起動完了
その他スクリプト
 cfn-get-metadata
   Metadataを簡単に取得出来るスクリプト
 cfn-signal
   リソース「WaitCondition」と共に使用
   cfn-signalを使用して、スタックに対して初期化状態の通知を
    することが出来る
   アプリのインストールが失敗した場合にスタックを破棄したり
    できる
 cfn-hup
   スタックを更新(StackUpdateAPIを使用)した場合に、それ
    を感知して指定のファイルを実行するフックスクリプト

https://s3.amazonaws.com/cloudformation-
examples/BoostrappingApplicationsWithAWSCloudFormation.pdf
その他Tips
入れ子テンプレート

 テンプレートからテンプレートの呼び出しが可能
 リソースタイプに “AWS::CloudFormation::Stack“を指定
 TemplateURLを指定すると、そのテンプレートを読み込み

"Resources" : {
  "WebServer" : {
    "Type" : "AWS::CloudFormation::Stack",
   "Properties" : {
     "TemplateURL" : “https://s3.amazonaws.com/hoge.template" ]]},
     "Parameters" : {
       "KeyName" :       { "Ref" : "KeyName" },
       "InstanceType" : { "Ref" : "InstanceType"},
   }
 },
Baked AMI VS CF-Init
    AMIの作り込み VS Cloud-init+CloudFormation helpers
    用途によって、AMI作り込み、cloud-init、helperを使い分
    ける事が重要

                        利点                 欠点

AMI作り込み          ・構築が容易              ・ベースAMI/ミドルウェア
                 ・起動が速い               更新時に再インストールが必要
                  (オートスケールに有効)       ・リージョン毎の構築が必要


ベースAMI+          ・ベースAMI/ミドルウェア更新時   ・テンプレート構築が手間
Cloud-init+CFN    に追従が可能             ・OS初期化に時間がかかる
helpers          ・DBのエンドポイントなどの
                  定義が渡せる
IAM Capability
 CloudFormationでIAMユーザーを作成する場合、ウィザー
 ド途中でチェックボックスをonにする必要がある
   cfn-create-stackおよびcfn-update-stackの場合は、
      「--capalilities CAPABILITY_IAM」をコマンドに付与
参考URL
Cloud Formation Samples
  http://aws.amazon.com/jp/cloudformation/aws-
   cloudformation-templates/
BootstrappingApplicationsWithAWSCloudFormation
  https://s3.amazonaws.com/cloudformation-
   examples/BoostrappingApplicationsWithAWSCloudForma
   tion.pdf
Integrating CloudFormation with Chef
  https://s3.amazonaws.com/cloudformation-
   examples/IntegratingAWSCloudFormationWithOpscodeC
   hef.pdf
CloudFormer
  https://forums.aws.amazon.com/ann.jspa?annID=1048
ご参加ありがとう
 ございました



 Copyright © 2011 Amazon Web Services

Más contenido relacionado

La actualidad más candente

20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-publicAmazon Web Services Japan
 
「はじめてのAmazon Web Services」 JAWS-UG 長崎第1回勉強会
「はじめてのAmazon Web Services」 JAWS-UG 長崎第1回勉強会「はじめてのAmazon Web Services」 JAWS-UG 長崎第1回勉強会
「はじめてのAmazon Web Services」 JAWS-UG 長崎第1回勉強会Yasuhiro Horiuchi
 
[AWS Summit 2012] クラウドデザインパターン#1 CDP概要編
[AWS Summit 2012] クラウドデザインパターン#1 CDP概要編[AWS Summit 2012] クラウドデザインパターン#1 CDP概要編
[AWS Summit 2012] クラウドデザインパターン#1 CDP概要編Amazon Web Services Japan
 
仮想サーバーEC2 & EBS詳細 -ほぼ週刊AWSマイスターシリーズ "Reloaded"-
仮想サーバーEC2 & EBS詳細 -ほぼ週刊AWSマイスターシリーズ "Reloaded"- 仮想サーバーEC2 & EBS詳細 -ほぼ週刊AWSマイスターシリーズ "Reloaded"-
仮想サーバーEC2 & EBS詳細 -ほぼ週刊AWSマイスターシリーズ "Reloaded"- SORACOM, INC
 
[AWSマイスターシリーズ] Amazon Elastic Compute Cloud (EC2)
 [AWSマイスターシリーズ] Amazon Elastic Compute Cloud (EC2) [AWSマイスターシリーズ] Amazon Elastic Compute Cloud (EC2)
[AWSマイスターシリーズ] Amazon Elastic Compute Cloud (EC2)Amazon Web Services Japan
 
【セミナー講演資料】オープンクラウドソリューションのご紹介
【セミナー講演資料】オープンクラウドソリューションのご紹介【セミナー講演資料】オープンクラウドソリューションのご紹介
【セミナー講演資料】オープンクラウドソリューションのご紹介Nissho-Blocks
 
JAWS-UG CLI専門支部 #13 Azure ADで AWSのManagementConsoleに SSOしてみた (代理認証編)
JAWS-UG CLI専門支部 #13 Azure ADでAWSのManagementConsoleにSSOしてみた(代理認証編)JAWS-UG CLI専門支部 #13 Azure ADでAWSのManagementConsoleにSSOしてみた(代理認証編)
JAWS-UG CLI専門支部 #13 Azure ADで AWSのManagementConsoleに SSOしてみた (代理認証編)Nobuhiro Nakayama
 
2011-04-21 クラウド勉強会
2011-04-21 クラウド勉強会2011-04-21 クラウド勉強会
2011-04-21 クラウド勉強会Koichiro Doi
 
AWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormationAWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormationAmazon Web Services Japan
 
ナウなヤングにCloud Formationが流行ってほしい
ナウなヤングにCloud Formationが流行ってほしいナウなヤングにCloud Formationが流行ってほしい
ナウなヤングにCloud Formationが流行ってほしいSugawara Genki
 
cloudpack導入資料(2010/12/24版)
cloudpack導入資料(2010/12/24版)cloudpack導入資料(2010/12/24版)
cloudpack導入資料(2010/12/24版)iret, Inc.
 
Aws tools for power shellをつかいこなそう
Aws tools for power shellをつかいこなそうAws tools for power shellをつかいこなそう
Aws tools for power shellをつかいこなそうGenta Watanabe
 
はじめてのAWS - ビギナー編 -
はじめてのAWS - ビギナー編 - はじめてのAWS - ビギナー編 -
はじめてのAWS - ビギナー編 - SORACOM, INC
 
20120201 aws meister-reloaded-iam-and-billing-public
20120201 aws meister-reloaded-iam-and-billing-public20120201 aws meister-reloaded-iam-and-billing-public
20120201 aws meister-reloaded-iam-and-billing-publicAmazon Web Services Japan
 

La actualidad más candente (18)

20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public
 
「はじめてのAmazon Web Services」 JAWS-UG 長崎第1回勉強会
「はじめてのAmazon Web Services」 JAWS-UG 長崎第1回勉強会「はじめてのAmazon Web Services」 JAWS-UG 長崎第1回勉強会
「はじめてのAmazon Web Services」 JAWS-UG 長崎第1回勉強会
 
[AWS Summit 2012] クラウドデザインパターン#1 CDP概要編
[AWS Summit 2012] クラウドデザインパターン#1 CDP概要編[AWS Summit 2012] クラウドデザインパターン#1 CDP概要編
[AWS Summit 2012] クラウドデザインパターン#1 CDP概要編
 
仮想サーバーEC2 & EBS詳細 -ほぼ週刊AWSマイスターシリーズ "Reloaded"-
仮想サーバーEC2 & EBS詳細 -ほぼ週刊AWSマイスターシリーズ "Reloaded"- 仮想サーバーEC2 & EBS詳細 -ほぼ週刊AWSマイスターシリーズ "Reloaded"-
仮想サーバーEC2 & EBS詳細 -ほぼ週刊AWSマイスターシリーズ "Reloaded"-
 
[AWSマイスターシリーズ] Amazon Elastic Compute Cloud (EC2)
 [AWSマイスターシリーズ] Amazon Elastic Compute Cloud (EC2) [AWSマイスターシリーズ] Amazon Elastic Compute Cloud (EC2)
[AWSマイスターシリーズ] Amazon Elastic Compute Cloud (EC2)
 
【セミナー講演資料】オープンクラウドソリューションのご紹介
【セミナー講演資料】オープンクラウドソリューションのご紹介【セミナー講演資料】オープンクラウドソリューションのご紹介
【セミナー講演資料】オープンクラウドソリューションのご紹介
 
JAWS-UG CLI専門支部 #13 Azure ADで AWSのManagementConsoleに SSOしてみた (代理認証編)
JAWS-UG CLI専門支部 #13 Azure ADでAWSのManagementConsoleにSSOしてみた(代理認証編)JAWS-UG CLI専門支部 #13 Azure ADでAWSのManagementConsoleにSSOしてみた(代理認証編)
JAWS-UG CLI専門支部 #13 Azure ADで AWSのManagementConsoleに SSOしてみた (代理認証編)
 
20120319 aws meister-reloaded-s3
20120319 aws meister-reloaded-s320120319 aws meister-reloaded-s3
20120319 aws meister-reloaded-s3
 
Black Belt Online Seminar Amazon CloudWatch
Black Belt Online Seminar Amazon CloudWatchBlack Belt Online Seminar Amazon CloudWatch
Black Belt Online Seminar Amazon CloudWatch
 
AWS Blackbelt 2015シリーズ AWS Lambda
AWS Blackbelt 2015シリーズ AWS LambdaAWS Blackbelt 2015シリーズ AWS Lambda
AWS Blackbelt 2015シリーズ AWS Lambda
 
2011-04-21 クラウド勉強会
2011-04-21 クラウド勉強会2011-04-21 クラウド勉強会
2011-04-21 クラウド勉強会
 
AWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormationAWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormation
 
ナウなヤングにCloud Formationが流行ってほしい
ナウなヤングにCloud Formationが流行ってほしいナウなヤングにCloud Formationが流行ってほしい
ナウなヤングにCloud Formationが流行ってほしい
 
cloudpack導入資料(2010/12/24版)
cloudpack導入資料(2010/12/24版)cloudpack導入資料(2010/12/24版)
cloudpack導入資料(2010/12/24版)
 
Aws tools for power shellをつかいこなそう
Aws tools for power shellをつかいこなそうAws tools for power shellをつかいこなそう
Aws tools for power shellをつかいこなそう
 
AWS Black Belt Online Seminar lumberyard
AWS Black Belt Online Seminar lumberyardAWS Black Belt Online Seminar lumberyard
AWS Black Belt Online Seminar lumberyard
 
はじめてのAWS - ビギナー編 -
はじめてのAWS - ビギナー編 - はじめてのAWS - ビギナー編 -
はじめてのAWS - ビギナー編 -
 
20120201 aws meister-reloaded-iam-and-billing-public
20120201 aws meister-reloaded-iam-and-billing-public20120201 aws meister-reloaded-iam-and-billing-public
20120201 aws meister-reloaded-iam-and-billing-public
 

Similar a 20120303 jaws summit-meister-04_cloud_formation

20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formationAmazon Web Services Japan
 
MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択Yasuhiro Matsuo
 
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャ
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャNoSQL on AWSで作る最新ソーシャルゲームアーキテクチャ
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャYasuhiro Matsuo
 
華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築Takehito Tanabe
 
日本Androidの会鹿児島第10回勉強会LT
日本Androidの会鹿児島第10回勉強会LT日本Androidの会鹿児島第10回勉強会LT
日本Androidの会鹿児島第10回勉強会LTTakayuki Niinuma
 
AWS Management Pack for Microsoft System Centerによるクラウド管理
AWS Management Pack for Microsoft System Centerによるクラウド管理AWS Management Pack for Microsoft System Centerによるクラウド管理
AWS Management Pack for Microsoft System Centerによるクラウド管理Genta Watanabe
 
Amazon DynamoDBの概要説明
Amazon DynamoDBの概要説明Amazon DynamoDBの概要説明
Amazon DynamoDBの概要説明SORACOM, INC
 
aws mackerel twilio_handson_public
aws mackerel twilio_handson_publicaws mackerel twilio_handson_public
aws mackerel twilio_handson_publicTomoaki Sakatoku
 
Awsの質問に何でも答えます
Awsの質問に何でも答えますAwsの質問に何でも答えます
Awsの質問に何でも答えますYasuhiro Araki, Ph.D
 
Awsではじめるgluster fs 20120726-public
Awsではじめるgluster fs 20120726-publicAwsではじめるgluster fs 20120726-public
Awsではじめるgluster fs 20120726-publicAkio Katayama
 
AWS Black Belt Techシリーズ AWS CloudFormation
AWS Black Belt Techシリーズ  AWS CloudFormationAWS Black Belt Techシリーズ  AWS CloudFormation
AWS Black Belt Techシリーズ AWS CloudFormationAmazon Web Services Japan
 
アマゾンクラウドの真価
アマゾンクラウドの真価アマゾンクラウドの真価
アマゾンクラウドの真価kaminashi
 
これでAWSマスター!? 初心者向けAWS簡単講座
これでAWSマスター!? 初心者向けAWS簡単講座これでAWSマスター!? 初心者向けAWS簡単講座
これでAWSマスター!? 初心者向けAWS簡単講座Serverworks Co.,Ltd.
 
業務アプリをクラウド化する5つのステップ ~Amazon Web Services活用の勘所~
業務アプリをクラウド化する5つのステップ ~Amazon Web Services活用の勘所~業務アプリをクラウド化する5つのステップ ~Amazon Web Services活用の勘所~
業務アプリをクラウド化する5つのステップ ~Amazon Web Services活用の勘所~SORACOM, INC
 
突発イベントにおけるEC2の極力排除ならびにサービス徹底活用
突発イベントにおけるEC2の極力排除ならびにサービス徹底活用突発イベントにおけるEC2の極力排除ならびにサービス徹底活用
突発イベントにおけるEC2の極力排除ならびにサービス徹底活用Yasuhiro Araki, Ph.D
 

Similar a 20120303 jaws summit-meister-04_cloud_formation (20)

20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation
 
MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択
 
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャ
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャNoSQL on AWSで作る最新ソーシャルゲームアーキテクチャ
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャ
 
華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築
 
Amazon VPCトレーニング-VPCの説明
Amazon VPCトレーニング-VPCの説明Amazon VPCトレーニング-VPCの説明
Amazon VPCトレーニング-VPCの説明
 
日本Androidの会鹿児島第10回勉強会LT
日本Androidの会鹿児島第10回勉強会LT日本Androidの会鹿児島第10回勉強会LT
日本Androidの会鹿児島第10回勉強会LT
 
AWS Management Pack for Microsoft System Centerによるクラウド管理
AWS Management Pack for Microsoft System Centerによるクラウド管理AWS Management Pack for Microsoft System Centerによるクラウド管理
AWS Management Pack for Microsoft System Centerによるクラウド管理
 
Amazon DynamoDBの概要説明
Amazon DynamoDBの概要説明Amazon DynamoDBの概要説明
Amazon DynamoDBの概要説明
 
aws mackerel twilio_handson_public
aws mackerel twilio_handson_publicaws mackerel twilio_handson_public
aws mackerel twilio_handson_public
 
Awsの質問に何でも答えます
Awsの質問に何でも答えますAwsの質問に何でも答えます
Awsの質問に何でも答えます
 
Awsではじめるgluster fs 20120726-public
Awsではじめるgluster fs 20120726-publicAwsではじめるgluster fs 20120726-public
Awsではじめるgluster fs 20120726-public
 
20120303 jaws summit-meister-03_s3
20120303 jaws summit-meister-03_s320120303 jaws summit-meister-03_s3
20120303 jaws summit-meister-03_s3
 
AWS Black Belt Techシリーズ AWS CloudFormation
AWS Black Belt Techシリーズ  AWS CloudFormationAWS Black Belt Techシリーズ  AWS CloudFormation
AWS Black Belt Techシリーズ AWS CloudFormation
 
アマゾンクラウドの真価
アマゾンクラウドの真価アマゾンクラウドの真価
アマゾンクラウドの真価
 
AWS Update 2011/10
AWS Update 2011/10AWS Update 2011/10
AWS Update 2011/10
 
これでAWSマスター!? 初心者向けAWS簡単講座
これでAWSマスター!? 初心者向けAWS簡単講座これでAWSマスター!? 初心者向けAWS簡単講座
これでAWSマスター!? 初心者向けAWS簡単講座
 
[AWSマイスターシリーズ] Amazon VPC
[AWSマイスターシリーズ] Amazon VPC[AWSマイスターシリーズ] Amazon VPC
[AWSマイスターシリーズ] Amazon VPC
 
20130326 aws meister-reloaded-windows
20130326 aws meister-reloaded-windows20130326 aws meister-reloaded-windows
20130326 aws meister-reloaded-windows
 
業務アプリをクラウド化する5つのステップ ~Amazon Web Services活用の勘所~
業務アプリをクラウド化する5つのステップ ~Amazon Web Services活用の勘所~業務アプリをクラウド化する5つのステップ ~Amazon Web Services活用の勘所~
業務アプリをクラウド化する5つのステップ ~Amazon Web Services活用の勘所~
 
突発イベントにおけるEC2の極力排除ならびにサービス徹底活用
突発イベントにおけるEC2の極力排除ならびにサービス徹底活用突発イベントにおけるEC2の極力排除ならびにサービス徹底活用
突発イベントにおけるEC2の極力排除ならびにサービス徹底活用
 

Más de Amazon Web Services Japan

202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)Amazon Web Services Japan
 
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFSAmazon Web Services Japan
 
202204 AWS Black Belt Online Seminar AWS IoT Device Defender
202204 AWS Black Belt Online Seminar AWS IoT Device Defender202204 AWS Black Belt Online Seminar AWS IoT Device Defender
202204 AWS Black Belt Online Seminar AWS IoT Device DefenderAmazon Web Services Japan
 
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現Amazon Web Services Japan
 
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...Amazon Web Services Japan
 
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデートAmazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデートAmazon Web Services Japan
 
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したことAmazon Web Services Japan
 
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用Amazon Web Services Japan
 
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdfAmazon Web Services Japan
 
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介Amazon Web Services Japan
 
Amazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDDAmazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDDAmazon Web Services Japan
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチAmazon Web Services Japan
 
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介Amazon Web Services Japan
 
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
202202 AWS Black Belt Online Seminar Amazon Connect Customer ProfilesAmazon Web Services Japan
 
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するためにAmazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するためにAmazon Web Services Japan
 
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨Amazon Web Services Japan
 
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介Amazon Web Services Japan
 
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介Amazon Web Services Japan
 

Más de Amazon Web Services Japan (20)

202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
 
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
 
202204 AWS Black Belt Online Seminar AWS IoT Device Defender
202204 AWS Black Belt Online Seminar AWS IoT Device Defender202204 AWS Black Belt Online Seminar AWS IoT Device Defender
202204 AWS Black Belt Online Seminar AWS IoT Device Defender
 
Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
 
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
 
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
 
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデートAmazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
 
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと
 
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
 
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
 
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
 
Amazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDDAmazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDD
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
 
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
 
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
 
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するためにAmazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
 
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
 
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
 
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
 

20120303 jaws summit-meister-04_cloud_formation

  • 1. AWSマイスターシリーズ ~CloudFormation~ 2012年03月03日 片山 暁雄( @c9katayama ) ソリューションアーキテクト
  • 2. AWSサービス一覧 お客様のアプリケーション ライブラリ & SDKs IDE プラグイン デプロイと自動化 Web インターフェース Java, PHP, .NET, Eclipse AWS Elastic Beanstalk Python, Ruby Management Console AWS CloudFormation Visual Studio ネットワーク&ルーティング 認証 & 請求 Amazon VPC AWS IAM モニタリング スケーリング Amazon Elastic LB Identity Federation Amazon CloudWatch Auto Scale Amazon Route 53 Consolidated Billing AWS Direct Connect コンテンツ配信 分散処理 ワークフロー メッセージ通知 キューイング メール配信 Amazon Elastic Simple Amazon SNS Amazon SQS Amazon SES CloudFront MapReduce Workflow ストレージ データベース コンピュータ処理 Amazon S3 Amazon RDS Amazon DynamoDB Amazon EC2 Amazon EBS Amazon SimpleDB AWS Storage Gateway Amazon Elasticache AWS のグローバルなインフラ
  • 3. Agenda CloudFormationの概要 スタック テンプレート Cloud-init CloudFormation helpers CloudFormer その他Tips まとめ Copyright © 2011 Amazon Web Services
  • 5. CloudFormation EC2やELBなどを使ったAWSサービスのシステム構築 を、設定ファイル(テンプレート)を元に行えるサービ ス テンプレートを自由に作成できるため、自分好みのシス テム構成が可能 テンプレートは、AWSのサービスを操るための新しい 言語
  • 6. CloudFormation テンプレートに基づき 各サービスが起動 スタック ElasticLoadBalanceing テンプレート S3 Cloud Formation SNS EC2 EC2 AutoScaling CloudWatch
  • 7. 利用シーンと利点 一度テンプレートを作成すれば、同じ構成を再現できる  開発環境の構築  Blogシステム、Webシステム、ゲームプラットフォームなど、 同じ仕組みでアプリやデータが異なるようなもの ベストプラクティスが盛り込まれたテンプレートが使用可能  システムアーキテクチャの再利用  WordPress,Redmineなどが入った、多くのサンプルテンプレ ートが提供済み 起動時にパラメータを渡せる  例えばDBのエンドポイントをEC2に渡せる
  • 11. スタック可能なリソース これらをスタックに組み込み、設定を行える Amazon EC2 Instances Amazon Simple Storage Service (S3) Buckets Amazon Elastic Block Store (EBS) Volumes Amazon Simple DB Domains Elastic Load Balancers Amazon Simple Queue Service (SQS) Queues Elastic IP Addresses Amazon Simple Notification Service (SNS) Topics Amazon EC2 Security Groups Amazon SNS Subscriptions Auto Scaling Groups Amazon Route 53 DNS Records Amazon Relational Database Service (RDS) Amazon CloudFront Distributions Instances AWS Identity and Access Management users and Amazon RDS Security Groups groups AWS Elastic Beanstalk AWS Identify and Access Management policies Amazon CloudWatch Alarms
  • 12. スタック構築方法 AWS ManagementConsoleから構築 コマンドラインツール  http://aws.amazon.com/developertools/AWS- CloudFormation/2555753788650372 Java・.Net・PHPの各種SDK  Java : http://aws.amazon.com/jp/sdkforjava/  .NET : http://aws.amazon.com/jp/sdkfornet/  PHP : http://aws.amazon.com/jp/sdkforphp/
  • 13. AWS ManagementConsoleから構築-1 demo スタックの名称 ・サンプルテンプレート ・ローカルファイルの いずれか テンプレート ・テンプレートファイルURL (同一リージョンのS3上)
  • 14. AWS ManagementConsoleから構築-2 各種パラメータの入力 (後で説明)
  • 15. AWS ManagementConsoleから構築-3 スタック構築開始
  • 16. AWS ManagementConsoleから構築-4 スタック構築実行中
  • 17. AWS ManagementConsoleから構築-5 スタック構築完了 この時点ですべてのサービスが 起動している
  • 19. { "AWSTemplateFormatVersion" : "2010-09-09", テンプレート "Description" : “Sample", "Parameters" : { "KeyName" : { "Description" : “Sample key, "Type" : "String" } }, "Mappings" : { }, "Resources" : { CloudFormationの心臓部 "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { スタック構築の設計図 "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ], "KeyName" : { "Ref" : "KeyName" }, JSONフォーマットで記述 "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]} } }, "InstanceSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable SSH access via port 22", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0" }] } } } }
  • 20. テンプレート解説 テンプレートのバージョン { (最新は2010-09-09) "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", テンプレートの詳細(説明文) "Parameters" : { set of parameters CloudFormation実行時に }, 後で変更可能なパラメータを列挙 (例:DBユーザー名など) "Mappings" : { set of mappings }, Hashtableのようなもの キーに応じて値を特定出来る "Resources" : { (例:リージョンに応じたAMI番号など) set of resources }, EC2やRDSなど、スタックを構成する "Outputs" : { リソースを定義 set of outputs } } スタック構築後に取得したい値 (例:アクセスURLなど)
  • 21. Parameters { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters CloudFormation実行時に }, 後で変更可能なパラメータを列挙 (例:DBユーザー名など) "Mappings" : { set of mappings }, "Resources" : { set of resources }, "Outputs" : { set of outputs } }
  • 22. Parametersとは スタック構築時に値の入力が可能 データ型、デフォルト値、最小最大値など設定可能 "Parameters" : { "Age":{ "Type":"Number", “Default” : “30”, “MinValue”: “20”, “MaxValue”: “60”, "Description":"input your age.“ }, "FirstName":{ "Type":"String", "Description":"input your first name.“ }, }
  • 23. Parametersのプロパティ 利用出来るプロパティ プロパティ 内容 Type データ型 “String” “Number” “CommaDelimitedList” Default デフォルト値 NoEcho 入力時に*****となる(パスワードなどに使用) AllowedValues 入力可能値の一覧指定 (例:[“true”,”false”] ) AllowedPattern 正規表現で入力可能パターンを指定(例:[a-zA-Z]*) MaxLength 最大文字数 MaxValue 最大値 MinValue 最小値 Description プロパティの詳細説明 ConstraintDescription 入力した値がAllowedPatternやMaxLengthなどの制約 に引っかかった時に表示する説明 (どのような制約があるかの説明を記述)
  • 24. Parametersの参照 入力したパラメータ値は、テンプレート中で “Ref”を使用し て参照可能 ユーザー名、パスワード、ドメインなどの可変部分に便利 ここにパラメータ入力値が反映される “Resources" : { “MyServer":{ “Type":“AWS::EC2::Instance", “Properties” : { “KeyName”: { “Ref” : “Age”}, “Tags” : { “Ref” : “FirstName”} } } }
  • 25. Function Ref  パラメータを参照する Fn::Base64  文字列をBase64エンコードする Fn::FindInMap  Mapから値を取り出す Fn::GetAtt  リソースから属性を取り出す  例:"Fn::GetAtt" : [ "MyELB" , "DNSName"] Fn:GetAZs  指定リージョンのアベイラビリティゾーンを返す Fn:Join  文字列の連結  “Fn::Join” : [ “:”, [ “a”, “b”, “c” ] ] は 「a:b:c」を返す  “:”がセパレータ。不要な場合は ”” を定義 http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuid e/index.html?intrinsic-function-reference.html
  • 26. Pseudo Parameter 実行リージョンやスタック名といったパラメータを取得出来る予約語 AWS::Region  スタック構築対象のリージョンを取得する  { “Ref” : “AWS::Region” } で値を取得可能 AWS::StackName  スタックの名前を取得する  { “Ref” : “AWS::StackName” } で値を取得可能 “Resources" : { “MyServer":{ “Type":“AWS::EC2::Instance", “Properties” : { “KeyName”: { “Ref” : “AWS::StackName”}, “Tags” : { “Ref” : “AWS::Region”} } } } http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuid e/index.html?pseudo-parameter-reference.html
  • 27. Mappings { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, Hashtableのようなもの キーに応じて値を特定出来る "Resources" : { (例:リージョンに応じたAMI番号など) set of resources }, "Outputs" : { set of outputs } }
  • 28. Mappingsとは キーとバリューのテーブル 例えば、入力値やリージョンによって値が変わるようなもの を決めるような使い方 "Mappings" : { "RegionTable" : { "us-east-1" : { マッピングを定義 "AMI" : "ami- (この例の場合、”RegionTable”という 8c1fece5“, マッピングを定義) “Key” : “myKey-east” }, "us-west-1" : { “Fn::FindInTemplate” "AMI" : "ami- 3bc9997e“, “Key” : “myKey-west” }, "ap-northeast-1" : { "AMI" : "ami- 300ca731“, “Key” : “myKey-japan” } } },
  • 29. Mappingsの使い方 “Fn:FindInMap”で値を取得 "Fn::FindInMap" : [ "MapName", "Key", "Value"] MapName,key,Valueには”Ref”が利用可能 “Resources" : { "Mappings" : { “MyServer":{ "RegionTable" : { “Type":“AWS::EC2::Instance", "us-east-1" : { “Properties” : { "AMI" : "ami-8c1fece5“, “ImageId”: { “Key” : “myKey-east” “Fn:FindInMap” : [ }, “RegionTable” , "us-west-1" : { { “Ref” : “region” }, "AMI" : "ami-3bc9997e“, “AMI”] “Key” : “myKey-west” }, }, } "ap-northeast-1" : { } "AMI" : "ami-300ca731“, } “Key” : “myKey-japan” この例だと、入力された } regionパラメータによって } 利用するAMIのIDを決定できる },
  • 30. Resources { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, "Resources" : { set of resources }, EC2やRDSなど、スタックを構成する "Outputs" : { リソースを定義 set of outputs } }
  • 31. Resourcesとは EC2やELB,RDSなど、起動するサービスを設定 リソース毎に決められたパラメータを設定する “Resources" : { “MyWebServer" : { “Type" : “AWS:EC2::Instance” “Properties" : { “KeyName" : "ami-8c1fece5“, “ImageId” : “myKey-east” }, "us-west-1" : { "AMI" : "ami-3bc9997e“, “Key” : “myKey-west” }, "ap-northeast-1" : { "AMI" : "ami-300ca731“, “Key” : “myKey-japan” } } },
  • 32. EC2+SecurityGroupの例 "Resources" : { "Ec2Instance" : { リソースタイプ "Type" : "AWS::EC2::Instance", "Properties" : { "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ], "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]} } }, "InstanceSecurityGroup" : { リソース毎のプロパティ "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable SSH access via port 22", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0" }] } } }
  • 33. リソースタイプ Auto Scaling AutoScalingGroup AWS::AutoScaling::AutoScalingGroup Auto Scaling AutoScalingGroup AWS::AutoScaling::AutoScalingGroup IAM Access Key AWS::IAM::AccessKey Auto Scaling LaunchConfiguration AWS::AutoScaling::LaunchConfiguration IAM Group AWS::IAM::Group Auto Scaling Policy AWS::AutoScaling::ScalingPolicy IAM Policy AWS::IAM::Policy Auto Scaling Trigger AWS::AutoScaling::Trigger IAM Add User to Group UserToGroupAddition Amazon CloudFormation Stack AWS::CloudFormation::Stack IAM User AWS::IAM::User Amazon CloudFormation WaitCondition AWS::CloudFormation::WaitCondition Amazon CloudFormation Elastic Load Balancing LoadBalancer AWS::ElasticLoadBalancing::LoadBalancer AWS::CloudFormation::WaitConditionHandle WaitConditionHandle Amazon RDS DBInstance AWS::RDS::DBInstance Amazon CloudFront Distribution AWS::CloudFront::Distribution Amazon RDS DBSecurityGroup AWS::RDS::DBSecurityGroup Amazon CloudWatch AWS::CloudWatch::Alarm Amazon Route 53 Resource Record Set AWS::Route53::RecordSet Amazon EBS Volume AWS::EC2::Volume Amazon Route 53 Resource Record Set Amazon EBS Volume Attachment AWS::EC2::VolumeAttachment AWS::Route53::RecordSetGroup Group Amazon EC2 Elastic IP Address AWS::EC2::EIP Amazon S3 Bucket AWS::S3::Bucket Amazon EC2 Elastic IP Address AWS::EC2::EIPAssociation Amazon S3 Bucket Policy AWS::S3::BucketPolicy Association Amazon EC2 Instance AWS::EC2::Instance Amazon SimpleDB Domain AWS::SDB::Domain Amazon EC2 Security Group AWS::EC2::SecurityGroup SNS Topic Policy AWS::SNS::TopicPolicy Amazon EC2 Security Group Ingress AWS::EC2::SecurityGroupIngress Amazon SNS Subscription AWS::SNS::Subscription Amazon SQS Queue Policy AWS::SQS::QueuePolicy Amazon SNS Topic AWS::SNS::Topic Amazon SQS Queue AWS::SQS::Queue http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/index.h tml?aws-template-resource-type-ref.html
  • 34. Outputs { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } スタック構築後に取得したい値 (例:アクセスURLなど)
  • 35. Outputsとは スタック構築後に取得・表示したい情報の定義 例えばアクセスURLや、DBの通信先情報、作ったIAMユーザ ー名など、あとで使用するもの マネジメントコンソールから確認できるので、スタックに関 する情報を出力すると便利(キーペア名、AZ、インスタン スIDなど)
  • 36. Outputの定義 出力したい名称を定義 "Outputs" : { "InstanceId" : { "Description" : "InstanceId of the newly created EC2 instance", 説明 "Value" : { "Ref" : "Ec2Instance" } }, 値 "AZ" : { "Description" : "Availability Zone of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] } }, "ApplicationURL" : { "Description" : "URL of running web application", "Value" : { "Fn::Join": ["", [ "http://", { "Fn::GetAtt": [ "Ec2Instance" , "PublicIp"] } , "/index.html"] ] } } } Functionを使って文字列を 加工
  • 37. Outputの定義 "Outputs" : { "InstanceId" : { "Description" : "InstanceId of the newly created EC2 instance", "Value" : { "Ref" : "Ec2Instance" } }, "AZ" : { "Description" : "Availability Zone of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] } }, "ApplicationURL" : { "Description" : "URL of running web application", "Value" : { "Fn::Join": ["", [ "http://", { "Fn::GetAtt": [ "Ec2Instance" , "PublicIp"] } , "/index.html"] ] } } }
  • 39. テンプレートTips リソース定義にEC2インスタンスが必須ではない  DB構築だけ、オートスケールだけ、アラーム設定だけでもOK 参照関係があると、依存関係があるとみなされる。相互参照 や循環参照はNG(エラーとなる) 参照関係がある部分は、参照の整合性が取れるよう起動順を CloudFormationが決定 スタックを破棄すると、スタックにひもづくリソースは破棄 される  ただし”DeletionPolicy”を”Retain”にすると破棄されない "Resources" : { "myS3Bucket" : { "Type" : "AWS::S3::Bucket", "DeletionPolicy" : "Retain" } }
  • 40. テンプレートTips リソース数が多いと、何のリソースか分からなくなるので、 Tagsプロパティを使用する "MyInstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "SecurityGroups" : [ { "Ref" : "MySecurityGroup" } ], "ImageId" : "ami-20b65349", "Tags" : [ { "Key" : “Name", "Value" : “MyInstance" } ] } }
  • 43. CloudFormer 既に構築済みのシステム構成から、テンプレートを作成する ツール テンプレート作成のベースとなるテンプレートを構築するの に利用可能 ベータ版 テンプレート CloudFormer EC2 EC2 AutoScaling
  • 44. CloudFormer実行方法 https://forums.aws.amazon.com/ann.jspa?annID=10 48 でテンプレートを入手 テンプレートからスタックを構築(リージョンは問わず) 構築後、Outputsに表示されているURLにアクセス
  • 51. Cloud-init AmazonLinuxに入っている、初期設定ツール  元々はUbuntuで作られたもの EC2インスタンスの起動時に、「userdata」として設定した スクリプトを呼び出す。  「#!」 で始まる文字列の場合のみ、スクリプトを実行 スクリプトを記述できるので、ロケール変更、アプリインス トール、ファイル書き換えなどが可能
  • 52. Cloud-init EC2インスタンス起動 User Dataに定義 Cloud-initがuserdata を読み込む 読み込んだスクリプト を実行
  • 53. Cloud-initの利点と欠点 利点 インスタンス起動時に、インスタンスの初期化が可能  AMIとユーザーデータは分離できるので、AMIの作り込みが不要 になる  Apacheインストール済みのAMIを用意すると、OSやApacheの バージョンが上がったときに再作成になる 欠点 userdataは一度定義すると、書き換えは不可能  書き換えて再実行が出来ない(後述のスタック更新に使えない) 設定できるデータ量は、16KByteまで
  • 54. CloudFormationとの連携 EC2リソースのプロパティ「UserData」に内容を記載 "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId" : "ami-dcfa4edd", "KeyName" : { "Ref" : "KeyName" }, "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bashn", "log='/tmp/init.log'n", "apt-get update &>> $logn", "apt-get install -y ruby &>> $logn", "cd /tmpn", "wget http://rubygems.org/rubygems.tgz &>> $logn", "tar zxf rubygems.tgz &>> $logn", "cd rubygemsn", "ruby setup.rb --no-format-executable &>> $logn", ]] } } }
  • 55. CloudFormationとの連携 CloudFormationでUserDataを定義すると、定義中にRefや Fn::GetAttrを使用することが可能 例えばRDSのEndPointをUserDataに埋め込むといったこと が出来る "Resources" : { "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId" : "ami-dcfa4edd", "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bashn", "cd /home/ec2-usern", { "Fn::Join" : ["", [ "echo ", {"Fn::GetAtt" : ["DBInstance", "Endpoint.Address"]} , "> db.confn" ]]} ]]} } } }, "DBInstance" : { "Type": "AWS::RDS::DBInstance", } }
  • 57. CloudFormation helpers EC2インスタンス初期化時のヘルパースクリプト群 AmazonLinux正式版(2011.09)以降に搭載 /opt/aws/bin に格納  cfn-init  cfn-get-metadata  cfn-signal  cfn-hup Python製
  • 58. cfn-init パッケージやファイルのダウンロード、ファイルの生成を行 うスクリプト 実行のための設定は、Metadata領域に定義  sources,packages,files,services "Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { source,package,files,services "sources" : { : }, "packages" : { : } の順に実行される "files" : { : } "services" : { : } } } }, "Properties": { : } }
  • 59. cfn-initの設定 sources  指定したURLからファイルをダウンロードして展開  Tar,zip,tar+gzip,tar+bz2 "sources" : { "/etc/myapp" : "https://s3.amazonaws.com/mybucket/myapp.tar.gz" } packages  パッケージシステムを使用してアプリをインストール  Apt,yum,rubygems,python,rpm "packages" : { "yum" : { 最新版 "httpd" : [], "php" : [], バージョン }, 指定 "rubygems" : { "chef" : [ "0.10.2" ], } }
  • 60. cfn-initの設定 files  指定パスへのファイルの生成 "files" : { ファイルパス "/app/db.conf" : { "content" : { "Fn::Join" : ["", [ "db.name=", {"Ref" : "DBName"}, "n", ファイルの中身 "db.user=", {"Ref" : "DBUser"}, "n", を生成 "db.pass=", {"Ref" : "DBPassword" },"n", "db.host=", {"Fn::GetAtt" : ["DBInstance", "Endpoint.Address"]}, "n", ]] }, "mode" : "000644", "owner" : "root", "group" : "root" } S3などから取得 "/etc/myapp/myapp-init.pp" : { "source" : "https://s3.amazonaws.com/myapp/myapp-init.pp", "mode" : "100644", "owner" : "root", "group" : "wheel" } }
  • 61. cfn-initの設定 services  サービスの起動・再起動の指定  現在sysvinitのみ "services" : { OS起動時に起動さ "sysvinit" : { せるかどうか "nginx" : { "enabled" : "true", cfn-init終了後に起動するかどうか "ensureRunning" : "true", "files" : ["/etc/nginx/nginx.conf"], "sources" : ["/var/www/html"] 設定ファイルもしくは指定ディ }, レクトリのファイルが変わって "php-fastcgi" : { "enabled" : "true", いた場合にサービス再起動する "ensureRunning" : "true", "packages" : { "yum" : ["php", "spawn-fcgi"] } } } Cfg-initでパッケージを入れて いたらサービス再起動
  • 62. cfn-initの起動 cfn-initはデフォルトでは動作しない User-dataにcfn-initを起動するスクリプトを記述して、 cloud-init経由で起動 引数にスタック名、リソース名、リージョン、アクセスキー 、シークレットキーを指定 "Properties": { "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bashn", "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" }, " -r WebServer ", " --access-key ", { "Ref" : "HostKeys" }, " --secret-key ", {"Fn::GetAtt": ["HostKeys", "SecretAccessKey"]}, " --region ", { "Ref" : "AWS::Region" }, "n", ]]}} }
  • 63. 初期化シーケンス EC2インスタンス起動 cfn-init内で、meta-dataの読み込み Init.dに登録してある cloud-initが実行される Meta-dataの設定に従い、 Sources(ファイルダウンロード) User-data領域から、 Packages(インストール) スクリプトを読み込み Files(設定作成) Services(サービス) を実行 スクリプト内で、 cfg-initを呼び出し 起動完了
  • 64. https://s3.amazonaws.com/cloudformation-templates- Chef(solo)との連携例 us-east-1/wordpress-via-chef-solo.template が分かりやすい例 EC2インスタンス起動 cfn-init内で、meta-dataの読み込み Init.dに登録してある cloud-initが実行される Meta-dataの設定に従い、 User-data領域から、 Sources(レシピファイルダウンロード) スクリプトを読み込み Packages(rubygemでchefインストール) Files(レシピの一部書き換え) スクリプト内で、 を実行 cfg-initを呼び出し スクリプト内で、 Chefを実行 ダウンロードしたレシピを元に、 chefがサーバ構築 起動完了
  • 65. その他スクリプト cfn-get-metadata  Metadataを簡単に取得出来るスクリプト cfn-signal  リソース「WaitCondition」と共に使用  cfn-signalを使用して、スタックに対して初期化状態の通知を することが出来る  アプリのインストールが失敗した場合にスタックを破棄したり できる cfn-hup  スタックを更新(StackUpdateAPIを使用)した場合に、それ を感知して指定のファイルを実行するフックスクリプト https://s3.amazonaws.com/cloudformation- examples/BoostrappingApplicationsWithAWSCloudFormation.pdf
  • 67. 入れ子テンプレート テンプレートからテンプレートの呼び出しが可能 リソースタイプに “AWS::CloudFormation::Stack“を指定 TemplateURLを指定すると、そのテンプレートを読み込み "Resources" : { "WebServer" : { "Type" : "AWS::CloudFormation::Stack", "Properties" : { "TemplateURL" : “https://s3.amazonaws.com/hoge.template" ]]}, "Parameters" : { "KeyName" : { "Ref" : "KeyName" }, "InstanceType" : { "Ref" : "InstanceType"}, } },
  • 68. Baked AMI VS CF-Init AMIの作り込み VS Cloud-init+CloudFormation helpers 用途によって、AMI作り込み、cloud-init、helperを使い分 ける事が重要 利点 欠点 AMI作り込み ・構築が容易 ・ベースAMI/ミドルウェア ・起動が速い 更新時に再インストールが必要 (オートスケールに有効) ・リージョン毎の構築が必要 ベースAMI+ ・ベースAMI/ミドルウェア更新時 ・テンプレート構築が手間 Cloud-init+CFN に追従が可能 ・OS初期化に時間がかかる helpers ・DBのエンドポイントなどの 定義が渡せる
  • 69. IAM Capability CloudFormationでIAMユーザーを作成する場合、ウィザー ド途中でチェックボックスをonにする必要がある  cfn-create-stackおよびcfn-update-stackの場合は、 「--capalilities CAPABILITY_IAM」をコマンドに付与
  • 70. 参考URL Cloud Formation Samples  http://aws.amazon.com/jp/cloudformation/aws- cloudformation-templates/ BootstrappingApplicationsWithAWSCloudFormation  https://s3.amazonaws.com/cloudformation- examples/BoostrappingApplicationsWithAWSCloudForma tion.pdf Integrating CloudFormation with Chef  https://s3.amazonaws.com/cloudformation- examples/IntegratingAWSCloudFormationWithOpscodeC hef.pdf CloudFormer  https://forums.aws.amazon.com/ann.jspa?annID=1048