Skip to content

0.29.0

Choose a tag to compare

@worgue-magic-pocket-llmops worgue-magic-pocket-llmops released this 19 Aug 13:27
· 40 commits to dev since this release

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
  • 破壊的変更: 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)

  1. pocket.toml[awscontainer] 系セクションを [container.<name>]
    リネームします (stage override は [<stage>.container.<name>])。
    cloudfront routes / scheduler の handler をドット記法へ変更します
  2. pocket deploy --stage <stage> (Django なら pocket django deploy) を
    実行します。managed secret は旧 project 共有パスから container store へ
    自動コピーされ (値は再生成されません)、新名称の container stack が作成され、
    CloudFront が新 origin へ切り替わった後、旧 stack / 旧 ECR repo / 旧パスの
    secret 残骸の削除確認が表示されます
  3. 注意点:
    • SQS 付き handler は queue が作り直されるため、queue が空の
      タイミング
      で deploy してください (in-flight / DLQ のメッセージは
      引き継がれません)
    • 運用スクリプトや docs が旧 Lambda 関数名 / log group 名を参照している
      場合は追随が必要です
    • ecr_name 明示指定 (build once の stage 間共有) は名前が変わらない
      ため再ビルド不要です