この記事を書いている私について
AWS CloudTechという動画学習サービスに参加し、AWSエンジニアを目指すための備忘録です
本記事の目標
前回の「初めてのCloudFormation 環境準備からVPC作成まで」に引き続き、
今回はAWS CLIkからRDSをスタックを作成します。
まず最初にAWC CLI環境を整えます。
その後、CLIからSSH接続しCloud Formationを使ってプロビジョニングします。
前提条件
・PCはWindows10が前提。
Macの方は必要な個所を読み替えていただくようお願いします。
・下記構成図のようにVPC/EC2(キーペア設定済)/サブネットを作成済みであること。
※VPCは前回の記事で作成しているため、再利用します。
下記構成図に記載しているRDSはCloud Formationにて作成します。
今回の構成図
構築の流れ
以下の流れで構築を進めます。
・コンソールからIAM権限を付与
・Remote-SSH開発環境を整える
・AWS CLIの設定
・CloudFormation スタックの作成
・構築出来たか確認
・CloudFormation スタックを削除
・コンソールからIAM権限を付与
・IAMコンソールを開き、ec2-user
を作成します。
その後、アクセス権限の追加から既存のポリシーをアタッチを選択。
ポリシーの中からEC2/CloudFormation/VPC
の権限をアタッチします。
※必要な権限だけを割り振るのが良いですが、割り振る権限が分からない方はフルアクセスをアタッチすることになると思います。
その場合、学習後は権限を削除しておきましょう。
・認証情報からアクセスキーの作成
を行い、アクセスキーID
とシークレットアクセスキー
をメモしておきます。
※シークレットアクセスキーは一度しか表示されませんので、必ずメモして安全な場所に保管しておいてください。
・VSCodeのRemote-SSH開発環境を整える
下記の記事を参考にしました。
まず、VSCodeのプラグインRemote - SSH
をインストールします。
開発用インスタンス(EC2)を起動し、SSH ログイン設定を行います。
設定後は開発用インスタンスにログインできることを確認します。
・AWS CLIの設定
・AWS CLIのインストールを行っていきます。
下記の記事を参考にしました。
・AWS CLIのconfigファイルを設定していきます。
開発用インスタンス(EC2)にSSH接続を行った後、
ホームディレクトリの下の「.aws」(隠しディレクトリ)にあるテキストファイル
「config」と「credentials」ファイルを作成します。
①config
AWSCLIコマンドの出力形式と操作対象のリージョンを記載する。
(出力形式は、jsonにする)
②credentials
IAM権限のアクセスキー、シークレットアクセスキーを記載する。
[!!注意!!]絶対に外部に公開しないこと
・CloudFormation スタックの作成
ここからCloudFormationのコマンドを使ってRDSを作成していきます。
※詳細は他に素晴らしい記事がたくさんありますのでここでは割愛します。
AWSTemplateFormatVersion: "2010-09-09"
# ------------------------------------------------------------#
# Description
# ------------------------------------------------------------#
Description: CloudTechDemo
# ------------------------------------------------------------#
# Parameters
# ------------------------------------------------------------#
#スタック作成時に入力する各種パラメータ
Parameters:
#データベースパスワード
DatabasePassword:
Type: String
Description: Database password
NoEcho: "true"
#サブネット
ApplicationSubnets:
Type: List<AWS::EC2::Subnet::Id>
Description: Target subnets
#VPCのサイダー
VpcId:
Type: AWS::EC2::VPC::Id
Description: Target VPC
#DBinboundのサイダー
DBinboundCidrIPs:
Type: String
Description: SecurityGroupInboundIP
# ------------------------------------------------------------#
# Resources
# ------------------------------------------------------------#
#作成する各種AWSリソース
Resources:
#RDS
ApplicationDatabase:
Type: AWS::RDS::DBInstance
#RDSのプロパティ
Properties:
Engine: MySQL
EngineVersion: 5.7
DBInstanceClass: db.t2.micro
AllocatedStorage: 10
StorageType: gp2
MasterUsername: CloudTech
MasterUserPassword:
Ref: DatabasePassword
DBName: CloudTech
VPCSecurityGroups:
- !Ref ApplicationDatabaseSecurityGroup
DBSubnetGroupName: !Ref ApplicationDatabaseSubnetGroup
MultiAZ: "false"
AvailabilityZone: !Sub ${AWS::Region}a
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-db
#サブネットグループ
ApplicationDatabaseSubnetGroup:
Type: AWS::RDS::DBSubnetGroup
Properties:
DBSubnetGroupDescription: Application Database Subnet Group
SubnetIds: !Ref ApplicationSubnets
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-db-subnet-group
#セキュリティグループ
ApplicationDatabaseSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: !Sub ${AWS::StackName} Application Database Security Group
VpcId: !Ref VpcId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 3306
ToPort: 3306
CidrIp: !Ref DBinboundCidrIPs
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-db-sg
}
DatabasePassword=xxxx
ApplicationSubnets=sb-xxxx,sb-xxxx
VpcId=xxxx
DBinboundCidrIPs=xxxx
}
※xxxxの中身はご自身の環境に置き換えて記載してください。
###コードの中身について
ファイルをstack.ymlとdev.cfgの2つに分けて記述しています。
cfgファイルを分割することで環境毎に違う設定をまとめて管理することが出来ます。
###コマンド実行
下記のコマンドで作成したファイルをデプロイします。
aws cloudformation deploy --template-file stack.yml --stack-name RDSmySQLcreate --parameter-overrides $(cat dev.cfg)
エラーが無ければ、想定通り構築出来たかコンソール画面を確認していきます。
エラーが発生した場合、下記のメッセージが表示されます。
イベントからエラー内容を確認します。
※エラーが無い場合は上記のようにステータスがCREATE_COMPLETE
となります。
・構築出来たか確認
下記の確認をします。
・コマンド実行後、CloudFormationに画面を切り替えるとRDSmySQLcreate
というスタックが作成実行中となってから、下記の確認を行う。
・RDSのデータベースエンジンは指定したとおりのものになっていること。
・リージョンはap-northeast-1a
、インスタンスタイプはdb.t2.micro
、そしてVPCは設定ファイルで指定したVPCで狙いどおりにデプロイされていること。
・アベイラビリティゾーン/サブネットが想定どおりになっていること。
・セキュリティグループのインバウンドルールを確認すると、ポート3306
で、CIDR IPは設定ファイルで指定したとおりのレンジになっていること。
・CloudFormation スタックを削除
下記コマンドからRDSはをスタックごと削除します。
aws cloudformation delete-stack
削除したら必ずCloudFormationの画面からも削除されたことを確認してから終了するようにして下さい。
RDSの画面からも作成したRDSが削除中になっていることを確認して下さい。
以上で終了です。お疲れ様でした。
本課題で発生する費用
EC2 X 1
RDS X 1
一日辺り5円ほどになります。
最後に
AWS CLIを使ってCloudFormationを実行する方法が分かりました。
AWS CLI、IAM周りでハマってしまったので、
今後はLinuxやIAM周りを意識して勉強しよう考えています。
AWS CloudTechの課題としてこれらが残っていますので、
やったことを今後のQiita記事にして発信していきたいと思います。
これから始められる方の参考になれば嬉しいです。
今後の学習予定↓↓↓
・Lamda関数
・Udemy教材
AWSで作るWEBアプリケーション 実践講座
https://www.udemy.com/course/webapplication-on-aws/learn/lecture/22580692#overview
・AWS公式ハンズオン
・社内でAWSハンズオン開催←NEW!!
内容に不備がございましたら、ご指摘いただけますと幸いです。
今後の励みになりますので、良ければ「LGTM」をお願いします。
閲覧ありがとうございました。
この記事はAWS初学者を導く体系的な動画学習サービス「AWS CloudTech」のハンズオンを基に作成しました。