AWSリレーショナルデータベースサービス(RDS AWS)は、クラウドでのリレーショナルデータベースのセットアップと運用を容易にするウェブサービスです。 RDSの詳細については、「AWSでRDS MySql(リレーショナルデータベースMySql)インスタンスを設定する方法」の記事を参照してください。
AWS CloudFormationを使用すると、プログラミング言語(yaml / json)または単純なテキストファイルを使用して、アプリケーションに必要なすべてのリソースをモデル化およびプロビジョニングできます。これにより、AWSリソースの信頼できる唯一の情報源が得られます。
この記事では、CloudformationStackを使用してRDSMySqlインスタンスを作成する手順を説明します。
- AWSアカウント(アカウントがない場合は作成します)。
- CloudformationStackの基本的な理解。
- AWSでのRDSMySql(リレーショナルデータベースMySql)インスタンスの基本的な理解。
何をしますか?
- AWSにログインします。
- CloudformationStackを使用してRDSMySqlインスタンスを作成する
AWSにログイン
- AWSログインページに移動するには、ここをクリックしてください。
上記のリンクをクリックすると、ログイン情報を使用してログインする必要がある次のWebページが表示されます。
AWSに正常にログインすると、すべてのサービスが一覧表示されたメインコンソールが表示されます。
Cloudformationを使用してRDSMySqlインスタンスを作成します。
Cloudformation Stackを使用してインスタンスを作成する前に、次のブロックからコードをコピーするか、ここからテンプレートをダウンロードして、ローカルマシンに保存してください。
---
AWSTemplateFormatVersion: '2010-09-09'
Description: This stack creates an RDS MySql 5.7 Instance
Parameters:
Owner:
Description: Enter the Name of the owner for this Stack.
Type: String
Default: Name
VPC:
Description: Select VPC form the available VPCs in your account.
Type: AWS::EC2::VPC::Id
PrivateSubnet1:
Description: Select Private Subnet 1.
Type: AWS::EC2::Subnet::Id
PrivateSubnet2:
Description: Select Private Subnet 2.
Type: AWS::EC2::Subnet::Id
PrivateSubnet3:
Description: Select Private Subnet 3.
Type: AWS::EC2::Subnet::Id
MasterUsername:
Description: Database administration name.
Type: String
Default: rdsroot
MasterUserPassword:
NoEcho: 'true'
Description: Database administration password.
Type: String
MinLength: '8'
AllowedPattern: "[a-zA-Z0-9!?]*"
ConstraintDescription: Must only contain upper and lowercase letters and numbers
BackupRetentionPeriod:
Description: Enter Backup Retention Period in Days.
Type: Number
Default: '5'
MultiAvailabilityZone:
Description: Do you want to Enable Multi Availability Zones?
Type: String
Default: 'true'
AllowedValues:
- 'true'
- 'false'
TcpPort:
Description: Enter RDS Listening TCP Port number.
Type: Number
Default: '3306'
PreferredBackupWindow:
Description: Enter Preferred Backup Window Time.
Type: String
Default: 15:00-17:00
PreferredMaintenanceWindow:
Description: Enter Preferred Maintenance Window Time.
Type: String
Default: Sun:18:00-Sun:22:00
AllocatedStorage:
Default: '15'
Description: Enter the size of the database (Gb)
Type: Number
MinValue: '5'
MaxValue: '6144'
ConstraintDescription: Must be between 5-6144
SnapshotOnDelete:
Description: Do you want to create a Snapshot on instance delete?
Type: String
Default: 'true'
AllowedValues:
- 'true'
- 'false'
AutoMinorVersionUpgrade:
Description: Do you want to allow automatic minor version upgrade?
Type: String
Default: 'true'
AllowedValues:
- 'true'
- 'false'
InstanceType:
Description: Select Instance Type.
Type: String
Default: db.t2.micro
ConstraintDescription: Must be a valid EC2 instance type.
Mappings:
Settings:
MySQL:
Engine: MySQL
Version: '5.7'
Conditions:
ConfigureSnapshotOnDelete:
Fn::Equals:
- Ref: SnapshotOnDelete
- 'true'
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
- Label:
default: Ownership
Parameters:
- Owner
- Label:
default: Network Configuration
Parameters:
- VPC
- PrivateSubnet1
- PrivateSubnet2
- PrivateSubnet3
- Label:
default: RDS Configuration
Parameters:
- InstanceType
- MasterUsername
- MasterUserPassword
- BackupRetentionPeriod
- PreferredBackupWindow
- PreferredMaintenanceWindow
- SnapshotOnDelete
- AllocatedStorage
- AutoMinorVersionUpgrade
- TcpPort
- MultiAvailabilityZone
ParameterLabels:
Owner:
default: Team or Individual Owner
InstanceType:
default: Instance Type
PrivateSubnet1:
default: Private Subnet 1
PrivateSubnet2:
default: Private Subnet 2
PrivateSubnet3:
default: Private Subnet 3
MasterUsername:
default: Master Username
MasterUserPassword:
default: Master User Password
BackupRetentionPeriod:
default: Backup Retention Period
PreferredBackupWindow:
default: Preferred Backup Window
PreferredMaintenanceWindow:
default: Preferred Maintenance Window
AllocatedStorage:
default: Allocated Storage
AutoMinorVersionUpgrade:
default: Auto Minor Version Upgrade
TcpPort:
default: TCP Port
MultiAvailabilityZone:
default: Multi Availability Zone?
SnapshotOnDelete:
default: Snapshot On Delete?
Resources:
RDSAccessSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Instance to RDS Access
VpcId:
Ref: VPC
Tags:
- Key: Name
Value:
Fn::Join:
- ''
- - Ref: AWS::StackName
- "-rds"
- Key: Owner
Value:
Ref: Owner
AccessSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
DependsOn: RDSAccessSecurityGroup
Properties:
GroupId:
Ref: RDSAccessSecurityGroup
IpProtocol: tcp
FromPort:
Ref: TcpPort
ToPort:
Ref: TcpPort
SourceSecurityGroupId:
Ref: RDSAccessSecurityGroup
DbSubnetGroup:
Type: AWS::RDS::DBSubnetGroup
Properties:
DBSubnetGroupDescription:
Fn::Join:
- ''
- - 'RDS Subnet Group for '
- Ref: AWS::StackName
SubnetIds:
- Ref: PrivateSubnet1
- Ref: PrivateSubnet2
- Ref: PrivateSubnet3
Tags:
- Key: Name
Value:
Ref: AWS::StackName
- Key: Owner
Value:
Ref: Owner
DbInstance:
Type: AWS::RDS::DBInstance
DeletionPolicy: Snapshot
DependsOn:
- DbSubnetGroup
- RDSAccessSecurityGroup
Properties:
AllocatedStorage:
Ref: AllocatedStorage
AllowMajorVersionUpgrade: 'false'
AutoMinorVersionUpgrade:
Ref: AutoMinorVersionUpgrade
BackupRetentionPeriod:
Ref: BackupRetentionPeriod
DBInstanceClass:
Ref: InstanceType
DBInstanceIdentifier:
Ref: AWS::StackName
DBSubnetGroupName:
Ref: DbSubnetGroup
Engine:
Fn::FindInMap:
- Settings
- MySQL
- Engine
EngineVersion:
Fn::FindInMap:
- Settings
- MySQL
- Version
MasterUsername:
Ref: MasterUsername
MasterUserPassword:
Ref: MasterUserPassword
MultiAZ:
Ref: MultiAvailabilityZone
Port:
Ref: TcpPort
PreferredBackupWindow:
Ref: PreferredBackupWindow
PreferredMaintenanceWindow:
Ref: PreferredMaintenanceWindow
PubliclyAccessible: 'false'
StorageEncrypted: 'false'
StorageType: gp2
VPCSecurityGroups:
- Ref: RDSAccessSecurityGroup
Tags:
- Key: Name
Value:
Ref: AWS::StackName
- Key: Owner
Value:
Ref: Owner
Outputs:
Owner:
Description: Team or Individual that Owns this Formation.
Value:
Ref: Owner
VPC:
Description: VPC Used
Value:
Ref: VPC
RDSHostname:
Description: RDS Hostname
Value:
Fn::GetAtt:
- DbInstance
- Endpoint.Address
RDSPort:
Description: RDS Port
Value:
Fn::GetAtt:
- DbInstance
- Endpoint.Port
DbSubnetGroup:
Description: DB Subnet Group Created.
Value:
Ref: DbSubnetGroup
RDSAccessSecurityGroup:
Description: RDS Access Security Group Created.
Value:
Ref: RDSAccessSecurityGroup
PrivateSubnet1:
Description: Private Subnet 1 Deployment
Value:
Ref: PrivateSubnet1
PrivateSubnet2:
Description: Private Subnet 2 Deployment
Value:
Ref: PrivateSubnet2
PrivateSubnet3:
Description: Private Subnet 3 Deployment
Value:
Ref: PrivateSubnet3
BackupRetentionPeriod:
Description: Backup Retention Period in Days
Value:
Ref: BackupRetentionPeriod
MultiAvailabilityZone:
Description: Enable Multi Availability Zones?
Value:
Ref: MultiAvailabilityZone
SnapshotOnDelete:
Description: Create Snapshot on Delete?
Value:
Ref: SnapshotOnDelete
PreferredBackupWindow:
Description: Preferred Backup Window
Value:
Ref: PreferredBackupWindow
PreferredMaintenanceWindow:
Description: Preferred Maintenance Window
Value:
Ref: PreferredMaintenanceWindow
AllocatedStorage:
Description: Allocated Storage in GB
Value:
Ref: AllocatedStorage
ローカルマシンにテンプレートを用意したら、AWSコンソールに移動し、上部のメニューバーから[サービス]をクリックして、[Cloudformation]を検索します。
メインのcloudformationダッシュボードは次のように表示されます。 [スタックの作成]ボタンをクリックしてスタックを作成し、RDSMySqlインスタンスを作成します。
[テンプレートファイルのアップロード]ラジオボタンをクリックし、ローカルマシンから保存したテンプレートを選択して、[次へ]ボタンをクリックします。
スタックに選択した名前を指定し、必要な詳細を入力して、[次へ]をクリックして先に進みます。
スタックによって作成されるRDSMySqlインスタンスに適用できるCloudformationStackにタグを提供できます。 [次へ]をクリックして続行します。
下にスクロールして[スタックの作成]をクリックし、スタックを作成します。
作成には時間がかかります。イベントの下で実行されているアクションを確認できます。
作成中のRDSMySqlインスタンスのステータスを確認するには、[Services]をクリックして、[RDS]を検索します。
メインダッシュボードで、[DBインスタンス]をクリックします。
ここで、インスタンスのステータスが「変更中」であることがわかります。これは、作成されて使用できるようになるまでに少し時間がかかります。
Cloudformation Stackイベントでは、しばらくすると、RDS MySqlインスタンスが作成されると、ステータスが「CREATE_COMPLETE」であることがわかります。
RDSコンソールで、ステータスが「利用可能」であることがわかります。
RDS MySqlインスタンスの詳細を表示するには、[RDSMySqlインスタンス]->[接続とセキュリティ]をクリックします。
RDS MySqlインスタンスに接続するには、インスタンスが提供するエンドポイントを使用できます。
インスタンスが不要になったら、CloudformationメインダッシュボードからCloudformationスタックを削除して、コストを節約します。
結論
この記事では、CloudformationStackを使用してRDSMySqlインスタンスを作成する手順を説明しました。