🚀【第1部】OCIでTeslamate API Proxyを構築

it-tech

🛰 はじめに

本記事では、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を使う方は 大阪リージョンをホームリージョンにすることを推奨します

■ インスタンス作成手順

  1. OCIコンソールにログイン
  2. 左メニュー →「コンピュート」→「インスタンス」
  3. 「インスタンスの作成」をクリック
  4. 以下の設定を選択
    • イメージ:Ubuntu 24.04 Minimal
    • シェイプ:A1.Flex(1 OCPU / 6GB RAM)
    • ネットワーク:VCNは自動作成でOK
    • SSHキー:公開鍵を登録
  5. 作成を実行

Minimalイメージは非常に軽量で、API Proxy用途に最適です。

⚠ 2. 東京リージョン利用者向け:課金に関する注意点

■ 100ドルオーソリについて

Payアカウントへアップグレードした際、 OCIはクレジットカードの有効性確認のために 100ドルのオーソリ(仮押さえ) を行う場合があります。

これは実際の請求ではなく、 カード会社側の「利用可能枠チェック」です。

数日後に自動的に消えるため、 実際の請求は発生しません。

■ 1円でも課金が発生したら即通知する設定

こちらが総帥が求めていた “1円課金検知” の仕組みです。

OCIでは Budget(予算) を使うことで、 1円でも課金が発生した瞬間にメール通知を受け取ることができます。

設定手順

  1. OCIコンソール →「Billing」
  2. 「Cost Management & Budget」
  3. 「Budget」を作成
    • 名前:AlwaysFree-Alert
    • 金額:1 JPY
  4. 「Alert Rule」を追加
    • 種類:Actual Spend(実際の支出)
    • 条件:>= 1 JPY
    • 通知先:メールアドレス
  5. 保存

これで、 誤操作で有料リソースを作成してしまった場合でも、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設定変更編 をまとめます。

コメント

タイトルとURLをコピーしました