LoginSignup
6
6

More than 5 years have passed since last update.

CloudFormationを試した時のメモ

Posted at

CloudFormationを試した。以下Cfnとかく。一緒にkumogataをつかった。
CfnはAWSのリソースをプロビジョニングできる。

具体的には「セキュリティグループをつくって、EC2を起動する」みたいなことをJSONで記述することができる。成功した時には各リソースのIDがどうなったのかを出力したりできるようだ。
EC2のUserDataを使えば起動したインスタンスで実行したスクリプトも記述できるのでデプロイをキックしたりもできそうだ。

そんなわけでCfnはAWSで似たような環境を何度もつくる場合に便利である。

Cfnに渡すJSONは設計図のようなもので、変数のようなものを埋め込んだりすることができる。
テンプレートと呼ばれて、サンプルテンプレートが用意されている。

リファレンス
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-reference.html

Cfnにテンプレートを渡すと実際にAWSのリソースが構築される。作成されるリソースをまとめたものをスタックというらしい。
ようするに、スタックを作成するのに、テンプレートが必要となる。

スタックには使用したテンプレートや起動したインスタンスの情報をもっている。スタックを削除すると、このスタックに関連するリソースはすべて破棄される。

JSONをかくのはつらいので、今回はhttps://github.com/winebarrel/kumogataのDSLを活用した。

EC2インスタンスの作成とセキュリティグループでポート22と80をあけてみる例。

まずテンプレートとなるcfn.rbを作成した。特に変数的な部分はない。

cfn.rb
AWSTemplateFormatVersion "2010-09-09"

Description (<<-EOS).undent
  CloudFourmation Sample
EOS

Resources do
  WebEC2Instance do
    Type "AWS::EC2::Instance"
    Properties do
      ImageId "ami-cbf90ecb"
      InstanceType "t2.micro"
      KeyName "xxx" # 自分の公開鍵のペア名

      UserData do
        Fn__Base64 (<<-EOS).undent
          #!/bin/bash
          yum install -y httpd
          service httpd start

          echo Hello, World > /var/www/html/index.html
        EOS
      end
    end
  end

  WebServerSecurityGroup do
    Type "AWS::EC2::SecurityGroup"
    Properties do
      GroupDescription "Enable HTTP and SSH access"
      security_groups = ["80","22"].map do |port|
        _{
          IpProtocol "tcp"
          FromPort port
          ToPort port
          CidrIp "0.0.0.0/0"
        }
      end
      SecurityGroupIngress(*security_groups)
    end
  end
end

Outputs do
  WebsiteURL do
    Value 'http://<%= Fn__GetAtt "WebEC2Instance", "PublicDnsName"%>/'.fn_join
  end
end

Outputsに記述してある値はスタック生成終了後に出力として閲覧することができる。
URLをいれておくことで生成したウェブサーバにアクセスしやすくしている。

このテンプレートからstackを作成するには

$ kumogata create テンプレート名 スタック名

となる。具体的には

$ kumogata create cfn.rb sample-stack

みたいな感じだ。
スタック名は sample-stackとなるので、つくったリソースを削除したい場合は

$ kumogata delete sample-stack

となる。
kumogataをつかわずにJSONでかいてもあまり差はないがRubyの力をかりて処理がまとめたりできるのが魅力だ。
createする再にスタックを指定しない場合はスタックは削除されてリソースは残った状態になる。

ミドルウェアの設定済のAMIを用意しておいて、アプリケーションデータを保存しておく用のEBSを用意してデプロイコマンドのキックする感じにつかおうかなぁ、とおもっている。

たぶんスタックにテンプレートを再適用して変化部分のみ再実行なんかもできるようだ。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6