GCP一覧

Google Cloud DNS API を Python で実装する

Google Cloud DNS API を Python で実装します。

最近私は、Google Cloud DNS をよく使っています。

GUI で操作できてとても便利ですが、Python から操作できればもっと便利になると思い、実装して見ました。

実装イメージ

バージョン

  • 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 を使っている方は是非一度試して頂きたいです。