You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.7 KiB
129 lines
3.7 KiB
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}
|
|
|