kt-tech.blog

画像
技術

【AWS】Lamdaを用いて、Route53にAレコードを登録する

Share

概要

今回は、「Lamdaを用いて、Route53にAレコードを登録する」というテーマで記事を書いてみました。

1. 対象者

  • Lamdaを使用したことがある方

  • Route53を使用したことがある方。

  • Lamdaを用いてRoute53にAレコードを登録したい方

📌
本記事について
📌
下記のように取得してあるドメインにAレコードを登録していきます。
📌
用途としては、IPアドレスを固定にできない時などです。

2. 動作環境

AWS Consoleに入れれば問題ないです。

3. 前提条件

Route53でドメインを取得してあること。

4. 導入手順

Lamdaを作成する

あまり経験がない方は公式リファレンス等参照いただけると良いと思います。

📌
注意点
📌
index.mjs->index.jsに変更しておいて下さい

Roleについて

LamdaにアタッチするRoleにはAmazonRoute53FullAccessのポリシーを付与しておいて下さい。付与されていないとAレコードを作成する権限がなく、エラーになります。

Lamdaの処理

const { Route53Client, ChangeResourceRecordSetsCommand } = require("@aws-sdk/client-route-53"); 

exports.handler = async function (event, context) {
    // Route53への接続
    const route53 = new Route53Client();

    // 変更を行うドメイン名とhostedzone IDを入力
    const hostedZoneId = '********';
    const recordName = 'example.com';
    
    // IPアドレスを取得
    const newIpAddress = event.body.address;

    //レコード名を作成('.'->'\u2019へ正規化した上で結合)
    const newRecordName=newIpAddress.replace(/\./g, '-')+'.'+recordName

    // Aレコードの変更リクエストを作成
    const changeBatch = {
        Changes: [
            {
                Action: 'UPSERT',
                ResourceRecordSet: {
                    Name: newRecordName,
                    Type: 'A',
                    TTL: 300,
                    ResourceRecords: [
                        { Value: newIpAddress }
                    ]
                }
            }
        ]
    };
    
    // レコードの変更を実行
    try {
        const command = new ChangeResourceRecordSetsCommand({
            HostedZoneId: hostedZoneId,
            ChangeBatch: changeBatch
        });

        const response = await route53.send(command);

        console.log(response);
        
        return {
            statusCode: 200,
            body: JSON.stringify(response)
        };
    } catch (error) {
        console.error(error);
        
        return {
            statusCode: 500,
            body: JSON.stringify(error.message)
        };
    }
};

testを実行する。

今回は、送られてきたIPアドレスの.->-に変換した文字列を、ドメインの頭につける形でAレコードを登録します。

  • 下記のjsonでテストを行います。
{
  "body": {
    "address": "127.0.0.1"
  }
}

実行結果の確認

Route53で自分が選択したホストゾーン(exaple.com)Aレコードが登録されていたらOKです。

5. 参考文献

6. おわりに

今回の記事では、 LamdaでRoute53にAレコードを登録 してみたい時に、Lamdaにどんな処理を書けばいいのか記述をしました。

今回の内容を応用すれば、IPアドレスの変更等を検知した場合や、EC2の起動を検知した場合などに、Aレコードを新しく登録もしくは更新するなどもできると思います。