Skip to content

AWS

Takos を AWS にホストする方法。このページは takos オペレーター向け。ECS / Fargate 上で Takos runtime の互換 backend を動かす。

アプリ開発者へ

このページは takos オペレーター向けです。public spec は Cloudflare-native のままで、AWS では Takos runtime が provider-backed resource と Takos-managed runtime を組み合わせて同じ takos apply surface を解決します。

リソースマッピング

app.yml のリソース宣言が AWS サービスに自動マッピングされる:

app.ymlAWS サービスアダプタ
d1PostgreSQL (RDS)PostgreSQL adapter
r2S3s3-object-store
kvDynamoDBdynamo-kv-store
queueSQSsqs-queue
vectorizePostgreSQL + pgvectorpgvector-store
analyticsEngineTakos analytics runtimeanalytics-engine-binding
workflowTakos workflow runtimeworkflow-binding
durableObjectTakos durable runtimepersistent-durable-objects
secretRefSecrets Manageraws-secrets-manager
workersECS Task (Node.js)Node.js platform adapter
servicesECS / FargateOCI deployment provider (ecs)

必要なもの

  • AWS アカウント
  • IAM ユーザーまたはロール(後述の権限設定を参照)
  • takos-cli がインストール済み
  • PostgreSQL 16+(RDS 推奨)

セットアップ

1. 必要な IAM 権限

Takos のデプロイ・運用に必要な IAM ポリシー:

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:CreateBucket",
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:ListBucket",
        "s3:HeadObject"
      ],
      "Resource": "arn:aws:s3:::takos-*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:CreateTable",
        "dynamodb:PutItem",
        "dynamodb:GetItem",
        "dynamodb:DeleteItem",
        "dynamodb:Scan",
        "dynamodb:DescribeTable"
      ],
      "Resource": "arn:aws:dynamodb:*:*:table/takos-*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "sqs:CreateQueue",
        "sqs:SendMessage",
        "sqs:SendMessageBatch",
        "sqs:ReceiveMessage",
        "sqs:DeleteMessage",
        "sqs:GetQueueAttributes"
      ],
      "Resource": "arn:aws:sqs:*:*:takos-*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:CreateSecret",
        "secretsmanager:PutSecretValue",
        "secretsmanager:GetSecretValue",
        "secretsmanager:DeleteSecret"
      ],
      "Resource": "arn:aws:secretsmanager:*:*:secret:takos-*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ecs:CreateService",
        "ecs:UpdateService",
        "ecs:DeleteService",
        "ecs:DescribeServices",
        "ecs:RegisterTaskDefinition",
        "ecs:DeregisterTaskDefinition",
        "ecs:RunTask",
        "ecs:StopTask",
        "ecs:DescribeTasks"
      ],
      "Resource": "*"
    }
  ]
}

最小権限の原則

上の例は開発用。本番では Resource を特定の ARN に絞ること。

2. 環境変数

bash
# AWS 認証
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_REGION="ap-northeast-1"

# PostgreSQL (RDS)
export DATABASE_URL="postgresql://takos:password@your-rds-endpoint:5432/takos"

# S3
export S3_ENDPOINT=""  # AWS の場合は空でOK(SDK がリージョンから自動解決)
export S3_REGION="ap-northeast-1"
export S3_ACCESS_KEY_ID="your-access-key"
export S3_SECRET_ACCESS_KEY="your-secret-key"

# DynamoDB
export DYNAMO_REGION="ap-northeast-1"
export DYNAMO_TABLE_NAME="takos-kv"

# SQS(platform background queues)
export AWS_SQS_RUN_QUEUE_URL="https://sqs.ap-northeast-1.amazonaws.com/123456789/takos-runs"

# tenant queue / secret resources
# queue は provider_resource_name を SQS queue 名として作成・解決する
# secretRef は provider_resource_name を Secrets Manager secret 名として作成・解決する

# pgvector(セマンティック検索を使う場合)
export PGVECTOR_ENABLED="true"
export POSTGRES_URL="${DATABASE_URL}"

3. インフラの準備

RDS (PostgreSQL)

bash
aws rds create-db-instance \
  --db-instance-identifier takos-db \
  --engine postgres \
  --engine-version 16 \
  --db-instance-class db.t4g.medium \
  --allocated-storage 20 \
  --master-username takos \
  --master-user-password "your-password" \
  --db-name takos

pgvector を使う場合は RDS に pgvector 拡張を有効化:

sql
CREATE EXTENSION IF NOT EXISTS vector;

S3 バケット

bash
aws s3 mb s3://takos-worker-bundles --region ap-northeast-1
aws s3 mb s3://takos-tenant-builds --region ap-northeast-1
aws s3 mb s3://takos-tenant-source --region ap-northeast-1
aws s3 mb s3://takos-git-objects --region ap-northeast-1

DynamoDB テーブル

bash
aws dynamodb create-table \
  --table-name takos-kv \
  --attribute-definitions AttributeName=key,AttributeType=S \
  --key-schema AttributeName=key,KeyType=HASH \
  --billing-mode PAY_PER_REQUEST \
  --region ap-northeast-1

SQS キュー(platform background queues)

bash
aws sqs create-queue --queue-name takos-runs --region ap-northeast-1
aws sqs create-queue --queue-name takos-index-jobs --region ap-northeast-1
aws sqs create-queue --queue-name takos-workflow-jobs --region ap-northeast-1
aws sqs create-queue --queue-name takos-deployment-jobs --region ap-northeast-1

takos のデプロイ

takos 自体を AWS にデプロイするには、Terraform / CDK でインフラを構築してから takos を起動する:

bash
# Terraform / CDK でインフラを構築した後
# ECS タスク定義で takos の Docker イメージを指定して起動する

アプリ開発者がアプリをデプロイするときは、環境を問わず同じコマンド:

bash
takos apply --env production

Cloudflare backend との差分

Cloudflare backend の機能AWS backend での実現
Durable ObjectsTakos durable runtime
Analytics EngineTakos analytics runtime
Dispatch Namespaceruntime-host dispatch path
CF ContainersECS Task / Fargate
Browser Renderingbrowser-service コンテナ(ECS Task)

次に読むページ