より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

Cloud FunctionsへのアクセスをVPCネットワークで制御する

Cloud FunctionsへのアクセスをVPCネットワークで制御することを行ってみることにしました。

今回行うのは外部からのアクセスは禁止として、内部のCompute Engineからのアクセスを可能にするというシナリオで構成してみました。

Compute Engine

AppEngineは静的IPが持たせられないため、Compute Engineからであれば制限可能なようです。

cloud.google.com

Compute Engineは以下の記事を参照に構築します。

cloud.google.com

ただ、うまく、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の設定です

f:id:rimever:20200913183345p:plain
Cloud Functionsの設定

VPCはまずVPCネットワークを作成しておき、サーバレスVPCアクセスを作成し、これをCloud Functionsに割り当てることになります。

f:id:rimever:20200913183507p:plain
作成したVPC

あとは適当な関数を作成します。

動作確認

f:id:rimever:20200913183256p:plain
GCEでは

f:id:rimever:20200913183415p:plain
直接URLアクセスすると