faec3a0962
The changes including: 1. Avoid hard code of resource and output keys 2. Decouple hot and cfn for outputs Change-Id: I1fd7e08ff5c699ddfcf98c81aed5f0d91c4248b3
130 lines
3.7 KiB
YAML
130 lines
3.7 KiB
YAML
HeatTemplateFormatVersion: '2012-12-12'
|
|
Description: 'Builtin AWS::RDS::DBInstance'
|
|
Parameters:
|
|
AllocatedStorage:
|
|
Type: String
|
|
DBInstanceClass:
|
|
Type: String
|
|
DBName:
|
|
Type: String
|
|
DBSecurityGroups:
|
|
Type: CommaDelimitedList
|
|
Default: ''
|
|
Engine:
|
|
Type: String
|
|
AllowedValues: ['MySQL']
|
|
MasterUsername:
|
|
Type: String
|
|
MasterUserPassword:
|
|
Type: String
|
|
Port:
|
|
Type: String
|
|
Default: '3306'
|
|
KeyName:
|
|
Type: String
|
|
Default: ''
|
|
|
|
Mappings:
|
|
DBInstanceToInstance:
|
|
db.m1.small: {Instance: m1.small}
|
|
db.m1.large: {Instance: m1.large}
|
|
db.m1.xlarge: {Instance: m1.xlarge}
|
|
db.m2.xlarge: {Instance: m2.xlarge}
|
|
db.m2.2xlarge: {Instance: m2.2xlarge}
|
|
db.m2.4xlarge: {Instance: m2.4xlarge}
|
|
|
|
Resources:
|
|
ServerSecurityGroup:
|
|
Type: AWS::EC2::SecurityGroup
|
|
Properties:
|
|
GroupDescription: 'Enable SSH access'
|
|
SecurityGroupIngress:
|
|
- IpProtocol: icmp
|
|
FromPort: '-1'
|
|
ToPort: '-1'
|
|
CidrIp: '0.0.0.0/0'
|
|
- IpProtocol: tcp
|
|
FromPort: '22'
|
|
ToPort : '22'
|
|
CidrIp : '0.0.0.0/0'
|
|
- IpProtocol: tcp
|
|
FromPort: {Ref: Port}
|
|
ToPort : {Ref: Port}
|
|
CidrIp : '0.0.0.0/0'
|
|
DatabaseInstance:
|
|
Type: AWS::EC2::Instance
|
|
Metadata:
|
|
AWS::CloudFormation::Init:
|
|
config:
|
|
files:
|
|
/tmp/db_setup.sql:
|
|
content:
|
|
'Fn::Replace':
|
|
- DBName: {Ref: DBName}
|
|
MasterUserPassword: {Ref: MasterUserPassword}
|
|
MasterUsername: {Ref: MasterUsername}
|
|
- |
|
|
CREATE DATABASE DBName;
|
|
GRANT ALL PRIVILEGES ON DBName.* TO "MasterUsername"@"%"
|
|
IDENTIFIED BY "MasterUserPassword";
|
|
FLUSH PRIVILEGES;
|
|
EXIT
|
|
mode: '000644'
|
|
owner: root
|
|
group: root
|
|
packages:
|
|
yum:
|
|
mariadb: []
|
|
mariadb-server: []
|
|
services:
|
|
systemd:
|
|
mysqld:
|
|
enabled: true
|
|
ensureRunning: true
|
|
Properties:
|
|
ImageId: F19-x86_64-cfntools
|
|
InstanceType: {'Fn::FindInMap': [DBInstanceToInstance,
|
|
{Ref: DBInstanceClass}, Instance]}
|
|
KeyName: {Ref: KeyName}
|
|
SecurityGroups: [{"Ref" : "ServerSecurityGroup"}]
|
|
UserData:
|
|
Fn::Base64:
|
|
Fn::Replace:
|
|
- 'AWS::StackName': {Ref: 'AWS::StackName'}
|
|
'AWS::Region': {Ref: 'AWS::Region'}
|
|
MasterUserPassword: {Ref: MasterUserPassword}
|
|
WaitHandle: {Ref: WaitHandle}
|
|
- |
|
|
#!/bin/bash -v
|
|
#
|
|
iptables -F
|
|
|
|
# Helper function
|
|
function error_exit
|
|
{
|
|
/opt/aws/bin/cfn-signal -e 1 -r \"$1\" 'WaitHandle'
|
|
exit 1
|
|
}
|
|
/opt/aws/bin/cfn-init -s AWS::StackName -r DatabaseInstance --region AWS::Region || error_exit 'Failed to run cfn-init'
|
|
# Setup MySQL root password and create a user
|
|
mysqladmin -u root password 'MasterUserPassword'
|
|
mysql -u root --password='MasterUserPassword' < /tmp/db_setup.sql || error_exit 'Failed to setup mysql'
|
|
|
|
# Database setup completed, signal success
|
|
/opt/aws/bin/cfn-signal -e 0 -r "MySQL server setup complete" 'WaitHandle'
|
|
|
|
WaitHandle:
|
|
Type: AWS::CloudFormation::WaitConditionHandle
|
|
WaitCondition:
|
|
Type: AWS::CloudFormation::WaitCondition
|
|
DependsOn: DatabaseInstance
|
|
Properties:
|
|
Handle: {Ref: WaitHandle}
|
|
Timeout: "600"
|
|
|
|
Outputs:
|
|
Endpoint.Address:
|
|
Value: {'Fn::GetAtt': [DatabaseInstance, PublicIp]}
|
|
Endpoint.Port:
|
|
Value: {Ref: Port}
|