プロバイダー
tegata v0.3.1 の文書
このリポジトリにあるプロバイダーです。それぞれ tegata-provider-<name> という別の実行ファイルで、tegata init で入れる(source)か、PATH に置きます(command)。どのプロバイダーの項目にもあるキーは設定に、組み込みの random、manual、value は設定にあります。
種類ごとに:
- managed の種類は、
applyとrotateで作り、pruneで消します。data の種類は、applyのたびに読むだけです。 - 出力は、
stores.<store>の下の各項目のoutputに書くものです(リソースを見てください)。例では、すべてをmainという保存先に置き、appというアイデンティティが読みます。 - すぐに置き換わるは、新しい値を作ると前の値が使えなくなるということで、tegata はその前に聞きます(設定を見てください)。
| プロバイダー | 種類 | 区分 | すぐに置き換わる | 作るもの | prune がすること |
|---|---|---|---|---|---|
cloudflare |
api_token |
managed | いいえ | アカウントの API トークン(R2 の S3 の鍵にもなる) | 古いトークンを消す |
cloudflare |
tunnel_token |
managed | はい | 今ある Tunnel の新しいシークレット | 何も消さない。入れ替えの前に起動したコネクターがつながっている間は断る |
tailscale |
auth_key |
managed | いいえ | tailnet の参加の鍵 | 古い鍵を消す |
aws |
ses_smtp_credentials |
managed | いいえ | IAM のアクセスキーと、そこから作る SES の SMTP のパスワード | 古いアクセスキーを消す |
gcp |
sql_user |
managed | はい | Cloud SQL の組み込みのユーザーのパスワード | 何も消さない |
terraform |
outputs |
data | Terraform の出力から読んだ値 |
cloudflare
Section titled “cloudflare”providers: cloudflare: source: github.com/k-kawa/tegata version: "^0.3" config: account_id: 0123456789abcdef0123456789abcdef credentials: api_token: { env: TEGATA_CLOUDFLARE_TOKEN, optional: true }| プロバイダーのキー | 説明 |
|---|---|
config.account_id |
Cloudflare のアカウント |
credentials.api_token |
アカウントの API トークンを作れる API トークン(tunnel_token では、Cloudflare Tunnel を編集できることも)。なくてもよい:なければ、Cloudflare の cf コマンドのログインを、その設定のファイルから読んで使う(macOS では ~/Library/Preferences/cloudflare/config/default.json、ほかでは $XDG_CONFIG_HOME/cloudflare/config/default.json か ~/.config/cloudflare/config/default.json)。そのログインが 2 分以内に切れるときは、cf auth whoami を流して cf に更新させる |
api_token(managed)
Section titled “api_token(managed)”アカウントの API トークンを作ります(アカウントが持つので、作った人がいなくなっても使えます)。
resources: releases_read: provider: cloudflare type: api_token config: name: releases read policies: - permissions: [Workers R2 Storage Bucket Item Read] r2_buckets: [releases] - permissions: ["DNS Write|DNS Edit"] zones: [example.com] stores: main: - { output: id, name: RELEASES_ACCESS_KEY_ID, readers: [app] } - { output: r2_secret_access_key, name: RELEASES_SECRET_ACCESS_KEY, readers: [app] }| 設定 | 説明 |
|---|---|
name |
トークンの名前。作った時刻が足される(releases read (2026-10-18 09:30 UTC))ので、入れ替えの間も新旧のトークンを見分けられる |
policies |
ポリシーの一覧。それぞれに permissions(管理画面に出る権限のグループの名前。"A|B" は、名前が変わったグループのために A、次に B を試す)と、account: true(アカウント全体)、r2_buckets(バケットの名前)、zones(ゾーンの名前)の少なくとも 1 つを書く |
| 出力 | 説明 |
|---|---|
id |
トークンの ID。R2 の S3 API のアクセスキーの ID でもある |
value |
トークン |
r2_secret_access_key |
トークンの SHA-256。R2 の S3 API のシークレットアクセスキーになる |
prune は古いトークンを消します(もうないトークンは、消したものとみなします)。
tunnel_token(managed、すぐに置き換わる)
Section titled “tunnel_token(managed、すぐに置き換わる)”今ある、リモートで管理する Cloudflare Tunnel のシークレットを入れ替え、そのトークン(cloudflared がつなぐのに使うもの)を返します。Tunnel そのものは、Terraform などのほかの方法で作ってください。
resources: tunnel: provider: cloudflare type: tunnel_token config: { tunnel: web } stores: main: - { name: TUNNEL_TOKEN, readers: [app] }| 設定 | 説明 |
|---|---|
tunnel |
Tunnel の名前(消していない Tunnel のうち、ちょうど 1 つがこの名前であること) |
| 出力 | 説明 |
|---|---|
value |
Tunnel のトークン |
Tunnel のシークレットは 1 つだけです。入れ替えたあとも、すでにつながっている cloudflared はつながったままですが、古いトークンでの新しい接続は失敗します。prune は Cloudflare の上で何も消しません。代わりに、入れ替えの前に起動したコネクターがまだつながっていないかを確かめ、新しいトークンで再起動するまでは(コネクターと、どこからつないでいるかを挙げて)断ります。
tailscale
Section titled “tailscale”providers: tailscale: source: github.com/k-kawa/tegata version: "^0.3" credentials: client_id: { env: TEGATA_TAILSCALE_CLIENT_ID } client_secret: { env: TEGATA_TAILSCALE_CLIENT_SECRET }| プロバイダーのキー | 説明 |
|---|---|
credentials.client_id、credentials.client_secret |
参加の鍵を書けて、鍵に付けるタグを持つ Tailscale の OAuth クライアント |
auth_key(managed)
Section titled “auth_key(managed)”tailnet に機器を足すための参加の鍵を作ります。
resources: join_key: provider: tailscale type: auth_key config: tags: [tag:server] reusable: true stores: main: - { output: key, name: TAILSCALE_AUTH_KEY, readers: [app] }| 設定 | 説明 |
|---|---|
tags |
必ず書く:OAuth クライアントが作る鍵にはタグが要る |
reusable |
既定は false |
ephemeral |
既定は false |
preauthorized |
既定は true |
expiry_seconds |
既定は 604800(7 日) |
description |
既定はリソースの名前 |
| 出力 | 説明 |
|---|---|
key |
参加の鍵 |
prune は古い鍵を消します(使い切った鍵と、期限の切れた鍵は、消したものとみなします)。
providers: aws: source: github.com/k-kawa/tegata version: "^0.3"プロバイダーは、AWS の SDK や CLI と同じやり方で AWS の認証情報を探します。環境変数、~/.aws/credentials と ~/.aws/config、aws sso login のセッションなどです。aws コマンドそのものは要りません。credentials の項目は使いません。
ses_smtp_credentials(managed)
Section titled “ses_smtp_credentials(managed)”IAM ユーザーのアクセスキーを作り、そこから Amazon SES の SMTP のパスワードを作ります(SES の作り方)。IAM ユーザーは自分で作り、SES でメールを送る権限だけを付けてください。
resources: smtp: provider: aws type: ses_smtp_credentials config: { user: ses-sender, region: us-west-2 } stores: main: - { output: username, name: SMTP_USERNAME, readers: [app] } - { output: password, name: SMTP_PASSWORD, readers: [app] }| 設定 | 説明 |
|---|---|
user |
IAM ユーザー |
region |
パスワードを使う SES のリージョン。既定は us-west-2 |
profile |
使う AWS のプロファイル。なくてもよい |
| 出力 | 説明 |
|---|---|
username |
アクセスキーの ID(SMTP のユーザー名) |
password |
SMTP のパスワード。アクセスキーのシークレットそのものは返さない |
prune は古いアクセスキーを消します。IAM ユーザーが持てるアクセスキーは 2 つまでなので、入れ替えるたびに、次の入れ替えの前に prune してください。
providers: gcp: source: github.com/k-kawa/tegata version: "^0.3" config: { project: my-project }認証情報:TEGATA_GCP_ACCESS_TOKEN があればそれを、なければ gcloud auth print-access-token を使います。
| プロバイダーのキー | 説明 |
|---|---|
config.project |
Cloud SQL のインスタンスのある Google Cloud のプロジェクト |
sql_user(managed、すぐに置き換わる)
Section titled “sql_user(managed、すぐに置き換わる)”Cloud SQL の組み込みのユーザーに、ランダムなパスワードを付けます。ユーザーがなければ作ります。
resources: db_password: provider: gcp type: sql_user config: { instance: main, user: app } stores: main: - { output: password, name: DATABASE_PASSWORD, readers: [app] }| 設定 | 説明 |
|---|---|
instance |
Cloud SQL のインスタンス |
user |
ユーザー。組み込みのユーザーであること(IAM のユーザーではない) |
bytes |
パスワードのランダムなバイト数(16 進で書く)。既定は 24 |
| 出力 | 説明 |
|---|---|
password |
パスワード |
user |
ユーザーの名前 |
ユーザーのパスワードは 1 つだけです。開いている接続は残り、古いパスワードでの新しい接続は失敗します。prune は何も消しません(古いパスワードはもう使えなくなっていて、ユーザーはデータを持っているので消しません)。
terraform
Section titled “terraform”providers: terraform: source: github.com/k-kawa/tegata version: "^0.3"outputs(data)
Section titled “outputs(data)”Terraform の設定の出力を 1 つ読みます:terraform -chdir=<dir> output -json <output>。state を読むだけで、plan も apply もしません。ディレクトリは初期化してあり(terraform init)、その state を読めることが要ります。TEGATA_TERRAFORM で terraform の実行ファイルを決めます(既定は PATH の terraform)。
resources: infra: provider: terraform type: outputs config: { dir: ../terraform, output: app_settings } stores: main: - { output: bucket, name: BUCKET_NAME, readers: [app] } - { output: db_host, name: DATABASE_HOST, readers: [app] }| 設定 | 説明 |
|---|---|
dir |
Terraform のディレクトリ。YAML のファイルからの相対 |
output |
値が map である出力の名前。その中の文字列、数、真偽値が出力になる。ほかの値はエラー |
出力は、その map のキーです。