Cloud FunctionsへのアクセスをVPCネットワークで制御することを行ってみることにしました。
今回行うのは外部からのアクセスは禁止として、内部のCompute Engineからのアクセスを可能にするというシナリオで構成してみました。
Compute Engine
AppEngineは静的IPが持たせられないため、Compute Engineからであれば制限可能なようです。
Compute Engineは以下の記事を参照に構築します。
ただ、うまく、git cloneが動かないので
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples
cd nodejs-docs-samples/appengine/hello-world/flexible
npm install
npm install axios
const express = require('express'); const axios = require('axios'); const app = express(); app.get('/', (req, res) => { //res.status(200).send('Hello, world!').end(); var url = "https://us-central1-trial-rimever0911.cloudfunctions.net/function-2" // "https://api.github.com" axios.get(url).then(function(response) { console.log(response.data); res.status(200).send(response.data).end(); }); }); // Start the server const PORT = process.env.PORT || 8080; app.listen(PORT, () => { console.log(`App listening on port ${PORT}`); console.log('Press Ctrl+C to quit.'); }); module.exports = app;
npm start
とします。
8080ポートもファイアウォールでallowとしておきました。http://IPアドレス:8080でGCEのnodejsアプリにアクセスします。
gcloud compute firewall-rules create default-allow-http-8080 \ --allow tcp:8080 \ --source-ranges 0.0.0.0/0 \ --target-tags http-server \ --description "Allow port 8080 access to http-server"
Cloud Functions
次はCloud Functionsの設定です
VPCはまずVPCネットワークを作成しておき、サーバレスVPCアクセスを作成し、これをCloud Functionsに割り当てることになります。
あとは適当な関数を作成します。