🌟
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