🌟
Cloud Functions サーバーレスでアプリケーションを実行するまとめ
概要
Cloud FunctionsをGCP学習の一環で触ってみたので機能をまとめてみる

Cloud Functionsとは
- サーバーレス(サーバーの管理がいらない)
- 負荷に応じた自動スケーリング
- 利用した分だけ料金が発生する(従量課金制)
サーバー管理なしでコードを実行するためのスケーラブルな従量課金制 Functions as a Service(FaaS)。
Cloud Functionsの作成
- トリガーURLにリクエストが渡された契機で
Cloud Functionsが発火します

- 今回はデフォルトのスクリプトをそのまま作成します
トリガーURLにアクセスするとスクリプトの結果が表示されます


スクリプトを更新してみる

index.js
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.helloWorld = (req, res) => {
let message = req.query.message || req.body.message || 'Hello GCP!';
res.status(200).send(message);
};
package.json
{
"name": "sample-http",
"version": "0.0.2"
}
- 更新後トリガーにアクセスすると出力が更新されています
Cloud SQLからデータを取得する
パブリックIPを許可する
- プロキシ経由で
Cloud SQLにアクセスできるようにする

プライベートIPアドレスが追加される
- 表示された接続名で
Cloud Functionsからアクセスする
Cloud Functionsのスクリプトを更新する
index.js
const mysql = require('mysql');
const connectionName = '接続名';
const dbUser = 'ユーザ名';
const dbPassword = 'パスワード';
const dbName = 'DB名';
exports.demo = (req, res) => {
const connection = mysql.createConnection({
socketPath: "/cloudsql/" + connectionName,
user: dbUser,
password: dbPassword,
database: dbName
});
connection.connect();
connection.query('SELECT * FROM users', (err, results) => {
if (err) {
console.error(err);
res.status(500).send(err);
} else {
res.send(JSON.stringify(results));
}
});
connection.end();
};
package.json
{
"name": "sample-http",
"version": "0.0.3",
"dependencies": {
"mysql": "latest"
}
}
Cloud SQLに保存したデータが表示される

Cloud SQLにデータを登録する
Cloud Functionsを新たに作成する

index.js
const mysql = require('mysql');
const connectionName = '接続名';
const dbUser = 'ユーザ名';
const dbPassword = 'パスワード';
const dbName = 'DB名';
exports.create = (req, res) => {
const connection = mysql.createConnection({
socketPath: "/cloudsql/" + connectionName,
user: dbUser,
password: dbPassword,
database: dbName
});
connection.connect();
if (!req.query['name']) {
res.send('none');
return;
}
const addName = "'" + req.query['name'] + "'";
connection.query('INSERT INTO users (name) VALUES(' + addName + ')', (err, results) => {
if (err) {
console.error(err);
res.status(500).send(err);
} else {
res.send(JSON.stringify(results));
}
});
connection.end();
};
package.json
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"mysql": "latest"
}
}
作成したトリガーにリクエストを投げる

-
トリガー?name=demoでアクセスすることでINSERT処理が実行される

-
先ほど作成した
DBからデータを取得するトリガーにアクセスすると登録したデータが表示できる

まとめ
今回はCloud Functionsの構築〜Cloud SQLとの連携までまとめました
いいねしていただけると記事執筆の励みになりますので、参考になったと思った方は是非よろしくお願いします!
Discussion