【AWS】CloudFormationのお勉強_サンプルテンプレートから"Resource"を読 | 瀬戸内の雲のように

【AWS】CloudFormationのお勉強_サンプルテンプレートから"Resource"を読み解く

Posted: 2017-12-25


スポンサーリンク

目次

背景

今更ですが、CloudFormationのお勉強をしています。CloudFormationは使いこなせばすごく便利だと(想像で)考えているのですが、実際に触ると難しいので敬遠してました。
しかしそろそろ使えるようにならねば!と一念発起し勉強してみました。


(前提)CloudFormationとは

AWSが提供する機能の一つです。テンプレートと言う「リソースの集合体」を管理できる機能です。(リソースとは、EC2インスタンスであったりElasticIPであったりSecurityGroupであったり、AWSが提供するサービス一つ一つのことです)
こいつを使うと、自動デプロイが容易になったりオートスケールさせたりといい事ずくめなのですが、使うのが難しいです。


今回の内容

AWSが提供する「Ruby On Rails stuck」というサンプルテンプレートから、インスタンス構築に必要な"Resource"というパラメータを読み解いてみます

必要なパラメータ

まず1階層目のパラメータを読み解くと

$ cat template.json | jq ". | keys"
[
  "AWSTemplateFormatVersion",
  "Description",
  "Mappings",
  "Outputs",
  "Parameters",
  "Resources"
]

それぞれ、以下のような役割です。重要な順に説明します。

  • Resources: リソースの構築に必要なパラメータ(後述)
  • Parameters: 構築時に設定する可変パラメータ。入力できる項目はResourcesで定義
  • Outputs: 構築完了時に出力する内容(例: CF内で確保したElasticIPとか)
  • Mappings: 可変パラメータに対応して他のパラメータも設定する場合のリスト
  • Description: 説明
  • AWSTemplateFormatVersion: 書式のバージョン(ほぼ固定値と考えてOK)

では本題のResourcesに入ろうと思います。


Resources

管理するリソースを定義する部分。このテンプレートで言うとEC2インスタンスセキュリティグループの2つが出てきます。

$ cat template.json | jq ".Resources | keys"
[
  "WebServer",
  "WebServerSecurityGroup"
]

次にこのWebServerの中身を見ていきます。

$ cat template.json | jq ".Resources.WebServer | keys"
[
  "CreationPolicy",
  "Metadata",
  "Properties",
  "Type"
]

この4つが定義されています。この中身をみてみましょう。


CreationPolicy
このテンプレートではタイムアウト値が定義されています。

$ cat template.json | jq ".Resources.WebServer.CreationPolicy"
{
  "ResourceSignal": {
    "Timeout": "PT30M"
  }
}



Type
リソースのタイプが定義されています。なので、ここにはEC2インスタンスであることが書かれています。

$ cat template.json | jq ".Resources.WebServer.Type"
"AWS::EC2::Instance"



Properties
インスタンス作成に必要なパラメータが定義されています。

$ cat template.json | jq ".Resources.WebServer.Properties | keys"
[
  "ImageId",
  "InstanceType",
  "KeyName",
  "SecurityGroups",
  "UserData"
]

もう少し詳細に見てみましょう

$ cat template.json | jq ".Resources.WebServer.Properties "
{
  "ImageId": {
    "Fn::FindInMap": [
      "AWSRegionArch2AMI",
      {
        "Ref": "AWS::Region"
      },
      {
        "Fn::FindInMap": [
          "AWSInstanceType2Arch",
          {
            "Ref": "InstanceType"
          },
          "Arch"
        ]
      }
    ]
  },
  "InstanceType": {
    "Ref": "InstanceType"
  },
  "SecurityGroups": [
    {
      "Ref": "WebServerSecurityGroup"
    }
  ],
  "KeyName": {
    "Ref": "KeyName"
  },
  "UserData": {
    "Fn::Base64": {
      "Fn::Join": [
        "",
        [
          "#!/bin/bash -xe\n",
          "yum update -y aws-cfn-bootstrap\n",
          "/opt/aws/bin/cfn-init -v ",
          "         --stack ",
          {
            "Ref": "AWS::StackId"
          },
          "         --resource WebServer ",
          "         --configsets full_install ",
          "         --region ",
          {
            "Ref": "AWS::Region"
          },
          "\n",
          "/opt/aws/bin/cfn-signal -e $? ",
          "         --stack ",
          {
            "Ref": "AWS::StackId"
          },
          "         --resource WebServer ",
          "         --region ",
          {
            "Ref": "AWS::Region"
          },
          "\n"
        ]
      ]
    }
  }
}

インスタンスのイメージIDなどが定義されています。ここで定義された情報を元にインスタンスはデプロイされるということです。


metadata
ここには初期設定の内容が定義されています。

$ cat template.json | jq ".Resources.WebServer.Metadata | keys"
[
  "AWS::CloudFormation::Init"
]

$ cat template.json | jq '.Resources.WebServer.Metadata."AWS::CloudFormation::Init" | keys'
[
  "configSets",
  "configure_mysql",
  "install_application",
  "install_cfn",
  "install_mysql",
  "install_ruby_2_3_1"
]

このようになっています。このconfigSetsに設定作業一覧が定義されており、それ以降に具体的な作業内容(コマンド)が定義されています。
ここではDBのセットアップなどの作業が書かれています。

$ cat template.json | jq '.Resources.WebServer.Metadata."AWS::CloudFormation::Init".configSets'
{
  "full_install": [
    "install_cfn",
    "install_ruby_2_3_1",
    "install_mysql",
    "configure_mysql",
    "install_application"
  ]
}

$ cat template.json | jq '.Resources.WebServer.Metadata."AWS::CloudFormation::Init".configure_mysql'
{
  "commands": {
    "01_set_mysql_root_password": {
      "command": {
        "Fn::Join": [
          "",
          [
            "mysqladmin -u root password '",
            {
              "Ref": "DBRootPassword"
            },
            "'"
          ]
        ]
      },
      "test": {
        "Fn::Join": [
          "",
          [
            "$(mysql ",
            {
              "Ref": "DBName"
            },
            " -u root --password='",
            {
              "Ref": "DBRootPassword"
            },
            "' >/dev/null 2>&1 </dev/null); (( $? != 0 ))"
          ]
        ]
      }
    },
    "02_create_database": {
      "command": {
        "Fn::Join": [
          "",
          [
            "mysql -u root --password='",
            {
              "Ref": "DBRootPassword"
            },
            "' < /tmp/setup.mysql"
          ]
        ]
      },
      "test": {
        "Fn::Join": [
          "",
          [
            "$(mysql ",
            {
              "Ref": "DBName"
            },
            " -u root --password='",
            {
              "Ref": "DBRootPassword"
            },
            "' >/dev/null 2>&1 </dev/null); (( $? != 0 ))"
          ]
        ]
      }
    },
    "03_cleanup": {
      "command": "rm /tmp/setup.mysql"
    }
  }
}




こんな感じになります。
この内容は初歩の初歩ですが、これさえ理解すればとりあえずインスタンスを立てるということはできそうです。


スポンサーリンク




コメント一覧

2021/07/30 09:52:50

PatrickWefさん

MEET HOT LOCAL GIRLS TONIGHT WE GUARANTEE FREE SEX DATING IN YOUR CITY CLICK THE LINK:
FREE SEX


2021/07/31 08:45:00

Romeofesさん

what tv series are on netflix ireland save the last dance for me 2013 cast 3 ninjas knuckle up full movie download skagen watch women's white ceramic bracelet 816xswxc1 microsoft security essentials free download windows vista 64 bit

lavender
oxford dictionary english free download full version for windows 7 emergency couple ep 16 eng sub korean drama meilleur film d action 20 ans d injustice film complet en entier 2016 what movie has i could have danced all night spartacus vengeance season 1 episode 2 stream

https://e1.alaxapt.site
ooh baby i love your way movie dolly ki doli sonam kapoor full movie barbie movie song look how high we can fly lyrics the real l word season 3 tv how will i know glee cast mp3


2021/08/02 04:53:30

commentdkmba511さん

Litecoinin baska bir an?l?s ismi daha vard?r. Yurtici bitcoin alabileceginiz 2 tane guvenilir site bulunmaktad?r. Dogecoin piyasada yukselis gosteren en iyi coinlerden birisi durumdad?r. Sizler kac dolar tuttugunu ogrendikten sonra odeme islemini gerceklestirdiginiz takdirde birkac dakika icerisinde dogecoin sahibi. http://wcso.freeddns.com › robinhood-app-dogecoin-rally-failed-trades. http://weightlossdiet.iownyour.org (Yes, yes, even you!) My laptop is mining for $DOGE right now and I don't have to do a single. http://wcso.freeddns.com Dogecoin has had a busy few days in terms of news. as part of the stock-price pumping campaign that included GameStop and other heavily. http://vickybrown.freeddns.com OKEx sizlere Dogecoin tan?t?m? sunar.. Dogecoin Fiyat Tablosu Another change in set the reward at 10, DOGE per block. http://wagnercontrolspray.iownyour.org Robinhood experienced a partial cryptocurrency trading outage during a spike in Dogecoin prices. But that's also meant that problems with Robinhood can affect markets, since it may be the only route that a mass of traders. http://watermarq.proxydns.com Dogecoin (CCC:DOGE-USD) news for Wednesday includes it finally coming to Coinbase (NASDAQ:COIN) but not everyone will be able to buy. http://travelingmanfilms.freeddns.com Cryptocurrency 'Dogecoin' Releases Super Bowl Commercial When 'Dogecoin' was first created, it was made as a joke but now it is worth over. http://turkiyeotosanayirehberi.proxydns.com Currently Wallet supports: Bitcoin, Bitcoin Cash, Litecoin, Ethereum, Ethereum Classic, XRP, Stellar Lumens, Dogecoin, and all ERC20 tokens (including USDC?. http://vazfi.freeddns.com “The Spiritus car is for those who want more in life, and we are Nebula Miner – make money while you are parked. http://vmq.proxydns.com Earn FREE Dogecoin (DOGE) by answering paid surveys, playing games, or watching videos. Join the cryptocurrency revolution today. Sign up now and get. http://usbikelawyer.proxydns.com I'd be happy to contribute to a developer address to help w/ the nodes. I'm running , is there a newer version? http://vendeepergolabois.proxydns.com View Dogecoin (DOGE) price prediction chart, yearly average forecast price chart?, prediction tabular data of all Feb , ? USD, % Jan , ? USD, %. http://ussearch.proxydns.com Since there is no limit to the supply of this coin, Dogecoin can inflate When Tezos was launched in , it had the largest ICO to date. http://vestelklimaservis.freeddns.com Unfortunately, Robinhood makes this process impossible because they sell the ability to invest in crypto but not the actual tokens. http://v2science.freeddns.com



コメントを投稿する


お名前


コメント内容





TOP back