前回はCloudTrailを有効にして各種AWS操作ログを取得しました。
前回(第6回) – CloudTrail
https://syachiku.net/awscloudformationiac6-trail/
また、こちらの記事ではCloudTrailのログをElasticsearch+Kibanaで可視化することも行っています。
https://syachiku.net/cloudtrail-es/
AWSのCloudFormationでIaCを実践してみる(すべての記事一覧)
第1回 – VPC https://syachiku.net/awscloudformationiac1-vpc/
第2回 – Role https://syachiku.net/awscloudformationiac2-iam-role/
第3回 – SecurityGroup https://syachiku.net/awscloudformationiac3-sg/
第4回 – EC2 https://syachiku.net/awscloudformationiac4-ec2/
第5回 – VPC FlowLogs https://syachiku.net/awscloudformationiac5-flowlogs/
第6回 – CloudTrail https://syachiku.net/awscloudformationiac6-trail/
第7回 – R53 HostedZone https://syachiku.net/awscloudformationiac7-r53-hosted/
今回はログ関連ではなく、構築したDNS内で名前解決ができるようにするため、Route53のPrivateHosted Zoneを作成して作成したDNS名をEC2インスタンスと紐づけてみたいと思います。
もちろんCloudFormationによるコードで設定します。
※今回実施することは基本的には無料ですが、利用料金が発生する可能性が少なからずありますので、あくまで自己責任でお願いします。
1. 前提条件
- AWSアカウントが取得できていること
- 適切な権限(=Admin相当)をもったIAMユーザーを作成していること
- ルーティングなどの最低限のネットワークの知識があること
- YAMLの書きかたを知っていること(CloudFormationはjsonもしくはyamlで書けますが、今回はyamlで書いていきます。)
2. 今回作成するAWS環境
- Route53のPrivateHotedZoneを構築します。
Domain名は「aws-infra.local」とします。 - 事前に構築してあるEC2インスタンスであるVPNサーバに対して「vpn.aws-infra.local」というホスト名でDNS登録します。
- ※運用を考慮してDNSの登録はCloudFormationではなく手動で登録します。
3. 構成図
以下のような感じとなります。R53のところをCloudFormatinoスタックで構築します。
4. CloudFormation Template
作成したテンプレートファイルです。
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
HostedZoneName:
Type: String
Default: aws-infra.local
HostedZoneVPCId:
Type: AWS::EC2::VPC::Id
Default: vpc-07d3da6a1a6080cae
Resources:
MyPrivateHostedZone:
Type: AWS::Route53::HostedZone
Properties:
Name: !Ref HostedZoneName
HostedZoneConfig:
Comment: !Ref HostedZoneName
VPCs:
- VPCId: !Ref HostedZoneVPCId
VPCRegion: !Sub "${AWS::Region}"
5. スタックの作成
それでは先ほど作成したコードを使って、リソースを作成していきます。
マネージメントコンソールにログオンしてCloudFormationを開きます。
※前回まで大阪リージョンで構築していましたが、上で紹介している「CloudTrailのログをElasticsearch+Kibanaで可視化する」の際に大阪リージョンが対応していなかったのでオレゴンリージョンで構築しています。
「スタックの作成」→「新しいリソースを使用」を選択します。「テンプレートファイルをアップロード」からコードのファイルを選択してアップします。
スタックの名称やパラメータを入力(デフォルトから変更したい場合には変更してください)してスタックの作成まで進めます。
6. 作成されたリソースの確認
しばらくするとステータスが「CREATE_COMPLETE」となりスタック作成が完了します。
それでは作成されたリソースを確認してみます。
6.1. Route53 PrivateHostedZone
想定した通りに構築できています。
7. 手動でDNSレコード登録の実施
それではレコードを登録します。 固定となる場合にはEIPを取得した方が良さそうですね。
8. 動作確認
それでは名前解決ができることを確認したいと思います。
なお、AWS側のDNSサーバ(Amazon Provided DNS)はVPCのネットワークの2番目がDNSのため「10.1.0.2」になります。
ただし、Amazon Provided DNSはVPC外からの名前の問い合わせについては対応していないため別途対応が必要となります
[root@ip-10-1-10-160 ~]# cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
search us-west-2.compute.internal
options timeout:2 attempts:5
nameserver 10.1.0.2
まずは、vpnのEC2インスタンスから確認します。問題なく名前解決ができています。
[root@ip-10-1-10-160 ~]# ping vpn.aws-infra.local
PING vpn.aws-infra.local (10.1.10.160) 56(84) bytes of data.
64 bytes from ip-10-1-10-160.us-west-2.compute.internal (10.1.10.160): icmp_seq=1 ttl=255 time=0.019 ms
64 bytes from ip-10-1-10-160.us-west-2.compute.internal (10.1.10.160): icmp_seq=2 ttl=255 time=0.028 ms
次にVPNに接続した自宅PCからです。VPN側の設定でDNSとして10.1.0.2をpushする構成となってます。
結果として接続に失敗します。先ほどの原因で名前解決ができていないためです。
PS C:\Users\user> ping vpn.aws-infra.local
ping 要求ではホスト vpn.aws-infra.local が見つかりませんでした。ホスト名を確認してもう一度実行してください。
この対応としてはDNSリゾルバーを利用する方法、もしくは内部にDNSサーバを構築してFowarderを設定する方法がありますので次に対応したいと思います。
9. まとめ
想定した通りにRoute53 Private HotedZoneの設定ができました。 ただし、VPN経由ではまだ名前解決ができない状態です。
DNSリゾルバーを利用する方法、もしくは内部にDNSサーバを構築してFowarderを設定する方法がありますので次に対応したいと思います。
AWSを効率的に学習する方法
私が効率的にAWSを学習するために実施した方法は以下の通りです。
①最初に書籍(ハンズオンができる)を購入、座学でAWSの基礎を学習
②AWS資格試験を取得ための学習
※私の場合は①と②を合わせて2か月でソリューションアーキテクトを取得できました。
①AWS基礎学習
最初に購入した書籍は「Amazon Web Services 基礎からのネットワーク&サーバー構築」です。
Amazon Web Services 基礎からのネットワーク&サーバー構築
この本では、AWSの基本サービスを利用したハンズオンを通じて、AWSの基礎を学習することができます。
また、タイトル通りAWSのネットワークやインフラに関しても網羅しているため、もともとインフラ系の技術者ではない人たちにとっても分かりやすい内容だと思います。
とりあえずAWS上にサーバーを設定して開発を行うための準備までするには最良の一冊です。
Amazon Web Services 基礎からのネットワーク&サーバー構築
②AWS資格取得
AWSの基礎をある程度学習することができたら、次はAWS資格を取得しましょう。まずはAWSソリューションアーキテクトを目指しましょう。
資格勉強のための問題集をひたすら解きながら、AWSの知識を積み重ねて習得していきましょう!
苦行ではありますが、この問題集を3周ほどすればAWS用語や構成に関しても習得できているはずです。
今回は以上となります。
コメント