gsp328 – Introduction to Serverless: Cloud Run Development Challenge Lab の謎

Google Cloud Platform の学習サイト qwiklabs.com で以下ページの学習を進めたけど対応不足を感じるのでメモ。

Introduction to Serverless: Cloud Run Development Challenge Lab

点にはなっているけれど、肝心の本番サイトを表示しても請求情報の一覧が表示されないから何かがおかしい気がしている。データを投入していないのだ。がっつりこの課題をクリアするには、前のコースにあったデータを投入するところもやらないといけないかな?

# ID 指定

PROJECT_ID=qwiklabs-gcp-00-073de6cc5e50

# 下準備

gcloud config set project \
$(gcloud projects list –format=’value(PROJECT_ID)’ \
–filter=’qwiklabs-gcp’)
gcloud config set run/region us-central1
gcloud config set run/platform managed
git clone https://github.com/rosera/pet-theory.git && cd pet-theory/lab07

# task 1

cd unit-api-billing/
gcloud builds submit –tag gcr.io/$PROJECT_ID/billing-staging-api:0.1
gcloud run deploy public-billing-service –image gcr.io/$PROJECT_ID/billing-staging-api:0.1 –allow-unauthenticated

# task 2

cd ../staging-frontend-billing
gcloud builds submit –tag gcr.io/$PROJECT_ID/frontend-staging:0.1
gcloud run deploy frontend-staging-service –image gcr.io/$PROJECT_ID/frontend-staging:0.1 –allow-unauthenticated

# task 3

構築省略

# task 4

BILLING_SERVICE=private-billing-service
BILLING_URL=$(gcloud run services describe $BILLING_SERVICE \
–platform managed \
–region us-central1 \
–format “value(status.url)”)
curl -X get -H “Authorization: Bearer $(gcloud auth print-identity-token)” $BILLING_URL

# task 4

gcloud iam service-accounts create billing-service-sa –display-name “Billing Service Cloud Run”

# task 5

構築省略

PROD_BILLING_SERVICE=private-billing-service
PROD_BILLING_URL=$(gcloud run services \
describe $PROD_BILLING_SERVICE \
–platform managed \
–region us-central1 \
–format “value(status.url)”)
curl -X get -H “Authorization: Bearer \
$(gcloud auth print-identity-token)” \
$PROD_BILLING_URL

# task 6

gcloud iam service-accounts create frontend-service-sa –display-name “Billing Service Cloud Run Invoker”
gcloud beta run services add-iam-policy-binding private-billing-service –member=serviceAccount:frontend-service-sa@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com –role=roles/run.invoker –region us-central1

# task 7

構築省略

グラフデータベースの選定

グラフデータベースは頂点間の関連性をデータ構造として保持し実用的な時間内にグラフとしてレポートするタイプのデータベース。

使い倒す前にどういうデータベースがあるのか調べた。

グラフデータベース一覧

製品名アクセス方法無償
Open
商用可
RDF
構造
操作言語
AllegroGraphWEBNONOYESProlog
/SPARQL
Amazon NeptuneWEB/GremlinNONOYESTinkerPop
/Gremlin/SPARQL
AnzoGraph DBWEBYES
NOYESYESCypher
/SPARQL
ArangoDBWEBYESYESYES未記載AQL
/JavaScript
DataStax Enterprise GraphWEB
(DataStax Studio)
NONO未記載Gremlin
/Tinkerpop
DgraphWEBYESYESYESYESDQL
/GraphQL
Grakn CoregRPCYESYESYES未記載Graql
InfiniteGraph未確認NONO未記載未確認
JanusGraphGremlinYESYESYES未記載Gremlin
LEMONライブラリYESYESYES未記載
MarkLogic未確認NONOYES未確認
Microsoft SQL Server 2017未確認未確認NO未確認Transact-SQL ?
Nebula GraphWEB
Nebula Graph Studio利用
YESYESYES未記載nGQL
Neo4jWEBYES
NO未記載Cypher
NetworkXWEBYESYESYES未記載Python
OpenLink VirtuosoWEBYES
両版有
YES
両版有
YES
両版有
YESSPARQL
/XQuery
/XPath 1.0のみ/XSLT 1.0のみ 
Oracle RDF Graph; part of Oracle Database未確認未確認未確認未確認YES未確認
Oracle Property Graph; part of Oracle Database未確認未確認未確認未確認未確認未確認
OrientDBWEB/AppYESYESYES未記載Gremlin
/TinkerPop
RedisGraph未確認YESYESYES未記載Cypher
SAP HANA未確認未確認NO未記載Cypher
Sones GraphDB未確認未確認未確認未確認未確認未確認
Sparksee未確認YES
NO未確認未確認
Sqrrl Enterprise未確認未確認未確認未確認未確認未確認
Teradata Aster未確認未確認未確認未確認未確認未確認
TerminusDBWEBYESYESYESYESWOQL
TigerGraphWEB
GraphStudio UI
NONO未記載GSQL
Trinity Graph Engine未確認未確認未確認未確認未確認未確認
list of graph databases

幅が狭すぎてエクセル資料の情報を結構削ってしまったが、何か一つグラフデータベースを使って学んでみるという段階で重要なのは有償か無償か、次にオープンソースか否か、更に商用利用可能かどうかというところだと思う。

次に必要なのは実装方法か。Javaで出来ているか否かはまあまあ重要で、もともとサーバー上でJavaを使っているなら「しめしめJVMに間借り出来るぞ」という気持ちになるだろうし、使っていなければ「無暗にミドルウェア増やさなきゃいけないしメモリが無駄になるではないか」という気持ちにもなるだろう。

  • Grakn Core, JanusGraph, Neo4j, OrientDB, Sqrrl Enterprise はJava実装
  • Sqrrl Enterpriseは破産により開発終了
  • Trinity Graph Engine はMicrosoft Graph Engineが承継?

HAや細かい認証機能、ドキュメント・RDFのストアに対応しているかなどの考慮は後回し。

操作言語

言語概要利用言語例
AQLArangoDBでドキュメント・グラフに用いるSQL風クエリ言語ArangoDB
CypherアドホックやSQL風なプログラミングの処理を実現する宣言型グラフクエリ言語 
DQLDgraph Query Language. GraphQLのDgraph拡張機能への対応Dgraph
GraphQLオープンソースのAPI向けデータクエリ&処理言語。ISOなのでSQLのグラフデータベース版の立ち位置。GQLとも。Dgraph
GraqlGrakn’s declarative reasoning (through OLTP) and analytics (through OLAP) query languageの略。Grakn Core
GremlinApache TnkerPopのオープンソースプロジェクトの一部である、グラフプログラミング言語 
nGQLnebula Graph Database 独自のSQL風処理言語nebula graph database
SPARQLRDF向けのクエリ言語。RDFフォーマットデータの処理に利用する 
GSQLSQL風のGraph Query Language。TigerGraph
WOQLWeb Object Query Languageの略。WOQLは強力で洗練されたクエリ言語であり、任意のデータ構造で複雑なパターンを簡潔に表現できる。コアとなる基本的概念が簡素なため表現力豊かで使いやすいTerminusDB
list of languages

もう一つ重要な要素が操作言語である。グラフデータベースはそれぞれデータ構造・実装昨日が異なるためか、データ操作用の言語が乱立している印象がある。

その中でも汎用性が高そうなのはCypher、GraphQL、Gremlin, SPARQL。以下のような棲み分けになるのだろう。

  • GraphQLはISO標準のSQL風クエリ
  • Cypherは先駆者Neo4j作のため利用が多いSQL風クエリ
  • Gremlinはプログラミング時の標準コマンド
  • SPARQLはRDF処理の標準クエリ

選定結果

Java なし派だからDgraph, Nebula Graph, TerminusDBが良いと思った。しかしまだ最後まで絞り切れていないのだ。

試しにDgraphを使ってみようと思っている。

2020年8月のMovable Typeインストールの流れ

Movable Type を前回使ったのは10年程前だろうか。久しぶりに試したヴァージョン7は凄くいい感じ。

特に大きく躓かず導入出来たのは○、編集しやすくなっていたのは◎。

昔はPHPで動的に生成した方が楽だと思っていたけれど、最近は違うものの見方もするようになった。

ビジネス用途ではリスク回避は非常に重要な観点になる。静的に生成して同期させるだけの方が低負荷&シンプル構成で安定性高く運用出来る⇒サーバー台数を節約出来るってメリットがある。

導入しやすさ・対応ミドルウェアは正直なところWORDPRESSと比較すると勝てない気がしている。nginx + Perl-FPM環境を作って利用してみたいと思ったけれど、1日かけて実現できなかったから諦めることにした。

2020年8月時点で正常に行えたインストールの流れを載せておく。

テスト用サーバー導入環境

CentOS 7 (Minimal) on Windows 10

以下ソフトウェアで実現する

  • apache
  • perl (CGI)
  • MariaDB

テスト用サーバー導入手順

# SELinux 無効化

vi /etc/selinux/config
#SELINUX=enforcing
#↓
#SELINUX=disabled

# httpd + perl

yum upgrade -y
yum install -y httpd httpd-devel
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm yum-utils
yum-config-manager --enable remi-php74
yum install -y php perl gcc \
    libxml2-dev \
    libssl-dev \
    libexpat1-dev \
    cpan \
    make \
    perl-HTML-Parser \
    perl-Digest-MD5 \
    perl-DBD-MySQL \
    perl-IO-Socket-SSL \
    perl-Net-SSLeay.x86_64 \
    perl-XML-LibXML.x86_64 \
    ImageMagick-perl.x86_64 \
    perl-Crypt-SSLeay
curl -L http://cpanmin.us | perl - App::cpanminus
cpanm CGI Image::Size CGI::Cookie LWP::UserAgent parent HTML::Entities \
    Archive::Tar \
    Archive::Zip \
    Cache::Memcached \
    Mozilla::CA \
    XML::Parser \
    XML::SAX::Expat \
    XML::SAX::ExpatXS \
    YAML::Syck
chown -R apache:apache /var/www/html/
chown -R apache:apache /var/www/cgi-bin/
chmod -R 755 /var/www/cgi-bin/
# CGI有効化
vi /etc/httpd/conf/httpd.conf
# cgi-bin ディレクトリディレクティヴ を修正
#    AllowOverride None
#    Options None
#    Require all granted
#↓
#    AllowOverride None
#    Options ExecCGI
#    Require all granted

systemctl start httpd
systemctl enable httpd
firewall-cmd --permanent --zone public --add-service http
firewall-cmd --reload

# mariadb

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
yum install -y MariaDB-server
vi /etc/my.cnf.d/server.cnf
#[mariadb] に以下を追加
#character-set-server=utf8mb4

systemctl enable mariadb
systemctl start mariadb

# DBユーザー作成
mysql -uroot
CREATE DATABASE mt;
CREATE USER mt@localhost IDENTIFIED BY 'test';
GRANT ALL PRIVILEGES ON mt.* TO mt@'localhost';
FLUSH PRIVILEGES;

# Movable Type 配置

yum install -y unzip
mkdir /var/www/source
# ここで source 内に MT7-R4608.zip をアップロード
cd /var/www/source
unzip MT7-R4608.zip
mv MT7-R4608/mt-static/* /var/www/html/
mv MT7-R4608 /var/www/cgi-bin/mt
chown -R apache.apache /var/www/cgi-bin/mt
chmod -R 755 /var/www/cgi-bin/mt
chmod -R 777 /var/www/html/support/

# IPアドレス確認
ip addr show

# 環境情報確認
# 以下URLにアクセスしインストール可能を確認する
# http://<IP_ADDRESS>/cgi-bin/mt/mt-check.cgi

# インストール
# 以下URLにアクセスし必要情報を入力⇒インストール
# http://<IP_ADDRESS>/cgi-bin/mt/mt-wizard.cgi
# スタティックウェブパス:/
# スタティックファイルパス:/var/www/html/
# データベース名:test
# ユーザー名:mt
# ~中略~(適宜入力)
# アカウントの作成
# ユーザー名:admin
# パスワード:testtest

# 動作確認
# 以降以下URLにアクセスすればよい
# http://<IP_ADDRESS>/cgi-bin/mt/mt.cgi