はじめに
当記事はAWSのCloudFormationを用いてIPを固定したWindows Serverを立ち上げる方法を示しています。
AWS初心者が書いているので間違いやアドバイス等ございましたら指摘していただけると幸いです。
なお、当記事は大いに以下の記事様を参考に書かせていただいております。
AWS CloudFormationでEC2を構築
インフラ構成図
インフラ構成図は以下の通りです。
パブリックサブネットにWindows ServeのEC2を起動し、そこにElastic IPをアタッチしています。
また、ローカルのPCからクラウド上のWindows Serverへ接続するには特定のIPからのみアクセスできるように制限してあります。
テンプレート
テンプレートの解説は参考にさせていただいた記事様が非常に詳しく書いてくださっておりますので、そちらをご参考ください。
AWS CloudFormationでEC2を構築
ここでは差分の解説を行います。
EC2のAMIをwindows Serverに変更する
EC2:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0500753a8b9c3c925 # 変更 Windows Server AMI
KeyName: !Ref KeyName
InstanceType: t2.micro
NetworkInterfaces:
- AssociatePublicIpAddress: "true"
DeviceIndex: "0"
SubnetId: !Ref PubSub
GroupSet:
- !Ref EC2SG
UserData: !Base64 |
#!/bin/bash
sudo yum install -y git
Tags:
- Key: Name
Value: ec2-a-cf
EC2のSecurityGroupの追加
リモートデスクトップで接続するためのセキュリティーグループを追加します。
また、元記事の方ではMyIPを代入している部分はCidr表記で書く必要があり、IPだけを書き込むと型がおかしいと怒られます。
!Sub ${MyIP}/32
と記述することで回避することができます。
EC2SG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: ec2-sg-cf
GroupDescription: Allow RDP access only MyIP
VpcId: !Ref VPC
SecurityGroupIngress:
# rdp 以下追加
- IpProtocol: tcp
FromPort: 3389
ToPort: 3389
CidrIp: !Sub ${MyIP}/32
Elastic IPのアタッチ
Elastic IPは予め取得しておいてください。
Elastic IPのIDをAllocationId
に書き換えます。
# Elastic IPをEC2にアタッチ
EC2EIPAttouch:
Type: AWS::EC2::EIPAssociation
Properties:
AllocationId: eipalloc-[eip_id] # ElasticIPのIDに書き換える
InstanceId: !Ref EC2
Outputsの削除
IPは固定されているてOutputする必要がないので削除。
全体像
コード全体像
AWSTemplateFormatVersion: "2010-09-09"
Description: Provision EC2
Parameters:
KeyName:
Description: The EC2 Key Pair to allow RDP access to the instance
Type: "AWS::EC2::KeyPair::KeyName"
MyIP:
Description: IP address allowed to access EC2
Type: String
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: vpc-cf
IGW:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: igw-cf
# IGWをVPCにアタッチ
AttachGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref IGW
PubSub:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: ap-northeast-1a
VpcId: !Ref VPC
CidrBlock: 10.0.1.0/24
Tags:
- Key: Name
Value: pub-sub-a-cf
PubSubRT:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: pub-sub-a-rt-cf
# PubSub-インターネット間のルーティング
PubSubToInternet:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref PubSubRT
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref IGW
# ルートテーブルをサブネットに関連付け
AssoPubSubRT:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PubSub
RouteTableId: !Ref PubSubRT
EC2:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0500753a8b9c3c925 # 変更 Windows Server AMI
KeyName: !Ref KeyName
InstanceType: t2.micro
NetworkInterfaces:
- AssociatePublicIpAddress: "true"
DeviceIndex: "0"
SubnetId: !Ref PubSub
GroupSet:
- !Ref EC2SG
UserData: !Base64 |
#!/bin/bash
sudo yum install -y git
Tags:
- Key: Name
Value: ec2-a-cf
EC2SG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: ec2-sg-cf
GroupDescription: Allow RDP access only MyIP
VpcId: !Ref VPC
SecurityGroupIngress:
# rdp 以下追加
- IpProtocol: tcp
FromPort: 3389
ToPort: 3389
# CidrIp: 0.0.0.0/0
CidrIp: !Sub ${MyIP}/32
# Elastic IPをEC2にアタッチ
EC2EIPAttouch:
Type: AWS::EC2::EIPAssociation
Properties:
AllocationId: eipalloc-[eip_id] # ElasticIPのIDに書き換える
InstanceId: !Ref EC2
スタックの作成
-
AWSにログインし、CloudFormationへアクセスし、スタックの作成をクリックする。
-
ymlファイルをアップロードし、次へをクリックする。
-
スタックの名前を適当に入力し、KeyPairと、自分のIPを入力し、次へボタンをクリックする。
-
「ステップ3 スタックオプションの設定」は「次へ」をクリック、「ステップ4 レビュー」 は「送信」をクリックする。
-
作成したスタックのステータスが「CREATE_IN_PROGRESS」から「CREATE_COMPLATE」に変わるのを待つ。
-
「EC2」 → 「インスタンス」 へ移動する。
-
起動したEC2インスタンスを選択し、「接続」ボタンをクリックする。
-
「RDPクライアント」タブを選択し、「リモートデスクトップファイルのダウンロード」をクリックしダウンロードし、「パスワードを取得」ボタンをクリックする。
-
「プライベートキーファイルのアップロード」ボタンをクリックし、手順5で設定したキーペアをアップロードし、「パスワードを複合化」ボタンをクリックする。
-
パスワードが表示されるのでメモする。
-
手順8でダウンロードしたリモートデスクトップファイルを使い、リモートデスクトップ接続をする。
(windowsPCを用いている場合はリモートデスクトップアプリから接続する。MacPCの場合はApp StoreからMicrosoft Remote Desktopアプリをダウンロードして利用する。当記事はMac OSで実行している。) -
パスワードを聞かれるので、先程メモしたパスワードを入力し、ボタンをクリックしていくとWindows Serverへ接続される。
-
Windows Serverが不要になったらCloudFormationの起動したスタックを選択し、「削除」ボタンをクリックすることで削除することができる。
終わりに
煩雑なAWSアーキテクトをCloudFormationと数クリック程度で構築できるのは非常に便利な反面、書き方が個人的にはまだ難しくドキュメントと睨めっこな状態です。
もっと精進していきたいと思います。