0
0

More than 1 year has passed since last update.

RouteTableにprefixlistを登録する方法① boto3編

Posted at

初めに

基本的にCloudFormationを使用してIaCを管理しているのですが、
なんと、、、
CloudFormationでは、PrefixlistをRouteTableに登録することができないとのこと。
参考:AWS::EC2::Route support for DestinationPrefixListId

CloudFormationでPrefixlistの作成はできるのに、RouteTableに登録できないなんて、、、と思っていても仕方ないので、
(実装時期も未定らしい。)
代案方法をまとめたいと思います。

今回は、boto3になります。

ちなみに、下記ツールならRouteTableにPrefixlistを登録することはできそうです。

  • AWS CLI
  • SDK
  • boto3
  • Terraform

boto3とは?

参考:ChatGPT
boto3は、PythonでAWSを操作するためのライブラリで、AWSのAPIにアクセスするためのクライアントライブラリです。AWSサービスの構成やデプロイの自動化に役立ち、PythonプログラムでAWSを簡単に操作できます。Python 2.6.5以上およびPython 3.3以上のバージョンで利用可能であり、AWSの多くのサービスに対応しています。クラウドインフラストラクチャの管理やデプロイに役立ちます。

構築環境

Python:3.11.0

実現したいこと

やりたいことは、単純です。
RouteTableのルートに、送信先をPrefixlist/ターゲットをインターネットゲートウェイとして登録するだけ。
aws cliでやるなら下記コマンドでになります。

aws ec2 create-route --destination-prefix-list-id [PrefixList_ID] --route-table-id [RouteTale_ID] --gateway-id [InternetGateway_ID]

やった内容

今回は、PrefixlistをRouteTableに登録するスクリプトファイルまでを記事にしたいと思います。

1. スクリプトファイルの作成

下記Pythonスクリプトファイルを作成します。

create_root.py
import boto3
client = boto3.client('ec2')

#各リソースのIDを記載
route_table_ids = ['rtb-056bfae20d21bac59', 'rtb-01d817248694ab7da']
destination_prefix_list_ids = ['pl-059875efe9b3ae7d2', 'pl-0cb544a048d31ec21']
gateway_id = 'igw-057f3d1e36a77648c'

#ループ処理で各RouteTableにPrefixlistを追加
for rtb_id in route_table_ids:
    for pl_id in destination_prefix_list_ids:
        try:
            response = client.create_route(
                DestinationPrefixListId=pl_id,
                RouteTableId=rtb_id,
                GatewayId=gateway_id
            )
            print(f"Route created for {rtb_id} and {pl_id}: Success")
        except Exception as e:
            print(f"Error creating route for {rtb_id} and {pl_id}: {e}")

2.コマンド実行

スクリプトファイルを実行します。Successの返答が来ていたら問題ないです。

$ python create_root.py
Route created for rtb-056bfae20d21bac59 and pl-059875efe9b3ae7d2: Success
Route created for rtb-056bfae20d21bac59 and pl-0cb544a048d31ec21: Success
Route created for rtb-01d817248694ab7da and pl-059875efe9b3ae7d2: Success
Route created for rtb-01d817248694ab7da and pl-0cb544a048d31ec21: Success

マネジメントコンソール上からも確認し、無事登録できてることがわかりました。
RouteTable_02.png

ちなみにエラーだと下記のようになります。
*故意にPrefixlist_IDを誤記

$ python create_root.py
Error creating route for rtb-01d817248694ab7da and pl-0cb544a048d31ec2d: An error occurred (InvalidPrefixListID.NotFound) when calling the CreateRoute operation: The prefix-list ID 'pl-0cb544a048d31ec2d' does not exist

エラー時の処理も問題ないことが確認できました。

まとめ

実際は、上記スクリプトファイルをLamda関数とかで作成し、Cloud Formationから呼び出してあげるのがIaCの手段の一つになってくると思いますが
それは、またの機会に。

いずれにせよ、CloudFormationでPrefixlistをRouteTableに登録できるようにしていただければ一番楽なので
アップデートを楽しみにしたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0