SlideShare uma empresa Scribd logo
1 de 74
Baixar para ler offline
AWSマイスターシリーズ
~CloudFormation~


               2011年11月01日
               片山 暁雄( @c9katayama )
               ソリューションアーキテクト
ほぼ週刊AWSマイスターシリーズへようこそ!
~GoToMeetingの使い方~
 参加者は、自動的にミュートになっています
 質問を投げることができます!
  GoToMeetingの仕組みを使って、随時書き込んでください
    ただし環境によっては、日本語の直接入力ができないので、
    お手数ですが、テキストエディタ等に打ち込んでから、
    貼り付けててください

  最後のQ&Aの時間で、できるだけ回答させて頂きます

  書き込んだ質問は、主催者にしか見えません
 Twitterのハッシュタグは#jawsugでどうぞ




             Copyright © 2011 Amazon Web Services
プレゼント
本日一番良い質問を頂いた方に、

        AWS特製紙コップ
     (JAWS-UGコラボモデル)
            1年分

をプレゼントします!
Webセミナー
ほぼ週刊AWSマイスターシリーズ(全10回)
    10/19   第4回 IAM & Consolidated Billing
    10/26   第5回 ELB, AutoScaling & CloudWatch
    11/1    第6回 CloudFormation
    11/9    第7回 VPC
    11/16   第8回 RDS
    11/22   第9回 EMR
    11/30   第10回 SES


申し込みサイト
 http://aws.amazon.com/jp/event_schedule/
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




                 スタックの名称


              ・サンプルテンプレート

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

              ・テンプレートファイル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/UserGuide/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/UserGuide/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-8c1fece5“,   (この例の場合、”RegionTable”という
        “Key” : “myKey-east”          マッピングを定義)
     },
     "us-west-1" : {
        "AMI" : "ami-3bc9997e“,    “Fn::FindInTemplate”
        “Key” : “myKey-west”
     },
     "ap-northeast-1" : {
        "AMI" : "ami-300ca731“,
        “Key” : “myKey-japan”
     }
   }
 },
Mappingsの使い方
     “Fn:FindInMap”で値を取得
     "Fn::FindInMap" : [ "MapName", "Key", "Value"]
     MapName,key,Valueには”Ref”が利用可能

"Mappings" : {
   "RegionTable" : {
     "us-east-1" : {              “Resources" : {
        "AMI" : "ami-8c1fece5“,     “MyServer":{
        “Key” : “myKey-east”          “Type":“AWS::EC2::Instance",
     },                               “Properties” : {
     "us-west-1" : {                    “ImageId”: {
                                      “Fn::FindInTemplate”
        "AMI" : "ami-3bc9997e“,               “Fn:FindInMap” : [
        “Key” : “myKey-west”                          “RegionTable” ,
     },                                                  { “Ref” : “region” },
     "ap-northeast-1" : {                                     “AMI”]
        "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/AWSCloudFormatio
   n/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で作られたリソースには、スタック名など
 のタグが付与される
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
CloudFormer
CloudFormer
 既に構築済みのシステム構成から、テンプレートを作成する
 ツール
 テンプレート作成のベースとなるテンプレートを構築するの
 に利用可能
 ベータ版



                                 テンプレート


                   CloudFormer

    EC2      EC2

    AutoScaling
CloudFormer実行方法

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

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

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



          App      Web
         Server   Server
参考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
Q&A




Copyright © 2011 Amazon Web Services
次回の
ほぼ週刊AWSマイスターシリーズは、
       11月9日 17:00~
~ Virtual Private Cloud (VPC) ~




          Copyright © 2011 Amazon Web Services
ご参加ありがとう
 ございました



 Copyright © 2011 Amazon Web Services

Mais conteúdo relacionado

Mais procurados

AWS Black Belt Tech シリーズ 2015 - AWS OpsWorks
AWS Black Belt Tech シリーズ 2015 - AWS OpsWorksAWS Black Belt Tech シリーズ 2015 - AWS OpsWorks
AWS Black Belt Tech シリーズ 2015 - AWS OpsWorksAmazon Web Services Japan
 
AWS Black Belt Techシリーズ AWS Management Console
AWS Black Belt Techシリーズ AWS Management ConsoleAWS Black Belt Techシリーズ AWS Management Console
AWS Black Belt Techシリーズ AWS Management ConsoleAmazon Web Services Japan
 
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows Powershell
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows PowershellAWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows Powershell
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows PowershellAmazon Web Services Japan
 
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例Amazon Web Services Japan
 
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormationAWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormationAmazon Web Services Japan
 
[AWSマイスターシリーズ] AWS SDK for Java / .NET
[AWSマイスターシリーズ] AWS SDK for Java / .NET[AWSマイスターシリーズ] AWS SDK for Java / .NET
[AWSマイスターシリーズ] AWS SDK for Java / .NETAmazon Web Services Japan
 
AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)
AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)
AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)Amazon Web Services Japan
 
AWS 初級トレーニング (Windows Server 2012編)
AWS 初級トレーニング (Windows Server 2012編)AWS 初級トレーニング (Windows Server 2012編)
AWS 初級トレーニング (Windows Server 2012編)Amazon Web Services Japan
 
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Amazon S3 バックアップ~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Amazon S3 バックアップ~AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Amazon S3 バックアップ~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Amazon S3 バックアップ~Amazon Web Services Japan
 
Amazon Work Spaces Application Manager
Amazon Work Spaces Application ManagerAmazon Work Spaces Application Manager
Amazon Work Spaces Application ManagerGenta Watanabe
 
AWS Black Belt Techシリーズ AWS CloudTrail & CloudWatch Logs
AWS Black Belt Techシリーズ AWS CloudTrail & CloudWatch LogsAWS Black Belt Techシリーズ AWS CloudTrail & CloudWatch Logs
AWS Black Belt Techシリーズ AWS CloudTrail & CloudWatch LogsAmazon Web Services Japan
 
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜Amazon Web Services Japan
 
華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築Takehito Tanabe
 
AWS - Windowsアップデート re:Invent & Windows Server 2016
AWS - Windowsアップデートre:Invent & Windows Server 2016AWS - Windowsアップデートre:Invent & Windows Server 2016
AWS - Windowsアップデート re:Invent & Windows Server 2016Amazon Web Services Japan
 
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ  AWS re:Invent 2014 最新情報のアップデートAWS Black Belt Techシリーズ  AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデートAmazon Web Services Japan
 

Mais procurados (20)

AWS Black Belt Tech シリーズ 2015 - AWS OpsWorks
AWS Black Belt Tech シリーズ 2015 - AWS OpsWorksAWS Black Belt Tech シリーズ 2015 - AWS OpsWorks
AWS Black Belt Tech シリーズ 2015 - AWS OpsWorks
 
AWS Black Belt Techシリーズ AWS Management Console
AWS Black Belt Techシリーズ AWS Management ConsoleAWS Black Belt Techシリーズ AWS Management Console
AWS Black Belt Techシリーズ AWS Management Console
 
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows Powershell
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows PowershellAWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows Powershell
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows Powershell
 
AWS Blackbelt 2015シリーズ AWS Lambda
AWS Blackbelt 2015シリーズ AWS LambdaAWS Blackbelt 2015シリーズ AWS Lambda
AWS Blackbelt 2015シリーズ AWS Lambda
 
AWS Black Belt Techシリーズ AWS Lambda
AWS Black Belt Techシリーズ AWS LambdaAWS Black Belt Techシリーズ AWS Lambda
AWS Black Belt Techシリーズ AWS Lambda
 
Black Belt Online Seminar Amazon CloudWatch
Black Belt Online Seminar Amazon CloudWatchBlack Belt Online Seminar Amazon CloudWatch
Black Belt Online Seminar Amazon CloudWatch
 
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
 
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormationAWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
 
[AWSマイスターシリーズ] AWS SDK for Java / .NET
[AWSマイスターシリーズ] AWS SDK for Java / .NET[AWSマイスターシリーズ] AWS SDK for Java / .NET
[AWSマイスターシリーズ] AWS SDK for Java / .NET
 
AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)
AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)
AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)
 
AWS Black Belt Techシリーズ AWS SDK
AWS Black Belt Techシリーズ AWS SDKAWS Black Belt Techシリーズ AWS SDK
AWS Black Belt Techシリーズ AWS SDK
 
AWS 初級トレーニング (Windows Server 2012編)
AWS 初級トレーニング (Windows Server 2012編)AWS 初級トレーニング (Windows Server 2012編)
AWS 初級トレーニング (Windows Server 2012編)
 
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Amazon S3 バックアップ~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Amazon S3 バックアップ~AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Amazon S3 バックアップ~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Amazon S3 バックアップ~
 
Amazon Work Spaces Application Manager
Amazon Work Spaces Application ManagerAmazon Work Spaces Application Manager
Amazon Work Spaces Application Manager
 
AWS Black Belt Techシリーズ AWS CloudTrail & CloudWatch Logs
AWS Black Belt Techシリーズ AWS CloudTrail & CloudWatch LogsAWS Black Belt Techシリーズ AWS CloudTrail & CloudWatch Logs
AWS Black Belt Techシリーズ AWS CloudTrail & CloudWatch Logs
 
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜
 
華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築
 
Amazon Glacierのご紹介(機能編)
Amazon Glacierのご紹介(機能編) Amazon Glacierのご紹介(機能編)
Amazon Glacierのご紹介(機能編)
 
AWS - Windowsアップデート re:Invent & Windows Server 2016
AWS - Windowsアップデートre:Invent & Windows Server 2016AWS - Windowsアップデートre:Invent & Windows Server 2016
AWS - Windowsアップデート re:Invent & Windows Server 2016
 
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ  AWS re:Invent 2014 最新情報のアップデートAWS Black Belt Techシリーズ  AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
 

Semelhante a CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-

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
 
AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)Akio Katayama
 
20120303 jaws summit-meister-04_cloud_formation
20120303 jaws summit-meister-04_cloud_formation20120303 jaws summit-meister-04_cloud_formation
20120303 jaws summit-meister-04_cloud_formationAmazon Web Services Japan
 
Aws meister-cloud formation-summit2012
Aws meister-cloud formation-summit2012Aws meister-cloud formation-summit2012
Aws meister-cloud formation-summit2012Akio Katayama
 
BCPに活かせ!一撃 CloudFormation
BCPに活かせ!一撃 CloudFormationBCPに活かせ!一撃 CloudFormation
BCPに活かせ!一撃 CloudFormation真吾 吉田
 
現場的!オンプレとAWSの違い
現場的!オンプレとAWSの違い現場的!オンプレとAWSの違い
現場的!オンプレとAWSの違い真吾 吉田
 
現場的!AWSとオンプレの違い(赤べこバージョン)
現場的!AWSとオンプレの違い(赤べこバージョン)現場的!AWSとオンプレの違い(赤べこバージョン)
現場的!AWSとオンプレの違い(赤べこバージョン)真吾 吉田
 
Jaws−横浜ハンズオンーCloudFormation w/ vpc 2/3
Jaws−横浜ハンズオンーCloudFormation w/ vpc 2/3Jaws−横浜ハンズオンーCloudFormation w/ vpc 2/3
Jaws−横浜ハンズオンーCloudFormation w/ vpc 2/3Yasuhiro Araki, Ph.D
 
当社のawsへの取組
当社のawsへの取組当社のawsへの取組
当社のawsへの取組Mercari Inc.
 
Azure Infrastructure as Code 体験入隊
Azure Infrastructure as Code 体験入隊Azure Infrastructure as Code 体験入隊
Azure Infrastructure as Code 体験入隊Toru Makabe
 
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
 
Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013Yasuhiro Horiuchi
 
Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3
Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3
Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3Yasuhiro Araki, Ph.D
 
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
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略takezoe
 
サーバーレス開発の強い味方 AWS Systems Manager
サーバーレス開発の強い味方 AWS Systems Managerサーバーレス開発の強い味方 AWS Systems Manager
サーバーレス開発の強い味方 AWS Systems Manager桂一 中山
 
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回SORACOM, INC
 
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShellAmazon Web Services Japan
 

Semelhante a CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回- (20)

20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation
 
AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)
 
20120303 jaws summit-meister-04_cloud_formation
20120303 jaws summit-meister-04_cloud_formation20120303 jaws summit-meister-04_cloud_formation
20120303 jaws summit-meister-04_cloud_formation
 
Aws meister-cloud formation-summit2012
Aws meister-cloud formation-summit2012Aws meister-cloud formation-summit2012
Aws meister-cloud formation-summit2012
 
BCPに活かせ!一撃 CloudFormation
BCPに活かせ!一撃 CloudFormationBCPに活かせ!一撃 CloudFormation
BCPに活かせ!一撃 CloudFormation
 
現場的!オンプレとAWSの違い
現場的!オンプレとAWSの違い現場的!オンプレとAWSの違い
現場的!オンプレとAWSの違い
 
現場的!AWSとオンプレの違い(赤べこバージョン)
現場的!AWSとオンプレの違い(赤べこバージョン)現場的!AWSとオンプレの違い(赤べこバージョン)
現場的!AWSとオンプレの違い(赤べこバージョン)
 
Jaws−横浜ハンズオンーCloudFormation w/ vpc 2/3
Jaws−横浜ハンズオンーCloudFormation w/ vpc 2/3Jaws−横浜ハンズオンーCloudFormation w/ vpc 2/3
Jaws−横浜ハンズオンーCloudFormation w/ vpc 2/3
 
OpenStack API
OpenStack APIOpenStack API
OpenStack API
 
当社のawsへの取組
当社のawsへの取組当社のawsへの取組
当社のawsへの取組
 
Azure Infrastructure as Code 体験入隊
Azure Infrastructure as Code 体験入隊Azure Infrastructure as Code 体験入隊
Azure Infrastructure as Code 体験入隊
 
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
 
Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013
 
Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3
Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3
Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3
 
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
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
サーバーレス開発の強い味方 AWS Systems Manager
サーバーレス開発の強い味方 AWS Systems Managerサーバーレス開発の強い味方 AWS Systems Manager
サーバーレス開発の強い味方 AWS Systems Manager
 
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
 
IgChart 入門編
IgChart 入門編IgChart 入門編
IgChart 入門編
 
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
 

Mais de SORACOM, INC

IoT通信プラットフォーム SORACOM 説明資料
IoT通信プラットフォーム SORACOM 説明資料IoT通信プラットフォーム SORACOM 説明資料
IoT通信プラットフォーム SORACOM 説明資料SORACOM, INC
 
20140608 interlop keynote
20140608 interlop keynote20140608 interlop keynote
20140608 interlop keynoteSORACOM, INC
 
AWS Cloud Design Pattenr (Korean) - CDP Seminar in Korea
AWS Cloud Design Pattenr (Korean) - CDP Seminar in KoreaAWS Cloud Design Pattenr (Korean) - CDP Seminar in Korea
AWS Cloud Design Pattenr (Korean) - CDP Seminar in KoreaSORACOM, INC
 
クラウドがもたらす破壊と創造 = Developer Summit 2014 =
クラウドがもたらす破壊と創造  = Developer Summit 2014 = クラウドがもたらす破壊と創造  = Developer Summit 2014 =
クラウドがもたらす破壊と創造 = Developer Summit 2014 = SORACOM, INC
 
CDP2.0 - cloudpack night #7 -
CDP2.0 - cloudpack night #7 -CDP2.0 - cloudpack night #7 -
CDP2.0 - cloudpack night #7 -SORACOM, INC
 
AWSクラウドデザインパターン - JEITA講演 -
AWSクラウドデザインパターン - JEITA講演 - AWSクラウドデザインパターン - JEITA講演 -
AWSクラウドデザインパターン - JEITA講演 - SORACOM, INC
 
いまさら聞けないAWSクラウド - Java Festa 2013
いまさら聞けないAWSクラウド - Java Festa 2013いまさら聞けないAWSクラウド - Java Festa 2013
いまさら聞けないAWSクラウド - Java Festa 2013SORACOM, INC
 
Kansumi2013 tamagawa
Kansumi2013 tamagawaKansumi2013 tamagawa
Kansumi2013 tamagawaSORACOM, INC
 
Aws gameday tokyo_2013
Aws gameday tokyo_2013Aws gameday tokyo_2013
Aws gameday tokyo_2013SORACOM, INC
 
クラウドTCOの真実
クラウドTCOの真実クラウドTCOの真実
クラウドTCOの真実SORACOM, INC
 
AWSクラウドデザインパターン(CDP) - Eコマース編 -
AWSクラウドデザインパターン(CDP) - Eコマース編 -AWSクラウドデザインパターン(CDP) - Eコマース編 -
AWSクラウドデザインパターン(CDP) - Eコマース編 -SORACOM, INC
 
AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - SORACOM, INC
 
Amazon DynamoDBの概要説明
Amazon DynamoDBの概要説明Amazon DynamoDBの概要説明
Amazon DynamoDBの概要説明SORACOM, INC
 
AWSアップデート 2月14日JAWS札幌
AWSアップデート 2月14日JAWS札幌AWSアップデート 2月14日JAWS札幌
AWSアップデート 2月14日JAWS札幌SORACOM, INC
 
AWS Storage Gateway 詳細 - AWSマイスターシリーズ
AWS Storage Gateway 詳細 - AWSマイスターシリーズAWS Storage Gateway 詳細 - AWSマイスターシリーズ
AWS Storage Gateway 詳細 - AWSマイスターシリーズSORACOM, INC
 
AWS Direct Connect 詳細 - AWSマイスターシリーズ Reloaded
AWS Direct Connect 詳細 - AWSマイスターシリーズ ReloadedAWS Direct Connect 詳細 - AWSマイスターシリーズ Reloaded
AWS Direct Connect 詳細 - AWSマイスターシリーズ ReloadedSORACOM, INC
 
はじめてのAWS - ビギナー編 -
はじめてのAWS - ビギナー編 - はじめてのAWS - ビギナー編 -
はじめてのAWS - ビギナー編 - SORACOM, INC
 
SimpleDB, SQS, SNS詳細 - AWSマイスターシリーズ
SimpleDB, SQS, SNS詳細 - AWSマイスターシリーズSimpleDB, SQS, SNS詳細 - AWSマイスターシリーズ
SimpleDB, SQS, SNS詳細 - AWSマイスターシリーズSORACOM, INC
 
JAWS-UG北陸第2回 AWSクラウド最新アップデート
JAWS-UG北陸第2回 AWSクラウド最新アップデートJAWS-UG北陸第2回 AWSクラウド最新アップデート
JAWS-UG北陸第2回 AWSクラウド最新アップデートSORACOM, INC
 
Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズSORACOM, INC
 

Mais de SORACOM, INC (20)

IoT通信プラットフォーム SORACOM 説明資料
IoT通信プラットフォーム SORACOM 説明資料IoT通信プラットフォーム SORACOM 説明資料
IoT通信プラットフォーム SORACOM 説明資料
 
20140608 interlop keynote
20140608 interlop keynote20140608 interlop keynote
20140608 interlop keynote
 
AWS Cloud Design Pattenr (Korean) - CDP Seminar in Korea
AWS Cloud Design Pattenr (Korean) - CDP Seminar in KoreaAWS Cloud Design Pattenr (Korean) - CDP Seminar in Korea
AWS Cloud Design Pattenr (Korean) - CDP Seminar in Korea
 
クラウドがもたらす破壊と創造 = Developer Summit 2014 =
クラウドがもたらす破壊と創造  = Developer Summit 2014 = クラウドがもたらす破壊と創造  = Developer Summit 2014 =
クラウドがもたらす破壊と創造 = Developer Summit 2014 =
 
CDP2.0 - cloudpack night #7 -
CDP2.0 - cloudpack night #7 -CDP2.0 - cloudpack night #7 -
CDP2.0 - cloudpack night #7 -
 
AWSクラウドデザインパターン - JEITA講演 -
AWSクラウドデザインパターン - JEITA講演 - AWSクラウドデザインパターン - JEITA講演 -
AWSクラウドデザインパターン - JEITA講演 -
 
いまさら聞けないAWSクラウド - Java Festa 2013
いまさら聞けないAWSクラウド - Java Festa 2013いまさら聞けないAWSクラウド - Java Festa 2013
いまさら聞けないAWSクラウド - Java Festa 2013
 
Kansumi2013 tamagawa
Kansumi2013 tamagawaKansumi2013 tamagawa
Kansumi2013 tamagawa
 
Aws gameday tokyo_2013
Aws gameday tokyo_2013Aws gameday tokyo_2013
Aws gameday tokyo_2013
 
クラウドTCOの真実
クラウドTCOの真実クラウドTCOの真実
クラウドTCOの真実
 
AWSクラウドデザインパターン(CDP) - Eコマース編 -
AWSクラウドデザインパターン(CDP) - Eコマース編 -AWSクラウドデザインパターン(CDP) - Eコマース編 -
AWSクラウドデザインパターン(CDP) - Eコマース編 -
 
AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 -
 
Amazon DynamoDBの概要説明
Amazon DynamoDBの概要説明Amazon DynamoDBの概要説明
Amazon DynamoDBの概要説明
 
AWSアップデート 2月14日JAWS札幌
AWSアップデート 2月14日JAWS札幌AWSアップデート 2月14日JAWS札幌
AWSアップデート 2月14日JAWS札幌
 
AWS Storage Gateway 詳細 - AWSマイスターシリーズ
AWS Storage Gateway 詳細 - AWSマイスターシリーズAWS Storage Gateway 詳細 - AWSマイスターシリーズ
AWS Storage Gateway 詳細 - AWSマイスターシリーズ
 
AWS Direct Connect 詳細 - AWSマイスターシリーズ Reloaded
AWS Direct Connect 詳細 - AWSマイスターシリーズ ReloadedAWS Direct Connect 詳細 - AWSマイスターシリーズ Reloaded
AWS Direct Connect 詳細 - AWSマイスターシリーズ Reloaded
 
はじめてのAWS - ビギナー編 -
はじめてのAWS - ビギナー編 - はじめてのAWS - ビギナー編 -
はじめてのAWS - ビギナー編 -
 
SimpleDB, SQS, SNS詳細 - AWSマイスターシリーズ
SimpleDB, SQS, SNS詳細 - AWSマイスターシリーズSimpleDB, SQS, SNS詳細 - AWSマイスターシリーズ
SimpleDB, SQS, SNS詳細 - AWSマイスターシリーズ
 
JAWS-UG北陸第2回 AWSクラウド最新アップデート
JAWS-UG北陸第2回 AWSクラウド最新アップデートJAWS-UG北陸第2回 AWSクラウド最新アップデート
JAWS-UG北陸第2回 AWSクラウド最新アップデート
 
Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズ
 

CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-

  • 1. AWSマイスターシリーズ ~CloudFormation~ 2011年11月01日 片山 暁雄( @c9katayama ) ソリューションアーキテクト
  • 2. ほぼ週刊AWSマイスターシリーズへようこそ! ~GoToMeetingの使い方~ 参加者は、自動的にミュートになっています 質問を投げることができます!  GoToMeetingの仕組みを使って、随時書き込んでください  ただし環境によっては、日本語の直接入力ができないので、 お手数ですが、テキストエディタ等に打ち込んでから、 貼り付けててください  最後のQ&Aの時間で、できるだけ回答させて頂きます  書き込んだ質問は、主催者にしか見えません Twitterのハッシュタグは#jawsugでどうぞ Copyright © 2011 Amazon Web Services
  • 3. プレゼント 本日一番良い質問を頂いた方に、 AWS特製紙コップ (JAWS-UGコラボモデル) 1年分 をプレゼントします!
  • 4. Webセミナー ほぼ週刊AWSマイスターシリーズ(全10回)  10/19 第4回 IAM & Consolidated Billing  10/26 第5回 ELB, AutoScaling & CloudWatch  11/1 第6回 CloudFormation  11/9 第7回 VPC  11/16 第8回 RDS  11/22 第9回 EMR  11/30 第10回 SES 申し込みサイト http://aws.amazon.com/jp/event_schedule/
  • 5. Agenda CloudFormationの概要 スタック テンプレート Cloud-init CloudFormation helpers CloudFormer その他Tips まとめ Copyright © 2011 Amazon Web Services
  • 7. CloudFormation EC2やELBなどを使ったAWSサービスのシステム構築を、設 定ファイル(テンプレート)を元に行えるサービス テンプレートを自由に作成できるため、自分好みのシステム 構成が可能 テンプレートは、AWSのサービスを操るための新しい言語
  • 8. CloudFormation テンプレートに基づき 各サービスが起動 スタック ElasticLoadBalanceing テンプレート S3 Cloud Formation SNS EC2 EC2 AutoScaling CloudWatch
  • 9. 利用シーンと利点 一度テンプレートを作成すれば、同じ構成を再現できる  開発環境の構築  Blogシステム、Webシステム、ゲームプラットフォームなど、 同じ仕組みでアプリやデータが異なるようなもの ベストプラクティスが盛り込まれたテンプレートが使用可能  システムアーキテクチャの再利用  WordPress,Redmineなどが入った、多くのサンプルテンプレ ートが提供済み 起動時にパラメータを渡せる  例えばDBのエンドポイントをEC2に渡せる
  • 13. スタック可能なリソース これらをスタックに組み込み、設定を行える 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
  • 14. スタック構築方法 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/
  • 15. AWS ManagementConsoleから構築-1 スタックの名称 ・サンプルテンプレート ・ローカルファイルの いずれか テンプレート ・テンプレートファイルURL (同一リージョンのS3上)
  • 16. AWS ManagementConsoleから構築-2 各種パラメータの入力 (後で説明)
  • 17. AWS ManagementConsoleから構築-3 スタック構築開始
  • 18. AWS ManagementConsoleから構築-4 スタック構築実行中
  • 19. AWS ManagementConsoleから構築-5 スタック構築完了 この時点ですべてのサービスが 起動している
  • 21. { "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" }] } } } }
  • 22. テンプレート解説 テンプレートのバージョン { (最新は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など)
  • 23. 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 } }
  • 24. Parametersとは スタック構築時に値の入力が可能 データ型、デフォルト値、最小最大値など設定可能 "Parameters" : { "Age":{ "Type":"Number", “Default” : “30”, “MinValue”: “20”, “MaxValue”: “60”, "Description":"input your age.“ }, "FirstName":{ "Type":"String", "Description":"input your first name.“ }, }
  • 25. Parametersのプロパティ 利用出来るプロパティ プロパティ 内容 Type データ型 “String” “Number” “CommaDelimitedList” Default デフォルト値 NoEcho 入力時に*****となる(パスワードなどに使用) AllowedValues 入力可能値の一覧指定 (例:[“true”,”false”] ) AllowedPattern 正規表現で入力可能パターンを指定(例:[a-zA-Z]*) MaxLength 最大文字数 MaxValue 最大値 MinValue 最小値 Description プロパティの詳細説明 ConstraintDescription 入力した値がAllowedPatternやMaxLengthなどの制約 に引っかかった時に表示する説明 (どのような制約があるかの説明を記述)
  • 26. Parametersの参照 入力したパラメータ値は、テンプレート中で “Ref”を使用し て参照可能 ユーザー名、パスワード、ドメインなどの可変部分に便利 ここにパラメータ入力値が反映される “Resources" : { “MyServer":{ “Type":“AWS::EC2::Instance", “Properties” : { “KeyName”: { “Ref” : “Age”}, “Tags” : { “Ref” : “FirstName”} } } }
  • 27. 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/UserGuide/index. html?intrinsic-function-reference.html
  • 28. 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/UserGuide/index. html?pseudo-parameter-reference.html
  • 29. 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 } }
  • 30. Mappingsとは キーとバリューのテーブル 例えば、入力値やリージョンによって値が変わるようなもの を決めるような使い方 "Mappings" : { "RegionTable" : { "us-east-1" : { マッピングを定義 "AMI" : "ami-8c1fece5“, (この例の場合、”RegionTable”という “Key” : “myKey-east” マッピングを定義) }, "us-west-1" : { "AMI" : "ami-3bc9997e“, “Fn::FindInTemplate” “Key” : “myKey-west” }, "ap-northeast-1" : { "AMI" : "ami-300ca731“, “Key” : “myKey-japan” } } },
  • 31. Mappingsの使い方 “Fn:FindInMap”で値を取得 "Fn::FindInMap" : [ "MapName", "Key", "Value"] MapName,key,Valueには”Ref”が利用可能 "Mappings" : { "RegionTable" : { "us-east-1" : { “Resources" : { "AMI" : "ami-8c1fece5“, “MyServer":{ “Key” : “myKey-east” “Type":“AWS::EC2::Instance", }, “Properties” : { "us-west-1" : { “ImageId”: { “Fn::FindInTemplate” "AMI" : "ami-3bc9997e“, “Fn:FindInMap” : [ “Key” : “myKey-west” “RegionTable” , }, { “Ref” : “region” }, "ap-northeast-1" : { “AMI”] "AMI" : "ami-300ca731“, }, “Key” : “myKey-japan” } } } } } この例だと、入力された }, regionパラメータによって 利用するAMIのIDを決定できる
  • 32. 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 } }
  • 33. 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” } } },
  • 34. 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" }] } } }
  • 35. リソースタイプ 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
  • 36. 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など)
  • 37. Outputsとは スタック構築後に取得・表示したい情報の定義 例えばアクセスURLや、DBの通信先情報、作ったIAMユーザ ー名など、あとで使用するもの マネジメントコンソールから確認できるので、スタックに関 する情報を出力すると便利(キーペア名、AZ、インスタン スIDなど)
  • 38. 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を使って文字列を 加工
  • 39. 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"] ] } } }
  • 41. テンプレートTips リソース定義にEC2インスタンスが必須ではない  DB構築だけ、オートスケールだけ、アラーム設定だけでもOK 参照関係があると、依存関係があるとみなされる。相互参照 や循環参照はNG(エラーとなる) 参照関係がある部分は、参照の整合性が取れるよう起動順を CloudFormationが決定 スタックを破棄すると、スタックにひもづくリソースは破棄 される  ただし”DeletionPolicy”を”Retain”にすると破棄されない "Resources" : { "myS3Bucket" : { "Type" : "AWS::S3::Bucket", "DeletionPolicy" : "Retain" } }
  • 42. テンプレートTips リソース数が多いと、何のリソースか分からなくなるので、 Tagsプロパティを使用する "MyInstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "SecurityGroups" : [ { "Ref" : "MySecurityGroup" } ], "ImageId" : "ami-20b65349", "Tags" : [ { "Key" : “Name", "Value" : “MyInstance" } ] } }
  • 45. Cloud-init AmazonLinuxに入っている、初期設定ツール  元々はUbuntuで作られたもの EC2インスタンスの起動時に、「userdata」として設定した スクリプトを呼び出す。  「#!」 で始まる文字列の場合のみ、スクリプトを実行 スクリプトを記述できるので、ロケール変更、アプリインス トール、ファイル書き換えなどが可能
  • 46. Cloud-init EC2インスタンス起動 User Dataに定義 Cloud-initがuserdataを 読み込む 読み込んだスクリプト を実行
  • 47. Cloud-initの利点と欠点 利点 インスタンス起動時に、インスタンスの初期化が可能  AMIとユーザーデータは分離できるので、AMIの作り込みが不要 になる  Apacheインストール済みのAMIを用意すると、OSやApacheの バージョンが上がったときに再作成になる 欠点 userdataは一度定義すると、書き換えは不可能  書き換えて再実行が出来ない(後述のスタック更新に使えない) 設定できるデータ量は、16KByteまで
  • 48. 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", ]] } } }
  • 49. 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", } }
  • 51. CloudFormation helpers EC2インスタンス初期化時のヘルパースクリプト群 AmazonLinux正式版(2011.09)以降に搭載 /opt/aws/bin に格納  cfn-init  cfn-get-metadata  cfn-signal  cfn-hup Python製
  • 52. 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": { : } }
  • 53. 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" ], } }
  • 54. 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" } }
  • 55. 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でパッケージを入れてい たらサービス再起動
  • 56. 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", ]]}} }
  • 57. 初期化シーケンス EC2インスタンス起動 cfn-init内で、meta-dataの読み込み Init.dに登録してある cloud-initが実行される Meta-dataの設定に従い、 Sources(ファイルダウンロード) User-data領域から、 Packages(インストール) スクリプトを読み込み Files(設定作成) Services(サービス) を実行 スクリプト内で、 cfg-initを呼び出し 起動完了
  • 58. 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がサーバ構築 起動完了
  • 59. その他スクリプト cfn-get-metadata  Metadataを簡単に取得出来るスクリプト cfn-signal  リソース「WaitCondition」と共に使用  cfn-signalを使用して、スタックに対して初期化状態の通知を することが出来る  アプリのインストールが失敗した場合にスタックを破棄したり できる cfn-hup  スタックを更新(StackUpdateAPIを使用)した場合に、それ を感知して指定のファイルを実行するフックスクリプト https://s3.amazonaws.com/cloudformation- examples/BoostrappingApplicationsWithAWSCloudFormation.pdf
  • 61. CloudFormer 既に構築済みのシステム構成から、テンプレートを作成する ツール テンプレート作成のベースとなるテンプレートを構築するの に利用可能 ベータ版 テンプレート CloudFormer EC2 EC2 AutoScaling
  • 62. CloudFormer実行方法 https://forums.aws.amazon.com/ann.jspa?annID=10 48 でテンプレートを入手 テンプレートからスタックを構築(リージョンは問わず) 構築後、Outputsに表示されているURLにアクセス
  • 65. 入れ子テンプレート テンプレートからテンプレートの呼び出しが可能 リソースタイプに “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"}, } },
  • 66. 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のエンドポイントなどの 定義が渡せる
  • 67. IAM Capability CloudFormationでIAMユーザーを作成する場合、ウィザー ド途中でチェックボックスをonにする必要がある  cfn-create-stackおよびcfn-update-stackの場合は、 「--capalilities CAPABILITY_IAM」をコマンドに付与
  • 71. 参考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
  • 72. Q&A Copyright © 2011 Amazon Web Services
  • 73. 次回の ほぼ週刊AWSマイスターシリーズは、 11月9日 17:00~ ~ Virtual Private Cloud (VPC) ~ Copyright © 2011 Amazon Web Services