Google Cloud DNS API を Python で実装します。
最近私は、Google Cloud DNS をよく使っています。
GUI で操作できてとても便利ですが、Python から操作できればもっと便利になると思い、実装して見ました。
Contents
実装イメージ
バージョン
- CentOS 7.5.1804
- Python 3.6.4
- Google API Python Library 1.7.4
- Django 2.1.1
インストール
Google Cloud DNS API の Python 環境を構築していきます。
Python
$ sudo yum install https://centos7.iuscommunity.org/ius-release.rpm $ sudo yum install python36u python36u-libs python36u-devel python36u-pip
まず Python 3 系をインストールします。
私の環境は、CentOS 7 ですので、外部リポジトリ IUS を使用しています。
以前の記事でも書きましたが、CentOS 7 で Python 3 系を利用するもう一つの方法に、SCL があると思います。SCL は RedHat のオフィシャルなので、本当は、そちらを利用したいところですが、パスが複雑になってしまうのと、PyCharm でうまく利用できなかったので、IUS リポジトリを使っています。
Google API Python Library
$ sudo pip install --upgrade google-api-python-client
次に、Python から Google Cloud を操作するためのライブラリ、Google API Python Library をインストールします。
Django
$ sudo pip install --upgrade django
最後に、Django をインストールします。
Google Cloud DNS の実装で、Django は必須では無いですが、Web GUI があった方がいいと思い用意しました。
Google Cloud Platform
実装に入る前に、Google Cloud Platform で、API 接続用のアカウントを作成し、JSON ファイルをダウンロードしておきます。
認証情報
API とサービス > 認証情報と進み、
DNS 管理者権限を持ったアカウント作成します。
実装
それでは、実装に入ります。
startproject, startapp
$ django-admin startproject gcp_dns $ cd gcp_dns/ $ python3.6 manage.py startapp app
まず、Django のコマンドで、プロジェクトとアプリケーションの雛形を作成します。
settings.py
... ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ ... 'app.apps.AppConfig', ] ...
settings.py です。外部からアクセスできるように、ALLOWED_HOSTS に ‘*’ を設定し、INSTALLED_APPS に生成したアプリケーションを追加します。
ここでの Google Cloud についての実装はないです。
views.py
from os.path import dirname, join from django.shortcuts import render from googleapiclient.discovery import build from googleapiclient.errors import HttpError from google.oauth2.service_account import Credentials def index(request): service = gcp_dns_initialize() project = 'gcp-dns-216203' body = { 'name': 'leben-mobil', 'dnsName': 'leben.mobi.', 'description': '', } req = service.managedZones().create(project=project, body=body) try: response = req.execute() except HttpError as e: response = e return render(request, 'app/index.html', {'response': response}) def gcp_dns_initialize(): keyfile_json = join(dirrname(__file__), 'YourKeyFile.json') credentials = Credentials.from_service_account_file(keyfile_json) return build('dns', 'v1', credentials=credentials)
views.py です。詳細は、こちらのリファレンスを参考にしてください。
流れとしては、先ほど、ダウンロードした JSON ファイルを使って、Google Cloud と認証し(gcp_dns_initialize)、API を叩く感じです。
project は、プロジェクト名では無く、プロジェクト ID を指定しますので、気をつけてください。
urls.py
from django.urls import path from app.views import index urlpatterns = [ path('', index), ]
index.html
<html> <head> <title>Google Cloud DNS API を Python で実装する</title> </head> <body> <h1>Google Cloud DNS API を Python で実装する</h1> {{ response }} </body> </html>
動作確認
実装が完了しましたので、動作確認していきます。
runserver
$ python3.6 manage.py runserver 0.0.0.0:8000
Django デバッグサーバの runserver を起動し、ブラウザから http://IPアドレス:8000 にアクセスします。
初回アクセスでゾーンを作成し、2回目以降アクセスは Already exists になることが確認できると思います。
まとめ
Google Cloud DNS API を Python で実装しました。
少数のドメインであれば、必要ありませんが、大量のドメインを管理する場合は、大変便利です。
実装はそんなに難しくないので、Google Cloud DNS を使っている方は是非一度試して頂きたいです。