EC2 cloudFormationTemplate: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
Строка 60: | Строка 60: | ||
"Parameters" : { |
"Parameters" : { |
||
</PRE> |
</PRE> |
||
+ | ХостНейм - тот хлостнейм который я хочу иметь на ВСЕХ нодах кластера. Это важно для паппета - что бы отработал сертефикат, привязанный к хостнейму. Других причин назначать одинаковый хостнейм нет. |
||
− | |||
<PRE> |
<PRE> |
||
"HostName": { |
"HostName": { |
||
Строка 68: | Строка 68: | ||
}, |
}, |
||
</PRE> |
</PRE> |
||
+ | Параметры паппет-сервера - днс-имя и ip адрес. Нужны для того что бы стянуть с паппет-сервера конфигурацию. Т.к. на паппет-сервере сертефикат тоже привязан к его хостнейму а ip может меняться (например при изменении типа инстанса) то храню оба параметра. Ниже - добавляю запись в /etc/hosts |
||
<PRE> |
<PRE> |
||
"PuppetMasterDNSName": { |
"PuppetMasterDNSName": { |
||
Строка 79: | Строка 80: | ||
"Description" : "The PuppetMaster IP address", |
"Description" : "The PuppetMaster IP address", |
||
"Type": "String", |
"Type": "String", |
||
− | "Default": "10. |
+ | "Default": "10.XX.XX.XX" |
}, |
}, |
||
+ | </PRE> |
||
+ | Ключ - ссылка на пре-конфигурированный ssh-ключ. Собственно это видно в комментарии. |
||
<PRE> |
<PRE> |
||
"KeyName" : { |
"KeyName" : { |
||
Строка 88: | Строка 91: | ||
}, |
}, |
||
</PRE> |
</PRE> |
||
+ | Пароль базы данных - т.к. это тестовая инсталяция для демонстрации то кроме томкета я ставлю апач php mysql. В качестве источника вдохнования я использовал LAMP Template. |
||
<PRE> |
<PRE> |
||
"DBRootPassword": { |
"DBRootPassword": { |
||
Строка 100: | Строка 104: | ||
}, |
}, |
||
</PRE> |
</PRE> |
||
+ | Тип инстанса - у меня самый простой т.к. это тест. |
||
<PRE> |
<PRE> |
||
"InstanceType" : { |
"InstanceType" : { |
Версия 16:59, 20 ноября 2012
EC2 Cloud Formation Template
Весь темрлейт тут: http://wiki.sirmax.noname.com.ua/index.php/EC2_cloudFormationTemplate_Example
Ниже разбор "По частям", насколько я сам за это время смог разобраться.
Задача
Требуется установить и настроить кластер из N машин. На клестре установить тестовое java-приложение. Настроить балансировку нагрузки. Число машин N в кластере должно изменяться динамически в зависимости от нагрузки. Для установки использовать средства амазона - CloudFormationTemplate. Т.к. задача тестовая то применить chef-solo и puppet для разварачивания сервисов. puppet-сервер имеется - настроенный и сконфигурированный.
CloudFormationTemplate
Это такая штука - позволяет описать конфигурацию стека машин (т.е. как я понимаю - группы машин! а не отдельного инстанса) в формате json (см. ссылку в начале). Формат довольно замороченный и для понимания не так уж и прост.
Подготовка управляющей ноды
Все действия мо мтеком будем производить с управляющей ноды. Опишу ее конфигурацию.
rpm
я поставил следующий набор пакетов для работы с амазоном:
aws-amitools-ec2.noarch aws-apitools-cfn.noarch aws-apitools-common.noarch aws-apitools-iam.noarch aws-apitools-as.noarch aws-apitools-ec2.noarch aws-apitools-elb.noarch aws-apitools-mon.noarch aws-apitools-rds.noarch aws-cfn-bootstrap.noarch aws-scripts-ses.noarch
Окружение
как я уже писал:
http://wiki.sirmax.noname.com.ua/index.php/EC2
нужно сконфигурировать окружение.
Принципиальной разницы нет - тот же набор ключей и сертефикатов. Переменные окружениея выглядят так:
export EC2_PRIVATE_KEY=$HOME/keys/pk-nocrypt-XXXXXXXXXXXXXXX.pem export EC2_CERT=$HOME/keys/cert-XXXXXXXXXXXXXXX.pem export AWS_PRIVATE_KEY=$HOME/keys/pk-nocrypt-XXXXXXXXXXXXXXX.pem export AWS_CERT=$HOME/keys/cert-XXXXXXXXXXXXXXX.pem export JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/ export AWS_CLOUDFORMATION_HOME=/opt/aws/apitools/cfn-1.0.11/ export EC2_HOME=/opt/aws AWS_CREDENTIAL_FILE=$HOME/keys/aws_cred export PATH=${EC2_HOME}:${AWS_CLOUDFORMATION_HOME}:${PATH}
aws_cred - файл с логином и паролем. т.е. с ключем и id что впрочем одно и то же.
AWSAccessKeyId=XXXXXXXXXXXXXXXXX AWSSecretKey=YYYYYYYYYYYYYYYYYYYYYYYYYYYYY
Темплейт (по шагам)
Разбираем по шагам. В следующей секции JSON будет не совсем валидный - т.к. разбит на разные секции. Копировать внимательно.
Parameters
Секция параметры - это собственно параметры которые можно переопределить при создании стека. Довольно удобно. Я определил для всех дефолтные значениея - и в реальности их не переопределяю. но это делает темплейт более легко переносимым.
Секция начинаеся, собственно, с ключевого слова:
"Parameters" : {
ХостНейм - тот хлостнейм который я хочу иметь на ВСЕХ нодах кластера. Это важно для паппета - что бы отработал сертефикат, привязанный к хостнейму. Других причин назначать одинаковый хостнейм нет.
"HostName": { "Description" : "Local Host Name (for puppet auth)", "Type": "String", "Default": "testtomcatnode.test.com" },
Параметры паппет-сервера - днс-имя и ip адрес. Нужны для того что бы стянуть с паппет-сервера конфигурацию. Т.к. на паппет-сервере сертефикат тоже привязан к его хостнейму а ip может меняться (например при изменении типа инстанса) то храню оба параметра. Ниже - добавляю запись в /etc/hosts
"PuppetMasterDNSName": { "Description" : "The PuppetMaster DNS name", "Type": "String", "Default": "ip-10-117-81-201.ec2.internal" },
"PuppetMasterIPAddress": { "Description" : "The PuppetMaster IP address", "Type": "String", "Default": "10.XX.XX.XX" },
Ключ - ссылка на пре-конфигурированный ssh-ключ. Собственно это видно в комментарии.
"KeyName" : { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances", "Type" : "String", "Default" : "hp" },
Пароль базы данных - т.к. это тестовая инсталяция для демонстрации то кроме томкета я ставлю апач php mysql. В качестве источника вдохнования я использовал LAMP Template.
"DBRootPassword": { "NoEcho": "true", "Description" : "Root password for MySQL", "Default" : "admin", "Type": "String", "MinLength": "1", "MaxLength": "41", "AllowedPattern" : "[a-zA-Z0-9]*", "ConstraintDescription" : "must contain only alphanumeric characters." },
Тип инстанса - у меня самый простой т.к. это тест.
"InstanceType" : { "Description" : "WebServer EC2 instance type", "Type" : "String", "Default" : "t1.micro", "AllowedValues" : [ "t1.micro","m1.small","m1.medium","m1.large","m1.xlarge","m2.xlarge","m2.2xlarge","m2.4xlarge","c1.medium","c1.xlarge","cc1.4xlarge","cc2.8xlarge","cg1.4xlarge"], "ConstraintDescription" : "must be a valid EC2 instance type." }
Это апппендикс закрывающий секцию параметров.
},