Route 53サブドメインホストゾーンを作成したら、元のホストゾーンにNSレコードを作成する自動化
ハンズオン環境でRoute 53のホストゾーンを触ってほしい際に、サブドメインを設定する場合があります。
複数アカウントでセットアップを自動化したかったので、構築しました。
目次
動作
元のドメインがexample.comだとします。
サブドメインの123はアカウントIDを想定しています。
- アカウントBでRoute 53に123.example.comホストゾーンが作成される
- EventBridgeがイベントを検知してLambda関数を実行
- Lambda関数がアカウントAのDynamoDBテーブルにレコードを追加
- DynamoDBストリームがアカウントAのLambda関数をトリガー
- アカウントAのLambda関数がexample.comのホストゾーンにNSレコード123.example.comを作成
これで、アカウントBのRoute 53で、www.123.example.comなどを作成して、レコードセット設定のハンズオンができます。
GitHub
CloudFormationテンプレートはGitHubにあります。
Lambdaのコードもテンプレートにインラインにしています。
https://github.com/yamamanx/route53-creatensrecord
EventBridgeのルール
CloudFormationで自動作成しているので、ホストゾーンを限定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "detail-type": ["AWS API Call via CloudTrail"], "source": ["aws.route53"], "detail": { "responseElements": { "hostedZone": { "name": ["123.example.com."] } }, "eventSource": ["route53.amazonaws.com"], "eventName": ["CreateHostedZone", "DeleteHostedZone"] } } |
ターゲットはLambda関数です。
Lambda関数では、クロスアカウントのDynamoDBテーブルにPutItemするので、boto3で指定しているテーブル名はARNにしています。
CreateHostedZoneの際はoperation=”create”、DeleteHostedZoneの際はoperation=”delete”でPutItemのみ許可されるようにしています。
Lambda関数はCloudFormationテンプレートにあります。
DynamoDBのリソースベースポリシー
昨年DynamoDBにリソースベースのポリシーが追加されましたので、それを利用しています。
ハンズオン用のアカウントBは元のドメインを管理しているアカウントAとは同じOrganizations組織にあります。
そこで次のようなポリシーにしました。
PutItemのみを組織内のアカウントで許可されたプリンシパルから受け付けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "dynamodb:PutItem", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:PrincipalOrgID": "o-12345678" } } } ] } |
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
AWS Transfer Family EFS向けのSFTP対応サーバー
EFSファイルシステムは作成済です。 AWS Transfer Family S …
-
-
AWS CodeBuildのチュートリアルをやってみました
こちらユーザーガイドの最初の方にあるチュートリアルです。 コンソールを使用した …
-
-
AWS 認定クラウドプラクティショナーのサンプル問題
AWS認定クラウドプラクティショナのサンプル問題2018年9月25日現在で、英語 …
-
-
Projectタグを強制するSCPでアクションやリソースを限定しないとき成り立つのか
ふと疑問に思ったので試しました。 予想は、拒否されてしまう、です。 [crayo …
-
-
AWS Client VPNの接続ログを確認しました
AWS Client VPNを設定しましたで証明書とかせっかく作ったので、いろい …
-
-
AWS Service CatalogポートフォリオをOrganizations組織で共有する
AWS Service Catalogチュートリアルで作成したポートフォリオのO …
-
-
RDS + VPC + Lambda + API Gateway + CloudFront + WAF + ACMでAPIを構築する
RDSのMySQLの情報を与えられたリクエストをキーにしてjsonで返すAPIを …
-
-
API Gateway 作成済REST APIの定義をSwaggerの形式でエクスポート
SAMで似たようなAPIを作りたくて、エクスポートしました。 Swaggerは、 …
-
-
AWS Systems Manager Session Managerでログを有効にする
AWS Systems Manager Session Managerでのコマン …
-
-
TwilioからのリクエストをAPI Gateway+LambdaでTwimlを返して処理する
Twilioで着信した時のリクエスト先としてTwimlをWebサーバやS3で用意 …