[{"data":1,"prerenderedAt":801},["ShallowReactive",2],{"navigation_docs_en":3,"-en-panduan-pull-push":52,"-en-panduan-pull-push-surround":796},[4,18,35],{"title":5,"path":6,"stem":7,"children":8,"page":17},"Get started","\u002Fen\u002Fmulai","en\u002F1.mulai",[9,13],{"title":10,"path":11,"stem":12},"Installation & quick start","\u002Fen\u002Fmulai\u002Finstalasi","en\u002F1.mulai\u002F1.instalasi",{"title":14,"path":15,"stem":16},"Login & sessions","\u002Fen\u002Fmulai\u002Flogin","en\u002F1.mulai\u002F2.login",false,{"title":19,"path":20,"stem":21,"children":22,"page":17},"Guides","\u002Fen\u002Fpanduan","en\u002F2.panduan",[23,27,31],{"title":24,"path":25,"stem":26},"Project configuration","\u002Fen\u002Fpanduan\u002Fkonfigurasi","en\u002F2.panduan\u002F1.konfigurasi",{"title":28,"path":29,"stem":30},"Multiple profiles","\u002Fen\u002Fpanduan\u002Fmulti-profile","en\u002F2.panduan\u002F2.multi-profile",{"title":32,"path":33,"stem":34},"Pull & push","\u002Fen\u002Fpanduan\u002Fpull-push","en\u002F2.panduan\u002F3.pull-push",{"title":36,"path":37,"stem":38,"children":39,"page":17},"Reference","\u002Fen\u002Freferensi","en\u002F3.referensi",[40,44,48],{"title":41,"path":42,"stem":43},"Command reference","\u002Fen\u002Freferensi\u002Fcommands","en\u002F3.referensi\u002F1.commands",{"title":45,"path":46,"stem":47},"Troubleshooting","\u002Fen\u002Freferensi\u002Ftroubleshooting","en\u002F3.referensi\u002F2.troubleshooting",{"title":49,"path":50,"stem":51},"Release notes","\u002Fen\u002Freferensi\u002Fcatatan-rilis","en\u002F3.referensi\u002F3.catatan-rilis",{"id":53,"title":32,"body":54,"description":789,"extension":790,"links":791,"meta":792,"navigation":793,"path":33,"seo":794,"stem":34,"__hash__":795},"docs_en\u002Fen\u002F2.panduan\u002F3.pull-push.md",{"type":55,"value":56,"toc":777},"minimark",[57,90,95,142,149,196,266,280,284,351,366,375,388,391,418,433,437,445,472,475,478,481,484,490,500,503,509,516,523,529,533,539,576,594,605,610,621,638,653,657,701,720,724,737,743,749,763,773],[58,59,60,64,65,68,69,72,73,77,78,81,82,85,86,89],"p",{},[61,62,63],"code",{},"l pull"," downloads Lambda deployment packages. ",[61,66,67],{},"l push"," packages local files and updates ",[61,70,71],{},"$LATEST"," on existing functions. Authentication remains global; initial targets and region come from ",[74,75,76],"a",{"href":25},"project configuration",". The profile follows ",[61,79,80],{},"--profile",", the project ",[61,83,84],{},"profile"," field, then ",[61,87,88],{},"default",", and is displayed before the preview. The same profile is used for listing, downloading, uploading, and refreshing credentials throughout the command.",[91,92,94],"h2",{"id":93},"usage","Usage",[96,97,102],"pre",{"className":98,"code":99,"language":100,"meta":101,"style":101},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","l login\nl init\nl pull\n# Edit code in lambda\u002F\u003Cfunction-name>\u002F and run a build if needed.\nl push --dry-run\nl push\n","sh","",[61,103,104,112,118,124,130,136],{"__ignoreMap":101},[105,106,109],"span",{"class":107,"line":108},"line",1,[105,110,111],{},"l login\n",[105,113,115],{"class":107,"line":114},2,[105,116,117],{},"l init\n",[105,119,121],{"class":107,"line":120},3,[105,122,123],{},"l pull\n",[105,125,127],{"class":107,"line":126},4,[105,128,129],{},"# Edit code in lambda\u002F\u003Cfunction-name>\u002F and run a build if needed.\n",[105,131,133],{"class":107,"line":132},5,[105,134,135],{},"l push --dry-run\n",[105,137,139],{"class":107,"line":138},6,[105,140,141],{},"l push\n",[58,143,144,145,148],{},"Targets can be one or several function names. Without arguments or selectors, the CLI uses ",[61,146,147],{},"lambda.functionName"," or asks you to choose one function from the project prefix. Use function names without ARNs, aliases, or versions.",[96,150,152],{"className":98,"code":151,"language":100,"meta":101,"style":101},"l pull billing-api\nl push billing-api\nl pull billing-api --region us-east-1\nl pull billing-api billing-worker\nl push billing-api billing-worker --dry-run\nl push billing-api billing-worker\nl pull --prefix billing-\nl push --all\n",[61,153,154,159,164,169,174,179,184,190],{"__ignoreMap":101},[105,155,156],{"class":107,"line":108},[105,157,158],{},"l pull billing-api\n",[105,160,161],{"class":107,"line":114},[105,162,163],{},"l push billing-api\n",[105,165,166],{"class":107,"line":120},[105,167,168],{},"l pull billing-api --region us-east-1\n",[105,170,171],{"class":107,"line":126},[105,172,173],{},"l pull billing-api billing-worker\n",[105,175,176],{"class":107,"line":132},[105,177,178],{},"l push billing-api billing-worker --dry-run\n",[105,180,181],{"class":107,"line":138},[105,182,183],{},"l push billing-api billing-worker\n",[105,185,187],{"class":107,"line":186},7,[105,188,189],{},"l pull --prefix billing-\n",[105,191,193],{"class":107,"line":192},8,[105,194,195],{},"l push --all\n",[197,198,199,212],"table",{},[200,201,202],"thead",{},[203,204,205,209],"tr",{},[206,207,208],"th",{},"Option",[206,210,211],{},"Purpose",[213,214,215,226,236,246,256],"tbody",{},[203,216,217,223],{},[218,219,220],"td",{},[61,221,222],{},"-r, --region \u003Cregion>",[218,224,225],{},"Override the project region",[203,227,228,233],{},[218,229,230],{},[61,231,232],{},"--all",[218,234,235],{},"All targets matching the project prefix, if configured",[203,237,238,243],{},[218,239,240],{},[61,241,242],{},"-p, --prefix \u003Cprefix>",[218,244,245],{},"All targets with this prefix, overriding the project prefix",[203,247,248,253],{},[218,249,250],{},[61,251,252],{},"--dry-run",[218,254,255],{},"Preview without applying changes",[203,257,258,263],{},[218,259,260],{},[61,261,262],{},"-y, --yes",[218,264,265],{},"Skip normal confirmation; conflicts are still rejected",[58,267,268,269,272,273,275,276,279],{},"Dry runs still perform AWS reads. A push dry run validates packages locally without calling the update API to validate IAM or deployment eligibility. A first push without a baseline still requires explicit approval even with ",[61,270,271],{},"--yes",". Selecting a single function from a configured prefix and confirming changes require an interactive terminal; ",[61,274,232],{},"\u002F",[61,277,278],{},"--prefix"," do not open a function picker.",[91,281,283],{"id":282},"multiple-functions-at-once","Multiple functions at once",[197,285,286,299],{},[200,287,288],{},[203,289,290,293,296],{},[206,291,292],{},"Selection",[206,294,295],{},"Pull",[206,297,298],{},"Push",[213,300,301,318,333],{},[203,302,303,312,315],{},[218,304,305,308,309],{},[61,306,307],{},"l pull api worker"," \u002F ",[61,310,311],{},"l push api worker",[218,313,314],{},"Explicit names",[218,316,317],{},"Explicit names; local folders must exist",[203,319,320,324,327],{},[218,321,322],{},[61,323,232],{},[218,325,326],{},"AWS functions in the selected region",[218,328,329,330],{},"Function folders in local ",[61,331,332],{},"lambda\u002F",[203,334,335,340,346],{},[218,336,337],{},[61,338,339],{},"--prefix billing-",[218,341,342,343],{},"All AWS names starting with ",[61,344,345],{},"billing-",[218,347,348,349],{},"All local folders starting with ",[61,350,345],{},[58,352,353,355,356,359,360,362,363,365],{},[61,354,232],{}," respects ",[61,357,358],{},"lambda.prefix"," when configured. Without a configured prefix, it covers all AWS functions for pull or all local function folders for push, even if the config only contains ",[61,361,147],{},". Use ",[61,364,252],{}," to review targets and changes. Bulk push does not fetch its target list from AWS.",[58,367,368,369,371,372,374],{},"Explicit names cannot be combined with ",[61,370,232],{}," or ",[61,373,278],{},". Duplicate names are processed once, in argument order. Selector targets are sorted by name. No matching targets results in an error.",[58,376,377,378,380,381,383,384,387],{},"All targets are checked and packages prepared before one combined confirmation. If any target fails preflight, no function code or baseline changes. Local pull conflicts with ",[61,379,271],{}," also cancel the entire batch. If any push lacks a baseline, confirmation is still required with ",[61,382,271],{},". Push targets with no changes are skipped with status ",[61,385,386],{},"unchanged",".",[58,389,390],{},"After approval, all targets are checked again before the first change, then applied sequentially with further checks per target. One project lock protects the entire operation. ZIPs are stored in the system temp directory to avoid holding every package in memory at once; these files are cleaned up when the command succeeds or fails, including dry runs.",[58,392,393,394,397,398,397,401,397,404,397,406,409,410,413,414,417],{},"The summary reports each function as ",[61,395,396],{},"success",", ",[61,399,400],{},"failed",[61,402,403],{},"skipped",[61,405,386],{},[61,407,408],{},"preview"," for dry runs, or ",[61,411,412],{},"cancelled"," when confirmation is declined. An execution failure stops later targets and returns exit status ",[61,415,416],{},"1",". Successful functions remain applied and their state stays saved. A batch is not an atomic transaction across functions; there is no automatic AWS rollback. Inspect failed targets before retrying only the names that still need work:",[96,419,421],{"className":98,"code":420,"language":100,"meta":101,"style":101},"l push billing-worker billing-cron --dry-run\nl push billing-worker billing-cron\n",[61,422,423,428],{"__ignoreMap":101},[105,424,425],{"class":107,"line":108},[105,426,427],{},"l push billing-worker billing-cron --dry-run\n",[105,429,430],{"class":107,"line":114},[105,431,432],{},"l push billing-worker billing-cron\n",[91,434,436],{"id":435},"folder-structure","Folder structure",[96,438,443],{"className":439,"code":441,"language":442,"meta":101},[440],"language-text","project\u002F\n├── l.config.json\n├── .lignore\n├── .gitignore\n├── lambda\u002F\n│   └── billing-api\u002F\n│       ├── index.js\n│       └── node_modules\u002F\n└── .l\u002F\n    ├── state.json\n    ├── sync.lock\n    └── backups\u002F\n        └── \u003Cfunction>-\u003Ctimestamp>-\u003Cid>\u002F\n            ├── code\u002F\n            └── state.json\n","text",[61,444,441],{"__ignoreMap":101},[58,446,447,448,451,452,455,456,459,460,463,464,467,468,471],{},"The project root is the location of the nearest ",[61,449,450],{},"l.config.json",". Commands from subfolders still read\u002Fwrite ",[61,453,454],{},"lambda\u002F\u003Cname>\u002F"," at the project root. Project ",[61,457,458],{},".l\u002F"," stores state, a temporary lock, and backups; ",[61,461,462],{},"~\u002F.l\u002F"," still stores global authentication. The ",[61,465,466],{},"\u002F.l\u002F"," rule is added to ",[61,469,470],{},".gitignore"," before changes are applied.",[58,473,474],{},"State binds the function folder to its full ARN, including account and region. Sync is rejected if the login\u002Fregion points to a different identity. Use the original login\u002Fregion or a separate project for another account\u002Fregion.",[91,476,295],{"id":477},"pull",[58,479,480],{},"The downloaded package contains the code deployed to AWS. It may be a bundle or binary; the original TypeScript source and repository are not always available.",[58,482,483],{},"The CLI verifies the package SHA-256 checksum and ZIP entry CRCs. Path traversal, duplicate or case-colliding names, symlinks, special files, and encrypted ZIPs are rejected. Packages are staged before replacing the destination folder.",[58,485,486,487,489],{},"The preview shows added, changed, and removed files. If local changes exist since the last sync, the CLI asks for replacement confirmation; ",[61,488,271],{}," cannot bypass this conflict. The entire old folder is backed up before installing the new package. Installation\u002Fstate failures trigger an attempt to restore the old folder.",[58,491,492,493,496,497,499],{},"Pull does not merge. Extra local files in the function folder, including files excluded by ",[61,494,495],{},".lignore",", may disappear from the active folder but remain in the backup. Cancellation leaves code and baselines unchanged, although an empty ",[61,498,458],{}," folder may remain from creating the lock.",[91,501,298],{"id":502},"push",[58,504,505,506,508],{},"The AWS revision is compared with the last pull\u002Fpush result. If it differs, push stops and asks you to retrieve and review the latest remote code. ",[61,507,271],{}," does not bypass this check. A first push compares local files with the remote package and asks for target confirmation without a saved baseline.",[58,510,511,512,515],{},"The function folder contents go directly at the ZIP root. Before uploading, the local snapshot and remote metadata are checked again. The update request includes ",[61,513,514],{},"RevisionId"," to prevent remote changes between the check and upload.",[58,517,518,519,522],{},"The CLI shows the account, region, ARN, file changes, and ZIP size, then asks for confirmation. After upload, it waits up to 120 seconds per function and verifies the checksum and ",[61,520,521],{},"Successful"," status before advancing state.",[58,524,525,526,528],{},"Failed uploads, timeouts, or updates overwritten by another process do not advance state. AWS may have accepted the code when a connection drops; check AWS status before retrying. Invocations without a version\u002Falias may use ",[61,527,71],{},". Push does not publish a version, move an alias, or change environment variables, runtime, role, memory, layers, or other function configuration.",[91,530,532],{"id":531},"packaging-and-ignore-rules","Packaging and ignore rules",[58,534,535,536,538],{},"Create ",[61,537,495],{}," at the project root. Patterns follow gitignore syntax and are relative to each function's code folder:",[96,540,544],{"className":541,"code":542,"language":543,"meta":101,"style":101},"language-gitignore shiki shiki-themes material-theme-lighter material-theme material-theme-palenight",".env\n.env.*\n*.test.js\ntests\u002F\ncoverage\u002F\n*.map\n","gitignore",[61,545,546,551,556,561,566,571],{"__ignoreMap":101},[105,547,548],{"class":107,"line":108},[105,549,550],{},".env\n",[105,552,553],{"class":107,"line":114},[105,554,555],{},".env.*\n",[105,557,558],{"class":107,"line":120},[105,559,560],{},"*.test.js\n",[105,562,563],{"class":107,"line":126},[105,564,565],{},"tests\u002F\n",[105,567,568],{"class":107,"line":132},[105,569,570],{},"coverage\u002F\n",[105,572,573],{"class":107,"line":138},[105,574,575],{},"*.map\n",[58,577,578,397,581,397,584,586,587,589,590,593],{},[61,579,580],{},".git",[61,582,583],{},".l",[61,585,495],{},", and ",[61,588,450],{}," are always excluded at every level. Runtime dependencies such as ",[61,591,592],{},"node_modules"," are included unless ignored. Other files, including dotfiles, may be uploaded; configure patterns as needed.",[58,595,596,597,600,601,604],{},"The CLI does not install dependencies, build, or run project scripts. Prepare deployment-ready output before pushing. File permissions are normalized to ",[61,598,599],{},"0644",", or ",[61,602,603],{},"0755"," for executables. Empty directories are omitted from pushed ZIPs.",[606,607,609],"h3",{"id":608},"windows-and-executable-permissions","Windows and executable permissions",[611,612,613,617,618,387],"note",{},[614,615,616],"strong",{},"Upcoming release — not available in v2.0.0."," The deployment mode preservation described below is an unreleased fix. See the ",[74,619,620],{"href":50},"release notes",[58,622,623,624,275,627,630,631,371,633,635,636,387],{},"Windows does not preserve POSIX executable bits through ",[61,625,626],{},"stat",[61,628,629],{},"chmod"," as Linux does. On Windows, the CLI preserves ",[61,632,603],{},[61,634,599],{}," from the last baseline for the same filename, including after editing its contents. A first push without a baseline takes modes from the remote package. New files use ",[61,637,599],{},[58,639,640,641,644,645,648,649,652],{},"To add or rename an executable such as ",[61,642,643],{},"bootstrap",", prepare the package on Linux\u002FWSL or macOS and set ",[61,646,647],{},"chmod +x"," before pushing. Do not edit ",[61,650,651],{},".l\u002Fstate.json"," to set permissions. On Linux\u002FmacOS, local permission changes still appear in the preview and upload package.",[91,654,656],{"id":655},"limits-and-permissions","Limits and permissions",[658,659,660,664,667,670,673,676],"ul",{},[661,662,663],"li",{},"Existing ZIP functions only; container images and function creation are not supported.",[661,665,666],{},"Direct uploads are limited to 50 MiB compressed; S3 uploads are not supported.",[661,668,669],{},"Each package is limited to 250 MiB uncompressed and 10,000 entries. AWS includes layers in its deployment limit, so final validation still happens on AWS.",[661,671,672],{},"Symlinks that are not ignored are rejected, including dependency symlinks.",[661,674,675],{},"No package re-signing, automatic merge, or AWS rollback.",[661,677,678,679,682,683,686,687,275,689,691,692,695,696,275,698,700],{},"Pull requires ",[61,680,681],{},"lambda:GetFunction",". Push also requires ",[61,684,685],{},"lambda:UpdateFunctionCode",". Pull with ",[61,688,232],{},[61,690,278],{}," and selecting one function from a configured prefix require ",[61,693,694],{},"lambda:ListFunctions",". Push with ",[61,697,232],{},[61,699,278],{}," selects local folders and does not require listing permission.",[58,702,703,704,397,710,586,715,387],{},"References: ",[74,705,709],{"href":706,"rel":707},"https:\u002F\u002Fdocs.aws.amazon.com\u002Flambda\u002Flatest\u002Fapi\u002FAPI_GetFunction.html",[708],"nofollow","GetFunction",[74,711,714],{"href":712,"rel":713},"https:\u002F\u002Fdocs.aws.amazon.com\u002Flambda\u002Flatest\u002Fapi\u002FAPI_UpdateFunctionCode.html",[708],"UpdateFunctionCode",[74,716,719],{"href":717,"rel":718},"https:\u002F\u002Fdocs.aws.amazon.com\u002Flambda\u002Flatest\u002Fdg\u002Fgettingstarted-limits.html",[708],"Lambda quotas",[91,721,723],{"id":722},"recovery","Recovery",[58,725,726,729,730,733,734,387],{},[614,727,728],{},"Local changes overwritten:"," compare ",[61,731,732],{},"code\u002F"," in the backup with the current code, then copy back any changes you need. Keep the latest state as the remote baseline; review the merge with ",[61,735,736],{},"l push --dry-run",[58,738,739,742],{},[614,740,741],{},"Revision conflict:"," back up local work, pull the latest remote, then merge changes from the backup. Do not delete state to bypass conflicts.",[58,744,745,748],{},[614,746,747],{},"AWS update succeeded but state could not be saved:"," fix the disk problem, back up local code, then pull to align code and revision.",[58,750,751,754,755,758,759,762],{},[614,752,753],{},"Unexpected process termination:"," check the PID and time in ",[61,756,757],{},".l\u002Fsync.lock",". Only remove a stale lock after confirming the process has stopped. Inspect backups and ",[61,760,761],{},"pull-stage-*"," if termination happened during folder replacement. Invalid state can be restored from an appropriate backup before syncing again.",[58,764,765,766,769,770,387],{},"See ",[74,767,768],{"href":46},"troubleshooting"," and the ",[74,771,772],{"href":42},"command reference",[774,775,776],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":101,"searchDepth":114,"depth":114,"links":778},[779,780,781,782,783,784,787,788],{"id":93,"depth":114,"text":94},{"id":282,"depth":114,"text":283},{"id":435,"depth":114,"text":436},{"id":477,"depth":114,"text":295},{"id":502,"depth":114,"text":298},{"id":531,"depth":114,"text":532,"children":785},[786],{"id":608,"depth":120,"text":609},{"id":655,"depth":114,"text":656},{"id":722,"depth":114,"text":723},"Download and update code for one or many Lambda functions.","md",null,{},true,{"title":32,"description":789},"ivkbAKnk7bOgFwtibilyvn8N3qMxpgHWKSY4nfXY3mU",[797,799],{"title":28,"path":29,"stem":30,"description":798,"children":-1},"Keep multiple AWS logins and select a profile for each project.",{"title":41,"path":42,"stem":43,"description":800,"children":-1},"CLI l syntax, options, configuration priority, and exit status.",1790260505391]