0.29.0
·
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
- 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 間共有) は名前が変わらない
ため再ビルド不要です
- SQS 付き handler は queue が作り直されるため、queue が空の