🛰 はじめに
本記事では、Oracle Cloud Infrastructure(OCI)上に Teslamate API Proxy を構築した内容をまとめます。 目的は、Tesla API へのアクセスをクラウド側に逃がし、Raspberry Piクラスタの負荷を軽減することです。

また、OCIはリージョン選択や課金検知の設定が非常に重要ですので、 大阪リージョン推奨の理由 や 東京リージョンで1円でも課金が発生したら即通知する設定方法 についても解説します。
🧭 1. OCIインスタンス構築(大阪リージョン推奨)

■ なぜ大阪リージョンを使うのか
2026年現在、OCIの 東京リージョンはA1.Flexが慢性的に枯渇 しています。 Free Tierのままではほぼ作成できません。
一方、大阪リージョンは比較的空きがあり、 Always FreeのA1.Flexが作成しやすい 状況です。
そのため、これからOCIを使う方は 大阪リージョンをホームリージョンにすることを推奨します。
■ インスタンス作成手順
- OCIコンソールにログイン
- 左メニュー →「コンピュート」→「インスタンス」
- 「インスタンスの作成」をクリック
- 以下の設定を選択
- イメージ:Ubuntu 24.04 Minimal
- シェイプ:A1.Flex(1 OCPU / 6GB RAM)
- ネットワーク:VCNは自動作成でOK
- SSHキー:公開鍵を登録
- 作成を実行
Minimalイメージは非常に軽量で、API Proxy用途に最適です。
⚠ 2. 東京リージョン利用者向け:課金に関する注意点
■ 100ドルオーソリについて
Payアカウントへアップグレードした際、 OCIはクレジットカードの有効性確認のために 100ドルのオーソリ(仮押さえ) を行う場合があります。
これは実際の請求ではなく、 カード会社側の「利用可能枠チェック」です。
数日後に自動的に消えるため、 実際の請求は発生しません。
■ 1円でも課金が発生したら即通知する設定
こちらが総帥が求めていた “1円課金検知” の仕組みです。
OCIでは Budget(予算) を使うことで、 1円でも課金が発生した瞬間にメール通知を受け取ることができます。
設定手順
- OCIコンソール →「Billing」
- 「Cost Management & Budget」
- 「Budget」を作成
- 名前:
AlwaysFree-Alert - 金額:1 JPY
- 名前:
- 「Alert Rule」を追加
- 種類:Actual Spend(実際の支出)
- 条件:>= 1 JPY
- 通知先:メールアドレス
- 保存
これで、 誤操作で有料リソースを作成してしまった場合でも、1円発生した瞬間に通知が届きます。
Always Free運用では必須の安全装置です。
🔐 3. TailScaleの導入(ゼロトラスト接続)
OCIインスタンスを秘密基地ネットワークに参加させるため、TailScaleを導入します。
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
認証すると、 100.x.x.x のTailnet IP が付与されます。
これにより、 パブリックIP不要のゼロトラスト構成 が完成します。
🌐 4. Caddyの導入(クラウド側の入口)
Caddyは、API Proxyの入口となるWebサーバーです。 Let’s Encrypt自動更新やreverse_proxyが簡単に使えるため、非常に扱いやすいです。
インストール
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy
Minimalなのでnanoを追加します。
sudo apt install -y nano
⚙ 5. Teslamate API Proxyの構築(Node.js)
Node.js導入
sudo apt install -y nodejs npm
プロジェクト作成
sudo mkdir -p /opt/tesla-proxy
sudo chown ubuntu:ubuntu /opt/tesla-proxy
cd /opt/tesla-proxy
npm init -y
npm install express node-fetch
server.js作成
import express from 'express';
import fetch from 'node-fetch';
const app = express();
app.use(express.json());
app.post('/tesla', async (req, res) => {
const { endpoint, token, body } = req.body;
try {
const response = await fetch(`https://owner-api.teslamotors.com/${endpoint}`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
});
const data = await response.json();
res.json(data);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
app.listen(3000, () => {
console.log('Tesla API Proxy running on port 3000');
});
systemdサービス化
sudo nano /etc/systemd/system/tesla-proxy.service
[Unit]
Description=Tesla API Proxy
After=network.target
[Service]
ExecStart=/usr/bin/node /opt/tesla-proxy/server.js
Restart=always
User=ubuntu
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
起動:
sudo systemctl daemon-reload
sudo systemctl enable tesla-proxy
sudo systemctl start tesla-proxy
🚪 6. CaddyとAPI Proxyの連携
sudo nano /etc/caddy/Caddyfile
内容:
:80 {
reverse_proxy 127.0.0.1:3000
log {
output file /var/log/caddy/access.log
format json
}
}
ログディレクトリ作成:
sudo mkdir -p /var/log/caddy
sudo chown caddy:caddy /var/log/caddy
反映:
sudo systemctl reload caddy
🎯 まとめ:OCI側の構成はここで完成です

今回の構成により、
- Tesla APIの外部通信をクラスタLANから排除
- Piクラスタの負荷軽減
- TailScaleによるゼロトラスト構成
- Caddyによる安全な入口
- Always Freeでの無料運用
- 1円課金検知による安全なクラウド運用
これらすべてが達成できました。
次回は、Piクラスタ側のTeslamate設定変更編 をまとめます。



コメント