Changelog¶
全ての重要な変更はこのファイルに記録されます。
書き方はKeep a Changelogに基づきます。
バージョンはSemantic Versioningに従います。
0.34.0 - 2026-09-07¶
Changed¶
- 破壊的変更: SQS の DLQ アラート宣言 (
sqs.dead_letter_alert) を必須に しました (KN1110)。sqs = {}を持つ既存のpocket.tomlは設定ロード時に エラーになります。通知するならsqs = { dead_letter_alert = { email = "ops@example.com" } }、意図的に 監視しないならsqs = { dead_letter_alert = { enabled = false } }を 宣言してください。email 宣言時は handler ごとに SNS topic + email 購読 + DLQ の CloudWatch アラーム (ApproximateNumberOfMessagesVisible >= 1、 復旧の OK 通知つき) を生成します。SNS の email 購読は宛先が確認メールを 踏むまで通知が届かないため、未確認のあいだは deploy の最後とpocket statusに警告を出します。背景: pocket は queue / DLQ を自動生成する 一方で「DLQ に溜まったこと」を知らせる手段が無く、example-tidb で DLQ に 1,072 通が 11 日間気づかれず滞留する実害がありました。deploy ロールにはsns:*/cloudwatch:*が追加で必要です (docs/permissions/aws.md)
0.33.0 - 2026-09-07¶
Changed¶
get_databases()の持続接続 (CONN_MAX_AGE+CONN_HEALTH_CHECKS) を TiDB 限定から pocket 管理の全 DB (TiDB / Neon / RDS) に広げました (KN1351)。 接続確立コスト (TLS handshake 含む) は Lambda + TLS 必須 DB に共通のためです。 既定値は「無期限 (None)」から「300 秒」に変更しています (接続の生存期間を 有界にする保険。TiDB も同様)。get_databases(conn_max_age=...)で調整でき、None= 無期限 /0= 従来の毎リクエスト接続。psycopg の pool (OPTIONS["pool"]) を使う場合はconn_max_age=0を渡してください (Django が併用をImproperlyConfiguredで弾きます)。ローカル開発 (stage 解決なし) の DB には適用しません
0.32.1 - 2026-09-07¶
Fixed¶
use_vpc = falseの container が[rds]のある stage で CreateStack の validation ("Unresolved resource dependencies [LambdaSecurityGroup]") に 落ちていたのを修正しました (KN1352)。VPC 外 Lambda は RDS SG への ingress 自体が不要なため、LambdaRDSAccessを出力しません。あわせて、この組合せでは 「container が RDS に到達できない」旨をpocket settings等の設定読込時に 警告します (DB を使わない container なら無視して構いません)- django 未導入の環境で
pocketCLI 全体がModuleNotFoundError: djangoの traceback で起動不能になっていたのを修正しました (KN1281)。0.32.0 のdjango-storagesextra 化で django が transitive に入らなくなったことで 顕在化していました。django 非依存のサブコマンド (pocket deploy/pocket settings等) は django 無しで動作し、pocket django ...の実行時のみmagic-pocket[django]の install 手順を 1 行で案内して終了します。 extra なしのmagic-pocketでpocket djangoを使っていた project は install 行をmagic-pocket[django]に変更してください
0.32.0 - 2026-08-27¶
Changed¶
- 破壊的:
django-storagesを必須依存から[django]extra へ移しました。django-storagesはdjangoを必須依存に持つため、extra 無しのmagic-pocketを入れるだけで Django 一式が入ってしまい、SQS worker 等の 非 Django container の image を細くできませんでした。magic-pocket[django]を使っている Django プロジェクトは無影響です。 extra 無しで S3 storage を使っていた場合はmagic-pocket[django]に 切り替えてください - build context の other-read チェックの警告を強化しました (deploy は通るのに Lambda が INIT で必ず死ぬ状態に気付きにくかったため)。警告にファイル名に加えて mode (600 等) を出し、build ログに埋もれないよう deploy の最後にも再掲します。 さらに management Lambda の INIT 失敗エラーには、build 時に検出済みのファイルが あればそれを列挙して原因の切り分けを短縮します
Fixed¶
- SSO 失効や未認証の状態で CLI を実行すると botocore の traceback (約 100 行)
がそのまま流れていたのを、原因 1 行 + 認証手順の案内 + 非ゼロ exit に
変換しました。
pocket deployの事前チェックだけでなく全サブコマンドが対象です (pocket resource dsql endpoint等)。あわせて botocore.tokens が出すSSO token refresh attempt failedの WARNING traceback も抑制しています
Added¶
get_databases()が DATABASE_URL のクエリパラメータ (?ATOMIC_REQUESTS=True等) を検出したとき、パラメータ名を挙げて警告するようにしました。 django-environ のenv.db()と違い解釈されないため、黙って捨てると 「URL に書いてあるのに効いていない」形で顕在化していました。 docs にも解釈されないことを明記していますpocket django deploy/pocket django promoteに--skip-migrateを追加しました。migrateを確認ごと省きます。migrateは Lambda 経由で実際に DB へ接続するため DB が停止・制限中だと失敗しますが、-yは「聞かれたことに全部 yes」の意味なので 非対話実行ではmigrateを外す手段がありませんでした (pocket deployへ切替えるとcollectstaticも行われなくなる)
0.31.2 - 2026-08-20¶
Fixed¶
- managed 宣言が空の secret store view を runtime が読みに行き、Lambda が INIT で
AccessDeniedException(ssm:GetParametersByPath) を出して全 handler が 落ちる問題を修正しました。0.29.0 の multi-container 化以降、shared = trueの 宣言が無くても stored user secret (type =) があれば shared store の view が 生成される ため、「managed 空 + user あり」の view ができます。IAM 側はmanagedが空だと store パス (/{pocket_key}/*) を許可しないのに runtime は 無条件に読んでいたため、条件が食い違っていました。managed が空の view は store を読まないようにしています (全キーが捨てられるだけなので挙動は変わらず、 cold start の store 往復が 1 回減ります)
0.31.1 - 2026-08-20¶
Fixed¶
pocket.runtime.toml生成器が、bare key に使えない文字 (:等) を含むキーを quote せず不正 TOML を吐いていた問題を修正しました。IAM Condition ("kms:ViaService"等) を[container.<name>.iam.inline_policies]に宣言すると deploy は成功するのに、image に焼かれたpocket.runtime.tomlが壊れており その container の全 Lambda が INIT でTOMLDecodeError死していました- 同生成器が inline table 内のネストした dict / list を Python の
repr()で 出力していた問題を修正しました ({'StringLike': {...}}は不正 TOML)。 IAM Statement のConditionがこれに該当します
Changed¶
pocket.runtime.tomlの生成直後に自己検証 (tomllib.loads) を行い、 不正な TOML なら生成時点で fail-loud で停止するようになりました (従来は image に焼かれ、Lambda INIT で初めて落ちていました)[container.<name>.iam]は Lambda execution role を組む provision 専用で runtime は参照しないため、pocket.runtime.tomlに出力しなくなりました
0.31.0 - 2026-08-20¶
Changed¶
- build context の other-read チェックで、runtime が INIT フェーズで読む
pocket.toml/pocket.runtime.tomlに other-read が無い場合は警告でなく エラーで deploy を中断するようになりました (該当 container が確実に INIT 失敗するため。chmod 644で修正、image に COPY しないなら .dockerignore へ)。 その他のファイルは従来どおり警告です (COPY --chmodで image 内を正規化 する構成があるため) - CLI が生成する
pocket.runtime.tomlは umask に依らず other-read 付き (0644) で書き出すようになりました
0.30.0 - 2026-08-19¶
Added¶
- pocket-rs が
enable_origin_verifyに対応しました。 Rust runtime のset_envs()が cloudfront 設定 (enable_origin_verify/waf.allow_rules[].header) から Python と同じ導出で 自動注入 managed secret (POCKET_ORIGIN_VERIFY_SECRET等) を解決し、 container に secrets 宣言が無くても runtime env に載るようになりました。 また featureaxumで Django 版OriginVerifyMiddleware相当の 検証 middleware (origin_verify::origin_verify_middleware) を提供します (secret header の定数時間比較 + 詐称耐性 client IP のClientIpextension 提供。 env secret 未設定時は no-op、不一致は 403)
0.29.0 - 2026-08-19¶
Changed¶
- 破壊的変更:
[awscontainer](単数) を廃止し、[container.<name>]の dict 形式に一般化しました。1 プロジェクトで複数 container (異 runtime の 並行稼働 / strangler 移行) を宣言できます。<name>は英小文字始まりの 英小文字 + 数字 (最大 32 文字、hyphen 不可) です - 破壊的変更: cloudfront routes / scheduler の
handler参照を"<container>.<handler>"のドット記法に変更しました (container が 1 つ でも必須) - 破壊的変更: 物理リソース名に container slot を挿入しました。
既存 stage は次回 deploy で計算リソースが新名称で作り直されます
(データと secrets は保全されます。下記の移行手順を参照):
- Lambda 関数:
{prefix}{handler}→{prefix}{name}-{handler} - ECR repo:
{prefix}lambda→{prefix}{name}-lambda - container stack:
{slug}-container→{slug}-container-{name} - API domain Export:
{slug}-{handler}-api-domain→{slug}-{name}-{handler}-api-domain - SQS queue:
{prefix}{handler}→{prefix}{name}-{handler} - Lambda 実行ロール:
lambda-{slug}-{namespace}→lambda-{slug}-{name}-{namespace} - scheduler ロール:
{prefix}scheduler→{prefix}{name}-scheduler
- Lambda 関数:
- 破壊的変更: managed secret の保存先が container ごとに分かれました。
既定 (
sharedなし) は container store ({stage}-{project}-{name}-{namespace}) に保存され、container ごとに独立した 値になります (SM コンソール上も container 名で識別可能)。複数 container で 値を共有する場合は全宣言にshared = trueを付けます (保存先は従来どおりの{stage}-{project}-{namespace})。sharedなしの同名宣言は container ごとに 独立した値になり、shared と無印の混在も可能です (shared 宣言側だけが共有)。 cloudfront から名前参照される secret (token_secret / basic_auth / signing_key) のみ、値の候補が複数になる同名宣言はエラーになります。 既存 secret の値は移行 deploy 時に 旧パスから container store へ自動コピーされます (再生成しないため Django の session / 署名 cookie は無効化されません)。user secret (stored mode) の 正準パスと dsql endpoint publish 先は project 側のまま不変で、外部 provisioner (pocket.naming) への影響はありません。store/pocket_key_formatは全 container で一致が必要です - 各 Lambda に
POCKET_CONTAINER=<name>を注入し、runtime (Python / Rust) が自分の[container.<name>]を自動選択するようにしました - runtime env: 自 container の handler は従来どおり
POCKET_<HANDLER>_HOST等で参照できます。他 container の handler はPOCKET_<CONTAINER>_<HANDLER>_HOST/_ENDPOINT/_QUEUEURLの修飾名で 参照します - CLI:
pocket resource awscontainer ...をpocket resource container ...にリネームし、container 単位のコマンド (yaml/url/reload-env/status-env/image repo/image uri等) に--container <name>を 追加しました (container が 1 つだけなら省略可)。pocket django build/promoteは全 container を build / retag します pocket.naming.ecr_repo_name()にcontainerキーワード引数が必須に なりました (外部ツール向け公開 API の破壊的変更)- deploy 完了後に旧形式の container stack (
{slug}-container) と旧 ECR repo ({prefix}lambda) を検出し、確認プロンプト付きで自動削除するようにしました (-yで自動承認)。旧 stack の scheduler / SQS event source が動き続ける 事故を防ぐためです - リリース跨ぎの移行処理を migrate フェーズ (
pocket_cli.migrationsの registry) に集約しました。deploy は毎回このフェーズを呼び (冪等・移行済み 環境では実質 no-op)、旧 project 共有パスからの managed secret の引き継ぎと 旧リソースの掃除はここで行われます。pocket migrate container-secretsで deploy 前に引き継ぎだけ先行実行することもできます。将来この移行を registry から外すリリースでは、CHANGELOG に「移行を含む版で一度 deploy (またはpocket migrate) を挟ぶ必要がある」旨を明記します
移行手順 (0.28.x → 0.29.0)¶
pocket.tomlの[awscontainer]系セクションを[container.<name>]へ リネームします (stage override は[<stage>.container.<name>])。 cloudfront routes / scheduler のhandlerをドット記法へ変更しますpocket deploy --stage <stage>(Django ならpocket django deploy) を 実行します。managed secret は旧 project 共有パスから container store へ 自動コピーされ (値は再生成されません)、新名称の container stack が作成され、 CloudFront が新 origin へ切り替わった後、旧 stack / 旧 ECR repo / 旧パスの secret 残骸の削除確認が表示されます- 注意点:
- SQS 付き handler は queue が作り直されるため、queue が空の タイミングで deploy してください (in-flight / DLQ のメッセージは 引き継がれません)
- 運用スクリプトや docs が旧 Lambda 関数名 / log group 名を参照している 場合は追随が必要です
ecr_name明示指定 (build once の stage 間共有) は名前が変わらない ため再ビルド不要です
0.28.2 - 2026-08-17¶
Fixed¶
upload_dirroute の 8MB 超のファイルが、内容不変でも毎 deploy 再アップロードされ、route のpath_pattern全体の invalidation が毎回走る 問題を修正しました。boto3 既定の multipart 閾値 (8MB) を超えると S3 の ETag が multipart 形式になり、差分 skip (素の MD5 比較) が恒久的に効かなく なるためです。アップロード時の multipart 閾値を 128MB に引き上げ、閾値以下は 単一 PUT (= ETag が素の MD5) を保つようにしました。過去に multipart で 上がった既存オブジェクトも、次の deploy で一度上げ直された後は skip が 効くようになります (128MB 超のファイルは引き続き毎回再アップロードされます)pocket permissions listの backup グループに KMS 権限が漏れており、 リスト準拠の deploy role では vault の初回作成 (CreateBackupVault) が 必ず AccessDenied になる問題を修正しました。CreateBackupVaultは既定の AWS managed key (aws/backup) を vault に紐付ける際、呼び出し元に KMS 権限を要求します。backup グループにkms:CreateGrant/kms:Decrypt/kms:DescribeKey/kms:GenerateDataKey/kms:RetireGrantを追加し、 権限不足時の警告文言も backup グループ全体 (backup:*と kms 系) を 案内するよう改めました
0.28.1 - 2026-08-16¶
Fixed¶
- 0.27 以前に
[dsql.backup]を宣言して deploy した stage で、0.28.0 に 上げても旧形式名 ({prefix}dsql-backup) の backup plan が残り、新 plan ({prefix}backup-dsql) と同じ cluster に二重で定期バックアップが走る 問題を修正しました。deploy が旧形式名の plan を検出すると selection → plan の順に自動削除します ([backup]未宣言の stage でも掃除だけ走ります)。 destroy の掃除対象にも旧形式名を含めました。recovery point (バックアップ データ) は削除しません。手動で対処する場合はaws backup list-backup-plansで旧名の plan を特定し、aws backup delete-backup-selection→aws backup delete-backup-planの 順に削除してください
0.28.0 - 2026-08-16¶
Added¶
- トップレベル
[backup]を追加しました。DB 層の定期バックアップ (AWS Backup の backup plan) をエンジン別に[backup.dsql]/[backup.rds]で宣言します (opt-in。未宣言なら AWS Backup を使いません)。1 行の宣言で GFS 階層保持が 既定で有効になります: dsql は daily 35 日 / weekly 365 日 / monthly 1095 日 (長期階層は 90 日で cold storage へ)、rds は weekly / monthly のみ (直近は PITR が秒単位で担うため daily 階層を持ちません)。plan はエンジン別 ({prefix}backup-dsql/-rds) に provision します (AWS Backup の rule は selection 全体に一律適用のため、エンジン差は plan 分割でしか表現できません)。 deploy role に backup 権限が無い場合は deploy を失敗させず警告してスキップ します pocket backup cleanupを追加しました。stage のバックアップデータ (recovery point) を削除する CLI で、誤操作ガードとして[backup]のdeletable = true宣言が必要です。destroy でも同宣言下でのみ[y/N]確認 (既定 No) を経てデータを削除できます (--yesの一括承認では削除 しない)。データが残る destroy では件数を警告表示します
Changed¶
- 破壊的変更:
[dsql.backup]を廃止し、トップレベル[backup.dsql]に 移行しました (旧宣言は pydantic の Extra inputs エラーになります。旧名{prefix}dsql-backupの plan が残っていれば AWS Backup コンソールで削除して ください)。backup 関連の宣言は厳密に検証します:[backup]単体・[backup.neon]等の対象外エンジン・対象資源 ([dsql]/ managed[rds]) の 無い宣言・[backup.rds]へのcold_storage_after_days(Aurora は cold storage 非対応)・[backup.rds.daily]は、すべてエラー停止します [rds.backup]のretention_days(PITR 保持日数) の既定を 7 日から 35 日 (ネイティブ上限) に引き上げました。クラスタ属性のため追加リソースは 無く、Aurora のバックアップストレージはクラスタ容量まで無課金のため、変更の 少ないワークロードでは通常コスト増もありません。既存クラスタは次回 deploy のModifyDBCluster(ApplyImmediately) で収束します。PITR は[backup.rds]の宣言と無関係に常に有効ですpocket resource dsql backupの保持日数の継承元が[backup.dsql]の 最長階層 (monthly) のdelete_after_daysになりました (既定同士なら従来と 同じ 1095 日)- IAM Action を簡素化し、feature group
backup(backup:*+backup-storage:MountCapsule) を新設しました (dsqlgroup から分離)。[dsql]使用時に加え、[backup.rds]宣言時にも必要になります。backup:*にはデータ削除も含まれますが、pocket が削除するのはdeletable = true+ 明示確認の経路のみです。権限レベルで禁止したい場合の Deny 例を docs/permissions/aws.md に記載しました
0.27.0 - 2026-08-13¶
Changed¶
pocket resource dsql backupで--retention-daysを省略したときの保持日数を、[dsql.backup]のdelete_after_days→ 宣言が無ければ 1095 日 (3 年) の順で 解決するようにしました。従来は Lifecycle を渡さず 無期限保持 になっていましたが、 pocket にも deploy role にもバックアップデータの削除権限が無いため、 一度作ると console 作業でしか消せない recovery point が積み上がっていました。 復元前に取られる現用クラスターのバックアップ (利用者が明示的に頼んでいない分) も 同じ解決を通ります。解決結果は実行時に 1 行表示されます。 意図的に無期限にする場合は--retention-days=0を明示してください (警告のうえ Lifecycle なしで実行します)
Documentation¶
- dsql backup の docs に、短サイクル検証向けの設定例
(
cold_storage_after_days = 0で 90 日制約を外す) と、plan 由来の job がListBackupJobsに現れるまで 30 分ほどラグがある旨の注記を追加しました
0.26.0 - 2026-08-12¶
Added¶
- staticfiles 宣言に
linkを追加しました。link = trueを宣言するとpocket django deploy/promote/deploystaticのすべての経路で collectstatic に--linkが付き、ビルド先が全量 symlink になります (大容量資産の複製コスト削減。aws s3 syncは symlink を追うため アップロード互換)。従来のdeploystatic --linkフラグは--link/--no-linkになり、宣言の上書き用に使えます
Changed¶
- link 有効時は、ビルド先 (
pocket_cache/static_build/<stage>/) を collectstatic の前に毎回クリアするようにしました。非 link で作られた 実体ファイルが混在すると collectstatic がモード不一致で全ファイルを 実体コピーし直すこと、ソース削除後に残る壊れた symlink がaws s3 syncを exit 2 で失敗させることを避けるためです。 非 link 時は従来どおりクリアしません
0.25.1 - 2026-08-12¶
Fixed¶
- DSQL バックアップで使う AWS Backup vault (
pocket-backup) の自動作成が、 vault が 1 つも無いアカウントでAccessDeniedExceptionになり失敗する問題を 修正しました。AWS Backup は存在しない vault への Describe に ResourceNotFoundException ではなく AccessDeniedException を返すため、 「describe → 無ければ create」では未作成を判定できませんでした。 CreateBackupVault を先に実行し AlreadyExistsException を握る方式 (create-first) に変更しています。オンデマンドバックアップ・定期バックアップ (backup plan の ensure)・復元の 3 経路すべてに影響していました pocket resource dsql backupの AWS エラー表示に、失敗した API 名を含める ようにしました (例:AccessDeniedException (API: CreateBackupVault): ...)。 従来は AWS の文言だけで、どの呼び出しで落ちたのか分かりませんでした
0.25.0 - 2026-08-11¶
Added¶
pocket deploy/pocket promoteに-y/--yesを追加しました。pocket django deployにしか無く、django を使わない (axum 等の) プロジェクトが 非対話実行できませんでした。確認はpocket_cli.cli.interaction.confirm経由に なり、deploy 配下で確認が増えてもこのフラグで抑止されます
Changed¶
build/upload_dirroute のアップロードを差分のみにしました。S3 上の オブジェクトと内容が一致するファイル (ETag が素の MD5 で、ローカルの MD5 と 一致) は skip します。数千ファイル規模の配信アセットをupload_dirに置いても deploy 時間が伸びません。multipart アップロード済み (ETag が<hash>-<n>) や ETag が MD5 にならないオブジェクト (SSE-KMS 等) は内容を断定できないため常に 再アップロードします (サイズ比較での代替はしません)- CloudFront の invalidation を変更があった route の
path_patternに限定し、 変更が無ければ invalidation 自体を発行しないようにしました。従来は毎 deploy/*固定で、アップロードしていない配信専用 route のキャッシュまで落ちていました
0.24.0 - 2026-08-07¶
Added¶
[cloudfront.<name>.waf]にallow_rulesを追加しました。IPSet / managed rules より先に評価される allow ルールを宣言でき、IP allowlist で閉じた stage でも外形 smoke や uptime チェックの経路を開けられます。path(末尾*で prefix 一致) の素通しと、header(managed secret を 自動生成し、固定ヘッダx-pocket-waf-allowの値一致で allow) の 2 形を サポートし、両方指定で AND になります。WAF を弱める宣言のため、deploy 時に 一覧が表示されます- docs: managed secret が Lambda の設定 env に現れず runtime 注入である旨と、
外部 (CI 等) からは secret store (SSM
/{pocket_key}/<KEY>) を読む必要が ある旨を明記しました [[s3.lifecycle_rules]]にexpiration_days(Expiration.Days) を追加しました。 現行バージョンのオブジェクトを prefix 単位で日数削除できます (trash prefix の 自動削除など)。従来のnoncurrent_version_expiration_daysは optional になり、 少なくとも一方の指定が必要です (両方の同時指定も可)
0.23.1 - 2026-08-04¶
Fixed¶
[dsql]使用時の必要権限にbackup-storage:MountCapsuleが抜けていたのを 修正しました。backup:CreateBackupVaultの実行にはこの権限 (Resource*) が 必須で、pocket permissions listの出力から deploy 用 IAM policy を組んでいる 環境ではpocket-backupvault の初回作成が AccessDenied で失敗していました。 service prefix がbackupではなくbackup-storageである点に注意してください
0.23.0 - 2026-08-04¶
Added¶
[rds.backup] retention_daysを追加しました (1〜35、既定 7 日)。Aurora の 自動バックアップ (PITR) の保持日数で、クラスターのネイティブ属性のため追加 リソース・追加権限は不要です。設定と異なる既存クラスターは次の deploy でModifyDBCluster(ApplyImmediately) により収束します[dsql.backup]を追加しました。宣言すると deploy が AWS Backup の vault / サービスロール / backup plan / selection を冪等に provision します。 DSQL は組み込みの自動バックアップを持たないため、これが唯一の定期バックアップ 手段になります。既定は「毎日 3:00 (UTC) / 35 日後に cold storage へ移動 / 365 日後に削除」で、cron/timezone/cold_storage_after_days/delete_after_daysで変更できます。pocket destroyは plan と selection を 削除しますが、vault と recovery point (バックアップデータ) は削除しませんpocket resource dsql restore/restore-statusを追加しました。recovery point (--latestで最新) から復元し、現用クラスターの切り替え (Name タグの付け替えと SSM の endpoint 更新) まで行います。復元前に現用クラスターのバックアップを取るか 確認します (--skip-backup/--yes)。AWS Backup の復元は常に新しい クラスターを作るため、切り替え後はpocket deployが必要です (Lambda のPOCKET_DSQL_ENDPOINTとdsql:DbConnectAdminの対象 ARN が CloudFormation 管理のため)。旧クラスターは戻り先として残します (明示的に削除するまで課金され 続けます)。どちらもコマンドが警告として案内します[dsql]を設定していて[dsql.backup]の宣言が無い stage の deploy で、 自動バックアップが無いことを警告するようにしました。他の DB backend と 違い黙って通ると「managed DB だから守られている」と誤解されたまま、誤削除・ 論理破壊からの復元手段がゼロの状態で運用されるためです
Changed¶
- RDS の自動バックアップ保持日数の既定が 1 日 (AWS 既定) から 7 日に変わります。
1 日だと「PITR があるからいつでも戻せる」という理解と実態 (24 時間しか遡れない)
が乖離するためです。既存クラスターも次の deploy で 7 日へ収束します (保持期間が
延びる方向のみ)。Aurora のバックアップストレージはクラスター容量までは無課金の
ため、通常は増分コストは生じません。従来の挙動を保つ場合は
[rds.backup] retention_days = 1を明示してください
0.22.0 - 2026-08-03¶
Added¶
pocket resource dsql backup/pocket resource dsql backup-statusを追加 しました。DSQL には組み込みの自動バックアップ (PITR・スナップショット) が無く、 AWS Backup 統合が唯一のバックアップ手段のため、オンデマンドバックアップの開始と job の状態確認を CLI から行えるようにします。両コマンドとも--watchで終端 状態まで待機できます (backupは開始後に確認コマンドの案内も表示)。前提と なる vault (pocket-backup) とサービスロール (forge-pocket-backup-role、 permissions boundary 対応) は初回実行時に冪等に自動作成されます。既存の vault / ロールは--vault/--iam-role-arnで指定でき、--retention-daysで recovery point の保持日数を設定できます。[dsql]使用時の必要権限に backup 系 5 Action が追加されています (docs/permissions/aws.md参照)
Changed¶
- magic-pocket-cli の依存
magic-pocketを同 minor に束縛しました (>=0.22.0,<0.23)。従来は下限のみだったため、cli を version pin している 消費者にも lib 側の破壊的変更がリリース当日に届き deploy が壊れる事象が ありました。0.x では minor が breaking の単位のため、これで「cli の pin = lib の pin」になります
0.21.0 - 2026-08-02¶
Added¶
pocket resource neon store-urlが保存前に、解決した接続先 (stage=... → project=... → branch=... → endpoint=...) を表示するように なりました。意図と異なる branch へ焼いても「保存しました」だけでは気づけない ため、書き込み前に解決済みの情報を見せて pocket.toml の意図と目視照合できる ようにします。この実行で branch を新規作成した場合 (= 空の branch に接続する) は警告を添えます。あわせて公開 API にensure_url_for_context_with_info(解決情報付き版。endpoint host は URL から解析し追加 API call なし) を追加 しました- build context の非可読ファイル (other-read なし、mode 600 等) を build 前に
検出して警告するようにしました (
docker/depotbackend)。Lambda の実行 ユーザーは非 root のため、該当ファイルが image に COPY されると全 handler が INIT フェーズで失敗しサイトごと 500 になります (codebuildbackend は従来 どおり source zip 作成時に 0644/0755 へ自動正規化)。あわせて pocket django init生成の Dockerfile テンプレートの COPY に--chmodを 付け、host 側の permission 事故を build 段で吸収するようにしました- management handler の INIT 失敗メッセージに、runtime 版不整合と並ぶ原因候補 として build context のファイル permission を追記しました
- 廃止済みフラグ
--skip-check-existing(0.6.0 で削除) を渡した場合に、click の "No such option" ではなくprovisioning = "command"+pocket resource <db> store-urlへの移行手順を示してエラーになるようにしました (pocket deploy/pocket promote/pocket django deploy/pocket django promote)。旧 バージョンからの一括アップデートで CI が案内なしに停止する実害への対応です (設定キー側の fail-fast ガイドと対になる CLI フラグ版) [neon]のbranch_name未指定 (default branch fallback) で、project に stage 名の branch が存在する場合に警告を出すようにしました。0.5.0 の デフォルト変更 (stage 名 → default branch) を跨いで移行すると、store-url / deploy が実データと別の branch へ接続 URL を焼く事故 (空 DB 参照) につながる ため、branch 一覧の取得済みデータから追加 API call なしで検出します。意図が stage 名 branch ならbranch_name = "{stage}"の明示を案内します
Changed¶
- 破壊的変更: CloudFront route の
build_dirと文字列形式のbuild = "..."を 廃止し、ビルド責任を宣言で分離しました。旧キーは起動時に移行手順つきのエラーに なります - pocket にビルドさせる場合:
build = { dir = "frontend/dist", cmd = "just frontend-build" }(dir/cmdとも必須。deploy が upload 前にcmdを shell 実行) - ビルドは外部 (CI 等) の責任でアップロードのみの場合:
upload_dir = "frontend/dist"(deploy はビルドを実行しない。成果物の最新化は利用者の責任) - 背景: 旧スキーマは
build_dir単独で有効なため「宣言すれば pocket がビルド してくれる」誤解を招き、古い成果物のまま配信される事故 (deploy は成功ログ・ API は新しい・画面だけ古い) が実際に発生しました。ビルドさせる/させないを どちらも明示宣言にすることで、この見落としを構造的に防ぎます
Added¶
[dsql]の deploy が cluster endpoint を stored user secret の正準パス/{stage}-{project}-{namespace}-user/dsql_endpointへ publish するように なりました。DSQL は cluster identifier が AWS 自動生成で endpoint を命名規約 から導出できないため、deploy の外の消費者 (migration ツール・外部 provisioner 等) が endpoint を決定的に引ける作成記録を deploy が書き込みます- 保存先は stored user secret 機構に相乗り (
secrets.storeに応じた SSM SecureString / Secrets Manager)。毎 deploy で冪等に上書きし (値が同じなら書き込まない)、cluster 削除時には publish も削除します pocket.namingに secret_type 定数DSQL_ENDPOINTを追加しました。 消費者はstored_user_secret_name(project=..., stage=..., secret_type=DSQL_ENDPOINT, store=...)で正準名を導出できます- ssm feature group に
ssm:DeleteParameter(単数) を追加しました (secrets.store = "ssm"構成での unpublish /pocket migrate-secret-pathsの旧パス削除用)
0.19.0 - 2026-07-20¶
Added¶
platform = "linux/arm64"で Lambda が arm64 (Architectures) で作成される ようになりました。従来は build だけ arm64 で Lambda が x86_64 固定のため、 起動時に exec format error (Runtime.InvalidEntrypoint) で必ず失敗していました。 未知の platform 値は設定読込時にエラーになります- handler 単位の環境変数上書き
[awscontainer.handlers.<name>].envsを追加 しました。[awscontainer].envsとマージされ handler 側が優先されます。 同一イメージ・同一バイナリを環境変数でモード切替して複数の Lambda に並べる 用途 (Rust 単一バイナリの管理系 handler 等) に使えます - ECR repo 名 / deploy 済みイメージ参照の正準導出 API を追加しました。外部 ツールが pocket の内部命名を再実装せずに済みます
pocket.naming.ecr_repo_name()/ecr_image_tag()(純関数)pocket resource image repo/pocket resource image uri --stage <s>(pocket.toml 準拠。uri は{repo_uri}@{digest}を stdout 出力)- distribution 単位の Basic 認証
[<stage>.cloudfront.<name>].basic_authを 追加しました。公開前の sandbox/stg サイト全体 (S3/SPA/lambda の全 behavior) を隠す用途で、credential は新 managed secret typebasic_auth_credential(username必須 /password固定可・省略時ランダム) で生成し、deploy 時に KVS へ書き込みます。Authorization ヘッダを占有するため、ヘッダ認証 (Bearer 等) を使う API とは併用できません (cookie/session 認証は可)
Fixed¶
pocket destroy/pocket resource neon deleteが Neon の root branch で 422 (cannot delete the root branch) になり異常終了していました。root branch は project 内に他 branch がなければ project ごと削除し、他 branch が同居する 場合は巻き添え防止のため警告してスキップします[<stage>.awscontainer.envs]の値に二重引用符 (JSON 文字列等) が含まれると CloudFormation テンプレートが YAML ParserError で壊れていました。埋め込みを YAML セーフにし、引用符・バックスラッシュ・改行を含む値を扱えるようにしました- prefix 付き SPA route (
path_pattern = "/admin/*"等) の fallback URI に glob の*がリテラルで残り (/admin/*/index.html)、SPA が一切配信できません でした。prefix 部分だけを使い/admin/index.htmlに解決するよう修正しました
0.18.1 - 2026-07-20¶
Fixed¶
SchedulerExecutionRoleにpermissions_boundaryが反映されていませんでした。 permissions boundary が強制される AWS アカウントでは、scheduler 構成の stack がiam:CreateRoleの条件で拒否され作成できなかったため、LambdaRoleと同様に boundary を付与するよう修正しました。0.18.0 でpocket.sqs_schedulerを含む scheduler 構成を boundary 強制環境へ deploy する場合はこの版へ更新してください。
0.18.0 - 2026-07-19¶
Added¶
- スケジュール実行の新しい entry 種別
pocket.sqs_schedulerを追加しました。 EventBridge Scheduler が Lambda を直接 invoke する代わりに、handler の SQS queue へ直接SendMessageします(messageが JSON 化されて MessageBody になる)。 定期実行を queue に載せることで、リトライは SQS の visibility timeout / redrive に 一元化され、失敗系の監視は queue の DLQ 1 箇所だけになります。worker handler は SQS event だけを受ければよく、「EventBridge 直接 invoke と SQS event の両受け」を 実装する必要がありません。対象 handler にはsqs設定が必須です(デプロイ前に バリデーションエラーになります)。scheduler の IAM role には対象 queue に絞ったsqs:SendMessageが付与され、schedule が全て SQS 型の場合はlambda:InvokeFunction文は出力されません。 - Rust runtime (
magic-pocket-rs) に SQS worker / enqueue ヘルパ (magic_pocket_rs::sqs) を追加しました。 process_sqs_records(event, handler): SqsEvent を record 単位で dispatch し、 失敗した record だけを partial batch response (batchItemFailures) として集約 します。report_batch_item_failuresが既定で有効な pocket の event source mapping では、例外でバッチ全体を落とすと成功済み record まで再配信され二重実行 される(BaseCommandHandlerで修正済みの問題と同型)ため、Rust worker でも record 単位の失敗報告を最初から強制する形にしています。enqueue_json(queue_key, message)/queue_url(queue_key): runtime が注入するPOCKET_<KEY>_QUEUEURLを読んで SendMessage する糖衣。メッセージ本文の形式 (Job enum 等)と dispatch の中身はアプリ側の責務です。- Rust runtime (
magic-pocket-rs) のset_envs()が RDS と CloudFront に対応しました。 DATABASE_URL = { type = "rds_database_url" }構成で、Secrets Manager / SSM の 認証情報からDATABASE_URLを実行時に構築します(Python runtime の_set_rds_database_urlと対称。パスワードの percent-encode、 ManageMasterUserPassword の secret に host/port/dbname が無い場合のPOCKET_RDS_ENDPOINT等での補完まで含めて同じ結果になります)。 従来 Rust アプリは RDS 構成でもDATABASE_URLが marker 値 (__rds_runtime__) のまま boot し、接続に失敗していました。POCKET_CLOUDFRONT_{NAME}_DOMAINをセットするようになりました。 ドキュメントは以前から Django・Rust 両対応と記載していましたが、 Rust 側は未実装でした。
Changed¶
- context の組み立て(
Context.from_toml/from_settings)が AWS API を 呼ばなくなりました。従来は managed secret を宣言していると、SecretsContext の validator が IAM 許可リスト(allowed_sm_resources)の ARN 解決まで行うため、 context を作るだけで Secrets Manager のget_secret_valueが走っていました (credential 不在環境では分かりにくいNoCredentialsError、Lambda cold start にも余計な API 呼び出し)。ARN 解決は実際に必要になる時点(テンプレート描画・ serialize)まで遅延されます。これに伴い、managed secret が未作成のときの 「Pocket managed secrets is not ready」警告も context 構築時ではなく初回 ARN 解決時に出るようになります。 - catch-all の S3 route で
origin_path = "/"(バケット直下の配信)を指定した場合の エラーメッセージを、意図的な非サポートである旨と理由(pocket は 1 つの S3 バケットを 複数 route で共有するため、バケット直下に向けると OAC のバケットポリシーが バケット全体許可になる)を含むものに変更しました。従来は汎用のorigin_path must not ends with /だけで、origin_path省略を試すと今度は catch-all のエラーに当たり、メッセージ間をループしていました。 非サポートである旨はdocs/guide/configuration.mdにも明記しています。 - breaking: pocket.toml の全セクションで未知キーをエラーにするようになりました。
従来
[awscontainer],[awscontainer.secrets],[awscontainer.handlers.*],[rds],[dsql],[scheduler],[vpc.efs],[s3.cors]等は未知キーを黙って 無視していたため、typo や旧スキーマの残骸が「設定したつもりで効いていない」 状態になっていました(例: 0.9.0 でリネームされた[awscontainer.secretsmanager.pocket_secrets]を書き続けても secret 宣言が 丸ごと無視される)。既に[general],[cloudfront],[s3],[ses]等は 未知キーを拒否していたので、その挙動への統一になります。 未知キーが残っている pocket.toml は起動時にExtra inputs are not permittedで失敗するので、エラーが指すキーを削除するか正しい名前に直してください。 - breaking:
[neon]/[tidb]/[upstash]も未知キーをエラーにするように なりました。この 3 つは.envから credential を読むため pydantic 側のextra="forbid"は使えず(.envの無関係なキーまで拒否してしまう)、 toml のキーのみを検証します。.envの扱いは従来どおり変わりません。 - breaking:
pocket.django.lambda_handlersのsqs_management_command_report_failuers_handlerを、typo を修正したsqs_management_command_report_failures_handlerにリネームしました (failuers→failures)。旧名は残していません。pocket.toml の[awscontainer.handlers.*]のcommandで旧名を指している場合は、新しい名前に 書き換えてください(そのままだと deploy 後の Lambda が handler の解決に失敗します)。
Fixed¶
- SQS handler の部分失敗で、成功済みの job が再実行される問題を修正しました。
pocket.command_handler.BaseCommandHandlerは event source mapping にFunctionResponseTypes: ReportBatchItemFailuresが付いている (report_batch_item_failuresが true = 既定) にもかかわらずbatchItemFailuresを 返しておらず、バッチ内の 1 record が失敗すると handler 全体が例外で落ちていました。 SQS はこれを「バッチ全件が失敗」と解釈するため、同じバッチで既に完走していた record まで再配信され、冪等でない管理コマンドが二重実行されていました。 record 毎に例外を捕捉し、失敗した record の messageId だけをbatchItemFailuresで報告するようになったので、再配信されるのは失敗した record だけになります。crash 時の traceback は従来どおり CloudWatch に出力され、dead_letter_max_receive_count超過で DLQ に落ちる挙動も変わりません。
Removed¶
- breaking:
pocket.django.utils.get_static_storageを削除しました。get_storages()["staticfiles"]で同じ storage を取得できます。 - breaking:
pocket django manageの--handlerオプションを削除しました。 このオプションは指定すると即DeprecationWarning("Do not use key ...")を出す 状態で、management command handler はcommandがpocket.django.lambda_handlers.management_command_handlerの handler を 自動選択します。絞り込みが必要なケースは無かったため削除しました。
0.17.0 - 2026-07-12¶
Added¶
- Neon の ensure + 接続 URL 算出を、import 可能な公開 API
pocket.provisioning.neonとして runtime package (magic-pocket) 側に追加しました。 外部 provisioner(backend 作成時に接続 URL を SSM / Secrets Manager へ焼く側)が、 pocket.toml やpocket_cliを持たない中央実行(Web UI sync 等の Lambda 上 subprocess を含む)からでも、pocket 自身の ensure + URL 導出を再実装せずに import で共有できます。ensure_and_compute_url(project_name=..., branch_name=..., name=..., role_name=..., api_key=...)が branch/role/database を ensure してpostgres://...?sslmode=requireを返します(NeonContextを直接渡すensure_url_for_contextも公開)。SSM への保存自体は呼び出し側の責務で、正準名は 既存のpocket.naming.stored_user_secret_nameで導出できます。これによりpocket.naming(0.15.0)で path を、本 API で ensure+URL 導出を共有でき、 provisioner 側の独自再実装による drift を構造的に防げます。 - 実装は runtime package へ一本化し、HTTP は stdlib
urllibで行うためmagic-pocketに新規依存は追加していません(requestsはmagic-pocket-cli側の依存のまま)。既存のpocket_cli.resources.neon(Neon等)は本モジュールの re-export として 後方互換を維持します。pocket resource neon store-urlも同じ共有ヘルパを 経由するようになり、CLI と公開 API の導出が単一実装に揃います。
0.16.0 - 2026-07-11¶
Added¶
pocket resource dsql endpoint/pocket resource rds endpointに--format jsonオプションを追加しました。装飾なしの JSON を stdout に出力するため、 CI / シェルスクリプトから$(pocket resource dsql endpoint --format json)のように 安全に接続情報を取得できます(診断メッセージは従来通り stderr)。json 指定時は クラスター不在を exit code 1 で伝えます(text は従来通り warning + exit 0)。
0.15.0 - 2026-07-11¶
Added¶
- stored user secret 名の正準導出を公開 API
pocket.namingとして追加しました。 外部 provisioner(backend の接続 URL を SSM / Secrets Manager に焼く側)が、 pocket の deploy が読む正準パス(/{pocket_key}-user/{type})を再実装せずに import で共有できます。put する側と read する側(deploy)が同じ導出を使うことで、 パス不一致によるParameterNotFoundを構造的に防ぎます。stored_user_secret_name/user_secret_path/pocket_keyと type 定数 (NEON_DATABASE_URL/TIDB_DATABASE_URL/UPSTASH_REDIS_URL)を公開します。 pydantic / boto3 非依存の純粋な文字列導出のため import は軽量です。import pocket直下からも参照でき、既存のfrom pocket.context import user_secret_pathは再エクスポートで後方互換を 維持しています。
0.14.0 - 2026-07-10¶
Fixed¶
- DSQL リソース(
pocket.tomlの[dsql])の deploy が boto3 パラメータの 大文字小文字の誤りで常に失敗する問題を修正しました。boto3 dsql client の service model は lowerCamel(identifier/resourceArn)ですが、実装が PascalCase(Identifier/ResourceArn)で呼んでおりParamValidationErrorになっていました(get_cluster/delete_cluster/list_tags_for_resource)。ParamValidationErrorはClientErrorではないため既存のexcept ClientErrorで拾えず、初回 deploy は cluster 作成直後の_wait_activeで、再 deploy はstatus解決時に crash していました。実 service model で casing を検証する Stubber ベースの回帰テストを追加しています。 - CodeBuild builder の source zip 作成(
_upload_source)を forge VM 環境で 発生しやすい 2 つの footgun に対して堅牢化しました。(1) 実体の無い壊れた symlink(host 側参照など)を zip に入れようとしてFileNotFoundErrorで deploy 全体が落ちる問題を、当該ファイルを skip + warning するようにしました。 (2)sed -i編集等で生じた mode 0600 のファイルがそのまま image に入り、 Lambda の非 root 実行ユーザーが読めず起動時に panic する問題を、通常ファイルを 0644 / 実行ファイルを 0755 に正規化して防ぐようにしました。
0.13.0 - 2026-07-07¶
Added¶
pocket deploy/pocket django deploy実行時に、解決されたDEPLOY_HASHの値と 出所(DEPLOY_HASH環境変数 / git HEAD)を 1 行表示するようにしました。環境変数の 伝播漏れで意図せず git short hash にフォールバックしていた場合に気づけます。pocket migrate secret-paths(およびpocket migrate)に、移設で旧パスが削除される ことの事前警告を追加しました。移設後に古い runtime(magic-pocket[django])がDATABASE_URLを解決できず INIT で落ちる footgun を移設前に明示し、runtime を CLI と 同版へ更新してからの再デプロイを促します。- Rust クレート
magic-pocket-rsがtype基準の user secret ({ type = "neon_database_url" }、name省略)に対応しました。Python ランタイムと 同じ正準パス導出(store=ssmなら/{pocket_key}-user/{type})を実装し、nameの 手書きが不要になりました。
Fixed¶
- 診断・状態メッセージ(
echo)が stdout に出ていたため、SRC=$(pocket resource neon url --stage prod)のような capture に設定 lint の警告が 混入して URL を汚す問題を修正しました。診断はすべて stderr に出すようにし、stdout は 「機械が読む値」(URL /pocket permissions listの一覧などclick.echo出力)専用に しました。 - 診断メッセージ中の
magic-pocket[django]のような角括弧表記が Rich の markup として 解釈されて消えてしまう問題を修正しました。 - S3 route の
origin_path二重 prefix 助言が 1 回の設定ロードで 2 回表示される問題を 修正しました。
0.12.0 - 2026-07-05¶
Changed¶
- stored user secret の保存先を
type基準の正準名に変更しました(破壊的変更)。 従来type指定の user secret(stored mode)は、保存先の SSM/SM 名を consumer の env var 名([awscontainer.secrets.user]の辞書キー)から導出して いました(/{pocket_key}-user/{ENV_KEY})。このため env var のリネームや backend の付け替えで保存先が動き、backend 移行(neon→tidb等)で「保存済み URL を引け ない」問題の温床になっていました。これをtype基準(/{pocket_key}-user/{type}、 例/{pocket_key}-user/neon_database_url)に変更しました: - 保存 identity が env var 名から独立し、リネームや付け替えで動きません。
- 同一
typeの user secret は 1 stage につき 1 個までに制限されます(保存先が 衝突するため。設定ロード時のバリデーションで検出)。 pocket resource <db> urlは、consumer のDATABASE_URLが別 backend を指して いてもtype基準でその backend の保存 URL を解決できるようになりました (宣言が無くても正準パスから直接読む)。- 移行: 0.11 以前で provision 済みの環境は、アップグレード後に
pocket migrate secret-paths --stage <stage>(または引数なしのpocket migrate) を実行して旧パス→新パスへ値を移設してください(copy→検証→旧削除、冪等)。 ※ backend の cutover を既に済ませてtype宣言が消えている旧値は自動移設の対象外 です(旧キーを導出できないため)。その場合はstore-urlの再実行、または旧パスの 値を手動で新パスへ copy してください。 redirect_fromを CloudFront Function 方式に作り替えました。従来は リダイレクト元ドメインごとに「専用 ACM 証明書 + 専用 S3 website バケット (RedirectAllRequestsTo)+ 専用ディストリビューション」を作っていましたが、 これを次の構成に置き換えました:- リダイレクト元ドメインをメインディストリビューションの Alias に追加し、 証明書もメイン証明書の SAN にまとめる(専用証明書・専用配信を作らない)。
- canonical ドメインへの 301 リダイレクトを viewer-request の CloudFront Function で返す(path・query を保持)。既存の viewer-request Function (API host / SPA fallback / deploy-hash strip 等)には同等の redirect prelude を注入し、Function を持たない behavior にのみ専用の redirect Function を割り当てるため、全 behavior で確実にリダイレクトされます。
- これにより、専用 S3 website バケット作成に起因する
IllegalLocationConstraintException(bucket region 不整合)と、 リダイレクト専用証明書の論理名バグの温床が構造的に解消されます。 - 既存環境の更新時、旧実装が残した S3 website バケットは配信更新後に冪等に 削除します(別アカウント所有等で消せない場合は警告のみ)。
pocket.tomlの設定(redirect_from = [{ domain = ... }])は従来どおりで、 移行のための記述変更は不要です。
Added¶
pocket migrateをサブコマンド構成に整理しました。pocket migrate secret-paths: stored user secret を旧キー基準パスから新type基準パスへ移設します(0.11→0.12。copy→検証→旧削除、冪等。--dry-runで確認可)。pocket migrate template-hash: 従来のpocket migrate(スタックのテンプレート ハッシュタグ一括付与)です。- 引数なしの
pocket migrateは上記を secret-paths → template-hash の順に冪等実行 します(template-hash がテンプレ差分で中断しても secret-paths は完了済みで、pocket deploy後の再実行が安全)。 - 破壊的変更: 従来の bare
pocket migrate(テンプレートハッシュ付与)はpocket migrate template-hashへ移動しました。
0.11.0 - 2026-07-05¶
Added¶
- CLI と runtime のバージョン不整合を、分かりやすいエラーで検知するようにしました。
デプロイを叩く
pocketCLI(magic-pocket-cli)と Lambda 内 runtime(magic-pocket)は 別パッケージで版が独立に固定されるため、CLI が新機能スキーマのpocket.runtime.tomlを 書いても runtime が古いと解釈できず、Lambda の INIT フェーズでRuntime.Unknownとして 不透明に失敗していました。 pocket.runtime.tomlの先頭に生成元 CLI 版を TOML コメントとして刻みます。コメント なので古い runtime(tomllib)は無視し、後方互換は壊れません。- runtime は設定読込時に「生成元版 > 自身の版」を検出したら、
Runtime.Unknownの代わりに 対処(uv add 'magic-pocket[django]>=X.Y.Z')を促す明快な例外を出します(この検査を 含む 0.11.0 以降の runtime で有効)。 - deploy の management ステップが INIT フェーズ失敗(
Runtime.Unknown/INIT_REPORT ... Status: error)を検出した場合、「アプリの traceback を確認」ではなく runtime 側(バージョン不整合を含む)を疑う案内に切り替え、切り分けの誤誘導を減らします。 - あわせて deploy ガイド(実行環境)に CLI/runtime の版結合と lock 更新手順を明記しました。
0.10.0 - 2026-07-05¶
Added¶
pocket resource neon url/pocket resource tidb urlを追加しました。指定 stage の backend 接続 URL を 純 URL のみ stdout に出力します(診断・警告は stderr)。backend 移行ツール(Neon→TiDB 等)が接続 URL を app 側で自前解決(SSM パラメータ名のハードコード やneonctl直叩き)せずに、$(pocket resource neon url --stage prod)で取得できます。- 解決方式は既定で stored-first(
type = "<db>_database_url"の user secret を読む。 副作用が無く、consumer が実際に使う URL と一致)。未 provision の場合のみ provider API での live 算出に fallback します。--liveで常に provider API から算出します。 - TiDB は password reveal API が無く URL 算出が root password を rotate するため、既定を
stored-first にして rotate を回避しています(
--live指定時のみ rotate。consumer の redeploy が前提)。 - 移行中に
[neon]と[tidb]を 併記(dual-declaration)した状態で、resource ごとにneon/tidbを呼び分ければ source/target 双方の URL を解決できます。
0.9.1 - 2026-07-05¶
Fixed¶
redirect_fromの ACM 証明書 CFn 論理名にハイフン等の非英数字が残り deploy が 失敗する不具合を修正しました。RedirectFromContext.yaml_keyがdomain.split(".")capitalize()で論理名を組み立てていたため、ハイフンを含む domain (apex→wwwの定番 redirect でごく一般的)では CFn 論理 ID に非英数字が残りTemplate format error: Resource name ... is non alphanumericで UpdateStack が 失敗していました。RouteContext/_camelと同様に非英数字を境界にして除去する ように揃えました。- 既存デプロイへの影響なし: 非英数字を含まない domain では旧実装と同一の論理名に なる(挙動不変)ため、影響を受けるのはハイフン等を含む domain のみで、それらは そもそも従来 deploy できていませんでした。
0.9.0 - 2026-07-04¶
Added¶
- S3 route で
origin_pathを省略できるようにしました(path_patternが prefix を持つ route のみ)。S3 の key prefix はorigin_path + path_patternで計算されるため、path_pattern = "/media/*"の route にorigin_path = "/media"を付けると S3 実キーがmedia/media/...の二重階層になっていました。origin_pathを省略するとpath_pattern由来の単一 prefix(media/...)になり、aws s3 sync等でバケットを直接操作する運用で prefix が直感的になります。catch-all(path_pattern = ""/"/*")は prefix を持たないためorigin_pathは必須のままです。 - あわせて、S3 prefix 重複検査と OAC バケットポリシーの prefix 計算にも
origin_path省略 route を含めるよう修正しました(含めないと空 origin route のオブジェクトがポリシー範囲外に なり CloudFront が 403 になる不具合を回避)。 - 既存デプロイへの影響: 既存 route から
origin_pathを外すと S3 key prefix が変わり 既存オブジェクトが参照できなくなるため、単一 prefix へ移行する場合は既存オブジェクトの 移送が必要です(opt-in。既存 toml はそのままなら挙動不変)。
0.8.1 - 2026-07-03¶
Fixed¶
- RDS
create()を冪等化しました。途中で失敗した deploy の再実行や、一部リソース だけ先行作成済みのケースで、DB Subnet Group / Security Group / クラスタ / インスタンスが...AlreadyExistsで落ちていたのを、既存を検出して再利用・skip するようにしました。 static パスワードの再生成や password 切替 modify は「新規作成/復元したセッションのみ」 実施するため、再実行で認証情報が作り直されることもありません。 - RDS の snapshot 復元で、
modify_db_cluster(master password 切替)の前にインスタンスがavailableになるまで待つようにしました。従来はクラスタの available のみ待っており、 インスタンスがcreatingの状態で modify が走って反映されない/失敗する可能性がありました。 - management command(migrate 等)の失敗が「緑」で通っていた(false green)のを修正
しました。ハンドラは非同期 (
InvocationType="Event") で invoke され戻り値/例外が CLI に 伝わらないため、成功時のみ出力するセンチネルを導入し、CLI 側 (show_logs) が REPORT までにそれを観測できなければManagementCommandFailedで非ゼロ終了するようにしました。 これによりpocket deploy中の migrate 失敗が握り潰されず deploy が止まります。
0.8.0 - 2026-07-03¶
Changed¶
- RDS の既定 DB 名の順序を
{project}_{stage}から{stage}_{project}に変更しました (例myapp_prod→prod_myapp)。クラスタ識別子や Subnet Group など他の RDS リソース名は すべて{stage}-{project}順(resource_prefix由来)だったのに、DB 名だけ project 先頭で 順序が食い違っていたのを揃えるものです。 - 既存の RDS プロジェクトへの影響: 既にデプロイ済みのクラスタは DB 名が旧順序
(
{project}_{stage})のままのため、本バージョンにアップグレードして接続するとFATAL: database "..." does not existになります。旧 DB 名を維持したい場合は、新設の[rds] databaseで旧名を明示的に固定してください(下記 Added 参照)。新規プロジェクトは そのまま新順序で作成されます。
Added¶
[rds] databaseを追加し、RDS の DB 名を明示的に上書きできるようにしました (managed = true時のみ)。主用途は snapshot からの復元です。RestoreDBClusterFromSnapshotはDatabaseNameを無視するため、復元後のクラスタには snapshot 元の DB 名がそのまま残ります。元ツールが別命名(例{project}_{stage})だった場合、databaseで実 DB 名を指すことで復元後の接続失敗を防げます。
0.7.2 - 2026-07-03¶
Fixed¶
- TiDB backend の TLS CA バンドルパスを Debian/Ubuntu 命名
(
/etc/ssl/certs/ca-certificates.crt) でハードコードしていたため、Amazon Linux 2023 ベースの Lambda(public.ecr.aws/lambda/python、CA は/etc/pki/tls/certs/ca-bundle.crt) では CA ファイルを開けず、ssl_mode = VERIFY_IDENTITYの DB 接続が deploy 後に失敗する 問題を修正しました。候補パスを順に存在チェックする実装に変更し、AL2023 / RHEL 系と Debian/Ubuntu の双方を吸収します。
Added¶
- TiDB backend で
CONN_MAX_AGE = None/CONN_HEALTH_CHECKS = Trueを標準デフォルト化 しました。Lambda は実行環境(コンテナ)を再利用するため、持続接続で warm リクエストの TLS handshake を省けます。idle 切断された接続は再利用前の health check で検知して 張り直すため安全です。
0.7.1 - 2026-07-03¶
Fixed¶
- Neon の
provisioning = "deploy"で、既存ブランチ(Neon プロジェクト作成時に自動生成 される defaultmainを含む)があっても branch を無条件に作成しようとして409 branch already existsで初回 deploy が失敗する問題を修正しました。既存ブランチが ある場合は作成をスキップし、その上に role / database を ensure します(create()/create_branch()を冪等化)。これにより default ブランチを使う stage の初回 deploy が 409 にならず、既存ブランチへの db/role bootstrap も deploy で完結します。
0.7.0 - 2026-07-02¶
Features¶
- staticfiles の publish を deploy から分離できるようにしました。staticfiles 宣言に
publish = "command"を指定すると、pocket django deploy/promoteは静的ファイルに 一切触れず、publish はpocket django deploystaticに一任されます(DB/KVS のprovisioning = "command"と同じ思想の静的版。大容量資産を out-of-band 管理し、CI は コードのみデプロイする構成に対応。既定は従来どおりpublish = "deploy")。 pocket django deploystaticに--linkを追加しました。collectstatic に--linkを 渡し、大容量資産の複製コストを削減します(aws s3 syncは symlink を追うため upload 互換)。
Changed¶
pocket django deploystaticの S3 上の不要ファイル削除を opt-in にしました (--deleteフラグ新設)。従来はaws s3 sync --delete固定で、旧デプロイのアセットを 参照中のリクエスト(キャッシュ済み HTML / 切替前の Lambda が返すページの hash 付き ファイル名)や過去 commit への rollback を壊す時間窓がありました。pocket django deploy/promote内の静的アップロードも同様に削除なしになります。不要ファイルの掃除はpocket django deploystatic --deleteを明示実行してください。
0.6.0 - 2026-06-28¶
Features¶
- DB / KVS の provisioning を deploy から分離できるようにしました。
[neon]/[tidb]/[upstash]にprovisioning = "command"を指定すると、deploy は当該リソースに一切触れません (管理 API call ゼロ / credential 不要)。provisioning は新コマンドpocket resource <neon|tidb|upstash> store-url --stage <stage>に分離し、 branch/cluster/role/db (Upstash は database) を ensure して接続 URL を stored user secret ([awscontainer.secrets.user]のtype)の正準名へ保存します。これにより「provisioning は 管理 API key を持つ host / 特権 CI」「deploy は credential なし」という custody 分離が 素直に成立します(既定は従来どおりprovisioning = "deploy")。 - user secret の
typeにupstash_redis_urlを追加しました(neon_database_url/tidb_database_urlと同様の stored mode)。 store-urlは既存 secret があると no-op で、--forceで上書きします。複数候補があるときは--keyで対象を指定します。- TiDB の注意: TiDB Serverless は password の reveal API が無いため、
tidb store-urlは 実行のたびに root password をローテーションします(Neon / Upstash は冪等)。実行後は consumer の再デプロイが前提です。
Changed / Deprecated¶
- DB / KVS 接続 URL の computed mode(
[awscontainer.secrets.managed]に{ type = "neon_database_url" / "tidb_database_url" / "upstash_redis_url" })を deprecated にしました。deploy 時に warning を出します。[<db>] provisioning+ stored user secret([awscontainer.secrets.user]のtype)へ移行してください。computed とprovisioning = "deploy"は「deploy が ensure し URL を供給する」点で挙動が同じで、差分は 保存先のみ(computed = managed pocket_store、stored = user secret 名)です。
Removed¶
[neon]/[tidb]/[upstash]のskip_check_existingを削除しました (provisioning = "command"へ置換)。残っていると deploy 前に fail-fast で移行を案内します。- 実行時フラグ
--skip-check-existingを削除しました(pocket deploy/pocket promote/pocket django deploy/pocket django promote)。credential-less deploy は[<db>] provisioning = "command"に一本化されました。 - 移行手順:
[<db>] skip_check_existing = trueを[<db>] provisioning = "command"に置換し、 接続 URL を[awscontainer.secrets.user]のtypeで宣言、deploy 前にpocket resource <db> store-url --stage <stage>を一度実行してください。
0.5.0 - 2026-06-28¶
Features¶
[neon]で使用するブランチを選択できるようにしました。これまで Neon のbranch_nameは stage 名にハードコードされていましたが、branch_nameを省略すると project の default ブランチ (通常main) を使うようになり、stage = ブランチ名の 暗黙の結合を解消しました。[<stage>.neon]で per-stage に上書きでき、{stage}/{project}/{namespace}を展開できるので、環境ごとに別ブランチを払い出す 使い方もできます。あわせてparent_branch_nameを追加し、ブランチを新規作成する際の 親ブランチを指定できます (省略時は Neon の default ブランチから分岐する従来挙動)。 既存の stage 名ブランチ運用はbranch_name = "<stage>"を明示すれば維持できます。
0.4.0 - 2026-06-22¶
Features¶
- DB 接続 URL の stored mode を追加しました。
[awscontainer.secrets.user]にDATABASE_URL = { type = "tidb_database_url" }/{ type = "neon_database_url" }と 書くと、deploy 時に provider の管理 API を叩いて URL を計算する computed mode (secrets.managed) の代わりに、事前 provision して secret store に保存済みの接続 URL を 参照するだけになります。deploy 環境に cluster を作成・削除できる管理 API key を持ち込まず に済み (least privilege)、deploy が外部 API に依存しません。type指定時は pocket が secret 名を自動導出し、未 provision のまま deploy すると正準名を示して deploy 時にエラーで 止めます (runtime まで遅延しません)。nameとtypeは排他です。RDS は元々管理 API key 非依存かつパスワードローテーション追従のため対象外です。
0.3.0 - 2026-06-16¶
Features¶
[cloudfront.<name>].enable_origin_verifyを追加しました。CloudFront 配下の origin (lambda / API Gateway) に対し、(1) origin 直叩き防止の secret custom header (X-Pocket-Origin-Verify) を CloudFront → origin に付与しつつ同値を Lambda runtime env に注入、(2) 詐称耐性のある client IP (CloudFront が TCP から取得するevent.viewer.ip) をX-Pocket-Viewer-Ipheader で origin に転送、(3) 検証 +REMOTE_ADDR正規化を行う Django middleware (pocket.django.origin_verify.OriginVerifyMiddleware) の同梱、を一括で有効化します。 secret は managed secret (type = "origin_verify_secret") として自動生成・管理され、 利用者は flag を立てて middleware を最前段に置くだけで済みます。 viewer IP 転送自体は flag 非依存で lambda route に常時入ります (キャッシュ無影響・ 純加算のため。origin request policy はAllViewerExceptHostHeaderのまま据え置き、 CloudFront Function 経由で付与するので API GW の Host 整合性も壊しません)。
0.2.2 - 2026-06-15¶
Bug Fixes¶
versioning = "deploy_hash"構成で 2 回目以降の deploy 時に Lambda の環境変数DEPLOY_HASHが旧値に固着し、Django が古い hash の static URL を生成して CloudFront 側 (毎 deploy 追従) と乖離 → 静的アセットが全滅 (403) する不具合を 修正しました。pocketの Lambda 更新はupdate_function_code(コードのみ) で Environment を更新せず、env は CFnstack.update()経由でしか書き換わらないため、 stack 更新がyaml_synced/wait_statustimeout 等でスキップされると env が 古いまま残るのが原因でした。deploy フロー末尾の post-deploy hook (AwsContainer.ensure_post_deploy_state) で、CloudFront の KVS 書き込みと同じ philosophy により Lambda env のDEPLOY_HASHを side-channel で冪等に同期する ようにしています (既存 env / secret は保持)。
Security¶
- Rust crate (
magic-pocket-rs) の依存ツリーから legacy TLS スタック (rustls 0.21 / hyper 0.14 系) を除去しました。aws-sdk-*の default featurerustlsを無効化し、既定の HTTP client (rustls 0.23 + aws-lc) のみを使用します。 動作は変わりません。git 依存で利用している場合はcargo update magic-pocket-rsで取り込めます。
0.2.1 - 2026-06-10¶
Bug Fixes¶
pocket versionが古いバージョン (0.1.1) を表示する問題を修正しました。__version__を手書き定数からパッケージメタデータ由来に変更し、 pyproject.toml との二重管理を廃止しています (同期の回帰テスト付き)。
0.2.0 - 2026-06-10¶
0.1.1 以降の全面的な機能拡張リリースです。runtime ライブラリ (magic-pocket) と
deploy CLI (magic-pocket-cli) の 2 パッケージ構成になりました。
Breaking Changes¶
- パッケージを 2 分割しました。 deploy CLI (
pocketコマンド) は新パッケージmagic-pocket-cliに移動し、magic-pocketは Lambda runtime ライブラリのみに なりました。デプロイ環境にはmagic-pocket-cliを、Lambda image には従来どおりmagic-pocketをインストールしてください。 - AWS リソース系コマンドを
resourcegroup 配下へ再配置しました。 旧トップレベル コマンドpocket awscontainer/neon/tidb/dsql/rds/s3/vpc/cloudfront等は廃止され、pocket resource awscontainer ...のようにresourceを 挟む新 path になりました(旧 path には alias を残していないためNo such commandで失敗します)。CLI を呼び出すスクリプト・上位ツールは新 path への追従が必要です。 例:pocket awscontainer reload-env→pocket resource awscontainer reload-env。 pocket.django.lambda_handlers.shell_handlerをdangerous_shell_handlerに リネームしました。 任意文字列をshell=Trueで実行する危険な handler である ことを名前で明示する目的です(capability 自体は維持)。pocket.tomlの handler に旧名を指定している場合は新名への追従が必要です。SQS 駆動でコマンドを安全に 完走させる用途には新設のBaseCommandHandlerを利用してください。- deploy 時の stage 指定環境変数を
POCKET_DEPLOY_STAGEに分離しました。POCKET_STAGEは Lambda runtime 専用になり、ローカルで runtime helper と deploy CLI の stage 指定が干渉しなくなりました。 - Route の
type = "api"をtype = "lambda"にリネームしました(旧値は起動時に 分かりやすいエラーで失敗します)。 is_versionedを廃止しversioningに統一しました("content_hash"= 旧is_versioned = true相当 /"deploy_hash"= git hash を URL prefix に付与する 方式を新設)。- VPC 設定をトップレベル
[vpc]セクションへ移動しました。 外部 VPC 参照 (manage = false) と VPC 共有 (sharable = true+ consumer タグ管理) も サポートします。 - Route に
origin_pathを導入し、storage の location を自動計算するように しました(旧spa.origin_path_formatの設定体系は廃止)。 - CloudFront 専用 S3 バケットを廃止し、プロジェクトの S3 バケットに統合しました。
- Neon の
project_nameを pocket.toml で必須指定に変更しました。 - secrets セクションを再編しました:
[awscontainer.secretsmanager.pocket_secrets]→[awscontainer.secrets.managed]、[awscontainer.secretsmanager.secrets]→[awscontainer.secrets.user]。 保存先 store として Secrets Manager に加え SSM Parameter Store (store = "ssm") を選択可能になりました。
Features¶
- データベース / キャッシュの選択肢を拡張: Neon に加えて TiDB Serverless
(
[tidb]) / RDS Aurora Serverless v2 ([rds]、既存クラスター参照可・static パスワード管理対応) / Aurora DSQL ([dsql]、IAM 認証・VPC 不要) / Upstash Redis ([upstash]) をサポート。 - Rust (Loco) 対応:
magic-pocket-rscrate を追加し、Django 以外に Loco app を 同じ pocket.toml 体系でデプロイできるようになりました。 - CloudFront 統合を全面拡張:
[cloudfront.<name>]で複数ディストリビューション、 routes (S3 / lambda)、SPA ルーティング、署名付き URL (signing_key)、SPA トークン 認証 (require_token+ CloudFront Function + KeyValueStore)、WAF IP allowlist (waf)、ステージ別アセット配信 (managed_assets)、deploy_hashversioning に よるキャッシュバスティングをサポート。 - :material-console: build once + commit hash 昇格をサポート。
pocket django buildで 作業ツリーを一度ビルドして git commit hash(full)タグで ECR へ push し、pocket promote/pocket django promote --commit-hash <sha>で同一イメージを 再ビルドなしで各ステージへ昇格できます(:<stage>タグの付け替え + Lambda 更新)。[awscontainer].ecr_nameで ECR リポジトリ名を上書きでき、同一アカウント内の ステージ間でリポジトリを共有可能(明示指定したリポジトリはpocket destroyで 削除されません)。通常のpocket django deployの挙動は不変です。 - SQS 駆動の安全な command worker 基盤
pocket.command_handler.BaseCommandHandlerを追加。SQS イベントを別 Lambda invocation の本体として受け、build_argvで固定 した実行ファイルをshell=Falseの list argv で完走させ、出力 / ステータスを sink hook(on_start/on_output/on_finish/on_crash)に委譲します。long-running job を wsgi tier から worker tier に逃がす定石を共通化し、Lambda の freeze による 「ステータスが running 固着」を構造的に防ぎます。crash 時はtry/finallyでon_crashを呼んでから例外を re-raise(握りつぶさない)。dangerous_shell_handlerの安全な後継です。 - EventBridge Scheduler サポート (
[scheduler]): cron / rate での定期実行を CloudFormation 管理で構成。Django management command を呼ぶショートカット entry (pocket.django.management_lambda_scheduler) もあります。 - VPC + EFS サポート: NAT / Internet Gateway 構成、EFS マウント、Django
キャッシュの EFS 利用 (
store = "efs")。 - デプロイ権限の可視化:
pocket permissions listCLI と Python API (pocket.permissions.compute_actions()/action_groups()) で、pocket.toml の 構成に必要な IAM Action 一覧を機械可読に提供。デプロイ用 IAM Role の最小権限 プロビジョニングに使えます。 - ビルドバックエンドの選択:
[awscontainer.build]で codebuild(既定)/ docker / depot を選択可能。ローカル Docker なしでデプロイできます。 - IAM Permissions Boundary 対応 (
[awscontainer].permissions_boundary)。 Lambda 実行ロールと CodeBuild ロールに適用されます。 pocket runtime-config: ビルド専用設定を除外したpocket.runtime.tomlを 生成し、Lambda image に焼き込む仕組みを導入。- SES メール送信 (
[ses]): Django email backend の自動構成つき。 pocket waf ipCLI: WAF IPSet の side-channel 即時更新(add / remove / list)。pocket resource awscontainer reload-env/status-env: SSM / Secrets Manager の最新値で Lambda 環境変数を即時更新(CFn を介さない)/ 宣言値との drift 表示。- :material-console:
pocket django deployでインフラデプロイ + ローカル collectstatic + Lambda 上での migrate を対話形式で一括実行。 - :material-console:
pocket django resetdbでデータベースの public スキーマをリセット(DROP SCHEMA public CASCADE) - S3 バケット名のカスタマイズ (
[s3].bucket_name_format) とステージ別[<stage>.general]上書き(region 等)。
Bug Fixes¶
pocket permissions list/compute_actions()に deploy が実際に必要とする Action の宣言漏れが 5 件あったのを修正。権限を絞ったデプロイ用ロールで 該当構成を deploy するとAccessDeniedになっていた:dsql:*([dsql]構成の cluster 操作)/scheduler:*([scheduler]構成の CFnAWS::Scheduler::Schedule作成)/tag:TagResources・tag:UntagResources(外部 VPC 参照時の consumer タグ付け外し)/iam:ListRolePolicies(CodeBuild ロール削除時の inline policy 列挙)/ssm:GetParameter・ssm:PutParameter・ssm:DeleteParameter([rds]の static master password 管理。secrets.storeとは独立に必要)。action_groups()にdsql/scheduler/tagグループを追加(キー追加のみの非破壊変更)。POCKET_HOSTS環境変数が複数ホストをセパレータなしで連結していたのを カンマ区切りに修正(Python / Rust 両ランタイム)。apigateway 付き handler を 2 つ以上定義すると、Django のALLOWED_HOSTSに壊れたホスト名が入り 2 つ目以降のホストがDisallowedHostになっていました(消費側のadd_or_append_envは元々カンマ結合を前提としており、handler 1 つの構成では 影響ありません)。pocket resource awscontainer reload-env/status-envが Lambda 関数名から namespace(既定pocket)を取りこぼし、default namespace のデプロイで常に 「Lambda function が見つかりません」で失敗していたのを修正(deploy 側と同じ 正準function_nameを参照)。あわせてstatus-envの drift 警告が案内する コマンドが旧 path のままだったのを新 path に修正。
Improvements¶
- deploy コードと
compute_actions()の同期検証テストを追加 (tests/test_permissions_sync.py)。boto3 呼び出しの AST 静的解析と CloudFormation テンプレートのリソース型解析の 2 系統で、deploy が必要とする Action の宣言漏れを CI で検知する(過去に 3 回再発した「権限を絞った deploy ロールが本番で AccessDenied」の構造的な再発防止。未知の CFn リソース型の 追加時はテストが fail し権限の検討を強制する)。同期方針はdocs/permissions/aws.mdに記載。 - S3バケットのCORS設定を
pocket.tomlで宣言可能に(CloudFrontドメイン自動解決) pocket destroyがデフォルトでシークレットも削除するように変更(--without-secretsで残す)pocket destroyでCloudFrontスタック削除の完了を待機するように修正pocket deploy時にSSM/SMの不要なシークレットを自動クリーンアップ
0.1.1 - 2024-10-16¶
Full Changelog: https://github.com/worgue/magic-pocket/compare/0.1.0...0.1.1
Bug Fixes¶
- spa用のリソース作成時にリダイレクトするためのリソースが作られないバグを修正
0.1.0 - 2024-10-11¶
Dependencies¶
- click>=8.1.7
- tomli>=1.1.0 ; python_version < '3.11'
- mergedeep>=1.3.4
- pydantic>=2.5.3
- pydantic-settings>=2.1.0
- boto3>=1.34.28
- rich>=13.7.0
- deepdiff>=6.7.1
- pyyaml>=6.0.1
- python-on-whales>=0.68.0
- jinja2>=3.1.3
- awslambdaric>=2.0.10
- apig_wsgi>=2.18.0
- django-storages>=1.14.2,!=1.14.3
Features¶
- :material-console:
pocket statusで環境の作成状況を確認 - :material-console:
pocket deployでデプロイ- :material-database: NeonへのDB作成
- :simple-awssecretsmanager: SecretsManagerへのNeon DBの接続情報登録
- :simple-amazons3: ストレージ用にS3を作成し権限を設定
- :simple-docker: コンテナイメージを作成しECRへアップロード
- :material-language-javascript: フロントエンドSPAのビルドデータをアップロードするS3を作成
- CF: Lambdaに関わるCloudFormationを登録・更新
- LambdaのIAM Role, SecurityGroup, Function
- API Gateway の LogGroup, Api, ApiGatewayManagedOverrides, Route, Integration, lambda Permission, Certificate, DomainName, RecordSet, ApiMapping
- API Gatewayのhost名のoutput
- CF: SPAに関わるCloudFormationを登録・更新
- CloudFrontのOriginAccessControl, Certificate, CloudFrontFunction, Distribution, RecordSet
- :material-language-python:
settings.pyでの情報取得- :simple-awssecretsmanager: AWS SecretsManagerから情報を取得(1)
- :simple-toml:
pocket.tomlからdjangoのSTORAGES,CACHESを取得 - CF: CloudFormationのoutputからdjangoの
ALLOWED_HOSTSを取得
- :simple-toml: デプロイ環境ごとのdjango settings登録
- :material-console:
pocket django manage COMMAND ARGSで管理コマンドを実行 - :material-console:
pocket django storage upload STORAGEでローカルのFileSystemStorageから対象ステージのS3Boto3Storageへデータをsync - :material-console:
pocket resource awscontainer statusでLambdaの作成状況を確認 - :material-console:
pocket resource awscontainer secretsmanager listでSecretsManagerの値を確認 - :material-console:
pocket resource awscontainer yamlでCloudFormation用のyaml ファイルを確認 - :material-console:
pocket resource awscontainer yaml-diffでCloudFormation用のyamlファイルの差分を確認 - :material-console:
pocket resource neon statusでNeonの作成状況を確認 - :material-console:
pocket resource s3 statusでS3バケットの作成状況を確認 - :material-console:
pocket resource spa statusでspaアップロード先S3バケットの作成状況を確認