.NETのAWSのSDK経由でRoute53にレコードを追加する方法を解説します。
使用言語はC#です。
AWSの管理コンソールにアクセスして“手作業”でやっても問題ないのかもしれませんが、
- EC2インスタンスをたちあげて
- EBSボリュームを起動して
- それらをアタッチして
- Route53にサブドメインを割り立てる
というアプリケーションを作って、簡単に「オンデマンドASPサービス」の展開をしたいと思う人はいるのではないでしょうか?
EC2やEBSについてはそれなりにサンプルが見つかったのですが、Route53についてはほとんど見つからないようです。
では、早速始めましょう。
1.アクセスキーを確認する。
AWSの管理コンソールにログインします。
「Account > Security Credentials」に移動します。
「アクセスキーID」= &&&&&&&&&&&&&&&&&&&&&&&
「シークレットアクセスキー」= ??????????????????????????????
をメモしておきます。
2.Hosted Zoneを作成する。
AWSの管理コンソールで、Route53サービスに移動します。
「Create Hosted Zone」をクリックし、お手元のドメインを登録します。
(ドメインの取得方法、Name Serverの登録方法などは、今回の記事の範疇外とします。)
「Domain Name」= ********.***
「Hosted Zone ID」= ##################
をメモしておきます。
3.(コードを書き始めます)SDKをimportします。
using Amazon; using Amazon.Route53; using Amazon.Route53.Model;
SDKの入手やインストールは、AWSのサイトで確認してください。
4.接続情報等は、別にして設定しておいた方が楽です。
public static class CConstant { public static string AWSAccessKey = "&&&&&&&&&&&&&&&&&&&&&&&"; public static string AWSSecretKey = "??????????????????????????????"; public static string HostedZoneId = "##################"; public static string Domain = "********.***"; public static long TTL = (TTL値:負荷を考える必要があるが、可能な範囲で低い値にしておく); public static string Identifier = "(なんでもOK)"; }
5.本体
public class LibAWSRoute { public void ChangeDNSRecordSet(string subdomain, string ip) { AmazonRoute53 dns = AWSClientFactory.CreateAmazonRoute53Client(CConstant.AWSAccessKey, CConstant.AWSSecretKey); // Change条件 ResourceRecord resourceRecord = new ResourceRecord(); resourceRecord.Value = ip; ResourceRecordSet recordSet = new ResourceRecordSet(); recordSet.Name = subdomain + "." + CConstant.Domain; recordSet.SetIdentifier = CConstant.Identifier; recordSet.Type = "A"; recordSet.TTL = CConstant.TTL; recordSet.Weight = 10; recordSet.ResourceRecords = new List() { resourceRecord }; Change change = new Change(); change.Action = "CREATE"; change.ResourceRecordSet = recordSet; ChangeBatch changeBatch = new ChangeBatch(); changeBatch.Comment = "add my instance"; changeBatch.Changes = new List () { change }; ChangeResourceRecordSetsRequest request = new ChangeResourceRecordSetsRequest(); request.ChangeBatch = changeBatch; request.HostedZoneId = CConstant.HostedZoneId; // Change実行 ChangeResourceRecordSetsResponse response = dns.ChangeResourceRecordSets(request); return; } }
6.補足
Referenceを見ると(recordSetは上記コード内の変数)
recordSet.Region = ほにゃらら
のように何かを指定しなければならないような気になりますが、そもそもHosted ZoneにRegionを指定していないので、これは書きません。
書くと、“そのRegion内の情報”を探しに行くので、
「Regionを指定するな」というエラーメッセージではなく、
「Regionエレメント内に不正な設定がある」というエラーメッセージが戻ってきます。
Invalid XML ; cvc-complex-type.2.4.a: Invalid content was found starting with element 'Region'. One of '{"https://route53.amazonaws.com/doc/2012-02-29/":AliasTarget, "https://route53.amazonaws.com/doc/2012-02-29/":TTL}' is expected.
ハマりポイントでした。
ちなみに、「https://route53.amazonaws.com/doc/2012-02-29/」は、現在存在していませんので、何の参考にもなりません。
ついでに、
recordSet.AliasTarget = ほにゃらら
も書きません。
なお、「レコードの削除」は
change.Action = "DELETE";
でできます。
ロゴスウェア
最新記事 by ロゴスウェア (全て見る)
- Amazon Linux(EC2)と PHPSTORM で Xdebug を行う - 2018年9月26日
- やらないことの合意 - 2018年6月27日
- 卒園アルバムとプロジェクトマネジメント - 2018年3月30日
Comments are closed.