EC2 cloudFormationTemplate: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
Строка 52: | Строка 52: | ||
</PRE> |
</PRE> |
||
==Темплейт (по шагам)== |
==Темплейт (по шагам)== |
||
+ | Разбираем по шагам. В следующей секции JSON будет не совсем валидный - т.к. разбит на разные секции. Копировать внимательно. |
||
+ | ===Parameters=== |
||
+ | Секция параметры - это собственно параметры которые можно переопределить при создании стека. Довольно удобно. Я определил для всех дефолтные значениея - и в реальности их не переопределяю. но это делает темплейт более легко переносимым. |
||
+ | <BR> |
||
+ | Секция начинаеся, собственно, с ключевого слова: |
||
+ | <PRE> |
||
+ | "Parameters" : { |
||
+ | </PRE> |
||
+ | |||
+ | <PRE> |
||
+ | "HostName": { |
||
+ | "Description" : "Local Host Name (for puppet auth)", |
||
+ | "Type": "String", |
||
+ | "Default": "testtomcatnode.test.com" |
||
+ | }, |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | "PuppetMasterDNSName": { |
||
+ | "Description" : "The PuppetMaster DNS name", |
||
+ | "Type": "String", |
||
+ | "Default": "ip-10-117-81-201.ec2.internal" |
||
+ | }, |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | "PuppetMasterIPAddress": { |
||
+ | "Description" : "The PuppetMaster IP address", |
||
+ | "Type": "String", |
||
+ | "Default": "10.62.67.238" |
||
+ | }, |
||
+ | <PRE> |
||
+ | "KeyName" : { |
||
+ | "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances", |
||
+ | "Type" : "String", |
||
+ | "Default" : "hp" |
||
+ | }, |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | "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." |
||
+ | }, |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | "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." |
||
+ | } |
||
+ | </PRE> |
||
+ | Это апппендикс закрывающий секцию параметров. |
||
+ | <PRE> |
||
+ | }, |
||
+ | </PRE> |
||
==Ссылки== |
==Ссылки== |
Версия 16:49, 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" },
"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.62.67.238" }, <PRE> "KeyName" : { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances", "Type" : "String", "Default" : "hp" },
"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." }
Это апппендикс закрывающий секцию параметров.
},