AWS ChatbotでSlackからRoute 53のリソースレコードを作成する

AWS ChatbotでSlackからRoute 53のリソースレコードを作成する様子とエイリアス周りのハマりポイントをご紹介します。
2023.02.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。 DNSドメインのサブドメインを社内検証用途で払い出すために、SlackからAWS Chatbotを利用する様子をご紹介します。

AWS ChatbotとSlackの構成はこちら

設定手順自体は以下のブログ記事が詳しいので、本記事では省きます。

今回の主題は、設定したあとにChatbotに話しかける内容についてです。

エイリアスの利用

AWS ChatbotはAWS CLIのラッパーとして、Slack上で@aws [awsコマンドの引数]というシンプルなメンションでAWS CLI相当の操作を実行できます。 コマンドの一字一句をメッセージで打ち込む代わりにコマンドラインのテンプレートを設定するエイリアス機能があり、以下の形式で登録します。

@aws alias create [エイリアス名] [awsコマンドの引数]

テンプレートということで、awsコマンドの引数には$変数名の形式で変数参照を仕込むことができ、以下の形式で実行時に指定します。

  • プレイスホルダーなし: @aws run [エイリアス名] [引数1]...
  • プレイスホルダーあり: @aws run [エイリアス名] --[変数名] [引数1] ...

Route 53リソースレコードの登録の例として、今回は以下のエイリアスを設定してみました。

実際は一行で入力

@aws alias create regist-subdomain route53 change-resource-record-sets
--region ap-northeast-1
--hosted-zone-id XXXXXXXXXXXX 
--change-batch {"Changes":[{"Action":"CREATE","ResourceRecordSet":{"Name":"$name","Type":"NS","TTL":300,"ResourceRecords":[{"Value":"$ns_a"},{"Value":"$ns_b"},{"Value":"$ns_c"},{"Value":"$ns_d"}]}}]}

今回登録するのはサブドメインの委任レコードなので、NSレコードで値を4つ持つ(委任先もRoute 53想定)のが前提です。 このエイリアスを以下のように実行します。

@aws run regist-subdomain "takipone.example.com." "aa.aws.com." "bb.aws.com." "cc.aws.com." "dd.aws.com."

これだけ書くとシンプルなのですが、実際には試行錯誤がたくさんありました。つらかったのはSlackの自動フォーマット変換です。今回の使い方だとメッセージにドメイン名をたくさん含めるのですが、そのまま入力するとSlackがURLと認識し、自動で先頭に`http://`を付与してきます。これではRoute 53のレコード値として不正になってしまいます。そこで、URLへの自動変換を避けるポイントとしてエラーと格闘しながら以下の3つを編み出しました。

  1. ダブルクオートで囲む
  2. 末尾にドットを付ける
  3. ハイパーリンクを削除する

これら全てを施す必要があります。1と2は前述のコマンド例に含まれている通りです。3つ目は、以下のようにSlackの画面上でひとつずつ消していく感じです。面倒です。

全てのハイパーリンクを削除してメッセージを送信すると...

awsボットが実行するコマンドラインの中身を復唱し、実行する/しないのボタンを表示するので[[Run] command]を押下して操作を実行します。

AWS CLIと同様のレスポンスが帰ってきてリソースレコード追加が実行されます。管理コンソールを見てみると...

リソースレコードができていますね!ちなみに先ほどの回避策ができていないと

こうなっちゃうわけです。あと、今回諦めてしまったのですが、ゾーン名をテンプレートに含めるべくリソースレコードのNameを

"Name":"$name.example.com"

という形でドメイン名の一部の変数参照を試してみたのですが、Chatbotのパーサが変数名展開で.(ドット)を上手く扱えないようでエラーになり使えませんでした。バックスラッシュでドットをエスケープするなどいろいろ試してみたのですが、望んだ通りに動かすことはできませんでした。コマンドでの特殊記号の一覧や使えない記号などのリファレンスがあると助かるので、誰か知っていたら教えてください!

補足: 適切な権限設定

AWS Chatbotに付与するIAMロールは、適切な権限設定が重要です。少し前にRoute 53リソースレコードセットレベルの権限設定ができるようになっているので、用途に応じて特定ドメインのみやCREATE、UPSERTのみなど権限を絞って利用しましょう。具体的な設定方法は以下の記事が詳しいです。

まとめ

AWS ChatbotでSlackからRoute 53のリソースレコードを作成する様子とハマりポイントをご紹介しました。AWS Chatbotはいろいろ使いでのある仕組みだと思うので、皆さんの活用例もぜひブログなどで教えてください。

参考URL