[{"data":1,"prerenderedAt":1244},["ShallowReactive",2],{"navigation_docs":3,"-engineering-deployment-capability-exchange":279,"-engineering-deployment-capability-exchange-surround":1240},[4,8,67,96,162,186,199,216,275],{"title":5,"path":6,"stem":7},"Introduction","\u002Fintroduction","0.introduction",{"title":9,"path":10,"stem":11,"children":12,"page":62},"Company","\u002Fcompany","1.company",[13,17,21,25,29,33,37,41,45,49,63],{"title":14,"path":15,"stem":16},"About","\u002Fcompany\u002Fabout","1.company\u002F0.about",{"title":18,"path":19,"stem":20},"Values","\u002Fcompany\u002Fvalues","1.company\u002F1.values",{"title":22,"path":23,"stem":24},"Communication","\u002Fcompany\u002Fcommunication","1.company\u002Fcommunication",{"title":26,"path":27,"stem":28},"Competition","\u002Fcompany\u002Fcompetition","1.company\u002Fcompetition",{"title":30,"path":31,"stem":32},"Hybrid Working","\u002Fcompany\u002Fhybrid-working","1.company\u002Fhybrid-working",{"title":34,"path":35,"stem":36},"Manchester Office","\u002Fcompany\u002Foffice","1.company\u002Foffice",{"title":38,"path":39,"stem":40},"Operations","\u002Fcompany\u002Foperations","1.company\u002Foperations",{"title":42,"path":43,"stem":44},"Policies","\u002Fcompany\u002Fpolicies","1.company\u002Fpolicies",{"title":46,"path":47,"stem":48},"Product Strategy","\u002Fcompany\u002Fproduct-strategy","1.company\u002Fproduct-strategy",{"title":50,"path":51,"stem":52,"children":53,"page":62},"Products","\u002Fcompany\u002Fproducts","1.company\u002Fproducts",[54,58],{"title":55,"path":56,"stem":57},"Capability Exchange","\u002Fcompany\u002Fproducts\u002Fcapability-exchange","1.company\u002Fproducts\u002Fcapability-exchange",{"title":59,"path":60,"stem":61},"ESProfiler Platform","\u002Fcompany\u002Fproducts\u002Fesprofiler","1.company\u002Fproducts\u002Fesprofiler",false,{"title":64,"path":65,"stem":66},"Security","\u002Fcompany\u002Fsecurity","1.company\u002Fsecurity",{"title":68,"path":69,"stem":70,"children":71,"page":62},"People Ops","\u002Fpeople-ops","2.people-ops",[72,76,80,84,88,92],{"title":73,"path":74,"stem":75},"Compensation","\u002Fpeople-ops\u002Fcompensation","2.people-ops\u002Fcompensation",{"title":77,"path":78,"stem":79},"Education","\u002Fpeople-ops\u002Feducation","2.people-ops\u002Feducation",{"title":81,"path":82,"stem":83},"Expenses","\u002Fpeople-ops\u002Fexpenses","2.people-ops\u002Fexpenses",{"title":85,"path":86,"stem":87},"Holiday & Leave","\u002Fpeople-ops\u002Fleave","2.people-ops\u002Fleave",{"title":89,"path":90,"stem":91},"Onboarding","\u002Fpeople-ops\u002Fonboarding","2.people-ops\u002Fonboarding",{"title":93,"path":94,"stem":95},"Recruitment","\u002Fpeople-ops\u002Frecruitment","2.people-ops\u002Frecruitment",{"title":97,"path":98,"stem":99,"children":100,"page":62},"Engineering","\u002Fengineering","3.engineering",[101,105,109,113,125,146,150,154,158],{"title":102,"path":103,"stem":104},"Development Setup","\u002Fengineering\u002Fdevelopment-setup","3.engineering\u002F1.development-setup",{"title":106,"path":107,"stem":108},"Contributing","\u002Fengineering\u002Fcontributing","3.engineering\u002Fcontributing",{"title":110,"path":111,"stem":112},"Production Database","\u002Fengineering\u002Fdatabase-connection","3.engineering\u002Fdatabase-connection",{"title":114,"path":115,"stem":116,"children":117},"Deployment","\u002Fengineering\u002Fdeployment","3.engineering\u002Fdeployment",[118,121],{"title":55,"path":119,"stem":120},"\u002Fengineering\u002Fdeployment\u002Fcapability-exchange","3.engineering\u002Fdeployment\u002Fcapability-exchange",{"title":122,"path":123,"stem":124},"Platform","\u002Fengineering\u002Fdeployment\u002Fplatform","3.engineering\u002Fdeployment\u002Fplatform",{"title":126,"path":127,"stem":128,"children":129,"page":62},"Github","\u002Fengineering\u002Fgithub","3.engineering\u002Fgithub",[130,134,138,142],{"title":131,"path":132,"stem":133},"Packages","\u002Fengineering\u002Fgithub\u002Fpackages","3.engineering\u002Fgithub\u002Fpackages",{"title":135,"path":136,"stem":137},"Personal Access Token","\u002Fengineering\u002Fgithub\u002Fpersonal-access-token","3.engineering\u002Fgithub\u002Fpersonal-access-token",{"title":139,"path":140,"stem":141},"Troubleshooting","\u002Fengineering\u002Fgithub\u002Ftroubleshooting","3.engineering\u002Fgithub\u002Ftroubleshooting",{"title":143,"path":144,"stem":145},"Workflows","\u002Fengineering\u002Fgithub\u002Fworkflows","3.engineering\u002Fgithub\u002Fworkflows",{"title":147,"path":148,"stem":149},"Platform Ops","\u002Fengineering\u002Fplatform-ops","3.engineering\u002Fplatform-ops",{"title":151,"path":152,"stem":153},"Project Management","\u002Fengineering\u002Fproject-management","3.engineering\u002Fproject-management",{"title":155,"path":156,"stem":157},"Releases","\u002Fengineering\u002Frelease","3.engineering\u002Frelease",{"title":159,"path":160,"stem":161},"Tools","\u002Fengineering\u002Ftools","3.engineering\u002Ftools",{"title":163,"path":164,"stem":165,"children":166,"page":62},"Design","\u002Fdesign","4.design",[167,171,175,179,182],{"title":168,"path":169,"stem":170},"Branding","\u002Fdesign\u002Fbranding","4.design\u002Fbranding",{"title":172,"path":173,"stem":174},"Design Thinking","\u002Fdesign\u002Fdesign-thinking","4.design\u002Fdesign-thinking",{"title":176,"path":177,"stem":178},"Figma","\u002Fdesign\u002Ffigma-structure","4.design\u002Ffigma-structure",{"title":159,"path":180,"stem":181},"\u002Fdesign\u002Ftools","4.design\u002Ftools",{"title":183,"path":184,"stem":185},"Customer Success","\u002Fdesign\u002Fworking-with-customers","4.design\u002Fworking-with-customers",{"title":187,"path":188,"stem":189,"children":190,"page":62},"Sales","\u002Fsales","4.sales",[191,195],{"title":192,"path":193,"stem":194},"Customer Onboarding","\u002Fsales\u002Fonboarding","4.sales\u002Fonboarding",{"title":196,"path":197,"stem":198},"Sales Tools","\u002Fsales\u002Ftools","4.sales\u002Ftools",{"title":200,"path":201,"stem":202,"children":203,"page":62},"Marketing","\u002Fmarketing","5.marketing",[204,208,212],{"title":205,"path":206,"stem":207},"Content","\u002Fmarketing\u002Fcontent","5.marketing\u002Fcontent",{"title":209,"path":210,"stem":211},"Messaging","\u002Fmarketing\u002Fmessaging","5.marketing\u002Fmessaging",{"title":213,"path":214,"stem":215},"Website","\u002Fmarketing\u002Fwebsite","5.marketing\u002Fwebsite",{"title":217,"path":218,"stem":219,"children":220,"page":62},"AI & Data Ops","\u002Fdata-ops","6.data-ops",[221,229,233,258,271],{"title":55,"path":222,"stem":223,"children":224,"page":62},"\u002Fdata-ops\u002Fcapability-exchange","6.data-ops\u002FCapability Exchange",[225],{"title":226,"path":227,"stem":228},"Leaderboard Calculation","\u002Fdata-ops\u002Fcapability-exchange\u002Fleaderboard-calculation","6.data-ops\u002FCapability Exchange\u002Fleaderboard-calculation",{"title":230,"path":231,"stem":232},"Account Portal (CAS)","\u002Fdata-ops\u002Faccount-portal","6.data-ops\u002Faccount-portal",{"title":234,"path":235,"stem":236,"children":237,"page":62},"Data Management","\u002Fdata-ops\u002Fdata-management","6.data-ops\u002Fdata-management",[238,242,246,250,254],{"title":239,"path":240,"stem":241},"Adding Products","\u002Fdata-ops\u002Fdata-management\u002Fadding-products","6.data-ops\u002Fdata-management\u002Fadding-products",{"title":243,"path":244,"stem":245},"Adding Vendors","\u002Fdata-ops\u002Fdata-management\u002Fadding-vendors","6.data-ops\u002Fdata-management\u002Fadding-vendors",{"title":247,"path":248,"stem":249},"Framework Mapping","\u002Fdata-ops\u002Fdata-management\u002Fframework-mapping","6.data-ops\u002Fdata-management\u002Fframework-mapping",{"title":251,"path":252,"stem":253},"Refreshing Vendors","\u002Fdata-ops\u002Fdata-management\u002Frefreshing-vendors","6.data-ops\u002Fdata-management\u002Frefreshing-vendors",{"title":255,"path":256,"stem":257},"Reviewing Draft Vendors","\u002Fdata-ops\u002Fdata-management\u002Freviewing-draft-vendors","6.data-ops\u002Fdata-management\u002Freviewing-draft-vendors",{"title":259,"path":260,"stem":261,"children":262,"page":62},"LLM Ops","\u002Fdata-ops\u002Fllm-ops","6.data-ops\u002Fllm-ops",[263,267],{"title":264,"path":265,"stem":266},"Agents","\u002Fdata-ops\u002Fllm-ops\u002Fagents","6.data-ops\u002Fllm-ops\u002F1.agents",{"title":268,"path":269,"stem":270},"ESPi Architecture & Query Flow","\u002Fdata-ops\u002Fllm-ops\u002Fespi-architecture","6.data-ops\u002Fllm-ops\u002F2.espi-architecture",{"title":272,"path":273,"stem":274},"Message Queues","\u002Fdata-ops\u002Fmessage-queues","6.data-ops\u002Fmessage-queues",{"title":276,"path":277,"stem":278},"Glossary","\u002Fglossary","glossary",{"id":280,"title":55,"body":281,"description":1233,"extension":1234,"links":1235,"meta":1236,"navigation":1237,"path":119,"seo":1238,"stem":120,"__hash__":1239},"docs\u002F3.engineering\u002Fdeployment\u002Fcapability-exchange.md",{"type":282,"value":283,"toc":1216},"minimark",[284,288,304,309,331,335,372,376,408,412,418,423,437,455,459,721,725,728,778,782,862,866,928,931,934,937,1041,1045,1055,1073,1212],[285,286,287],"p",{},"This guide walks you through deploying an updated version of the Capability Exchange (PCX) service in production using the AWS Console. No technical background required — just follow each step in order.",[289,290,292,293,298,299,303],"callout",{"icon":291},"i-lucide-info","If your release includes database schema changes, complete the ",[294,295,297],"a",{"href":296},"#database-migrations-if-required","database migrations"," ",[300,301,302],"strong",{},"before"," updating the ECS service.",[305,306,308],"h2",{"id":307},"prerequisites","Prerequisites",[310,311,312,320],"ul",{},[313,314,315,316,319],"li",{},"You have access to the ",[300,317,318],{},"AWS Console"," (via the ESProfiler Secured Workspace or direct login)",[313,321,322,323,326,327,330],{},"You are logged in as ",[300,324,325],{},"ESPROFILER"," in the ",[300,328,329],{},"Europe (London)"," region",[305,332,334],{"id":333},"part-1-navigate-to-ecs","Part 1: Navigate to ECS",[336,337,338,344,358,364],"ol",{},[313,339,340,341,343],{},"Open the ",[300,342,318],{},".",[313,345,346,347,353,354,357],{},"In the search bar at the top, type ",[300,348,349],{},[350,351,352],"code",{},"ECS"," and select ",[300,355,356],{},"Elastic Container Service"," from the results.",[313,359,360,361,343],{},"In the left-hand menu, click ",[300,362,363],{},"Clusters",[313,365,366,367,343],{},"You will see a list of clusters. Click on ",[300,368,369],{},[350,370,371],{},"esp-infrastructure",[305,373,375],{"id":374},"part-2-find-the-pcx-service","Part 2: Find the PCX Service",[336,377,379,389,398],{"start":378},5,[313,380,381,382,384,385,388],{},"Inside the ",[350,383,371],{}," cluster, click on the ",[300,386,387],{},"Services"," tab.",[313,390,391,392,397],{},"Find and click on the service named ",[300,393,394],{},[350,395,396],{},"esp-pcx-service-2bjz1boz"," (or the current PCX service listed).",[313,399,400,401,404,405,343],{},"You are now on the service's ",[300,402,403],{},"Health and metrics"," page. Confirm the status shows ",[300,406,407],{},"Active",[305,409,411],{"id":410},"part-3-database-migrations-if-required","Part 3: Database Migrations (if required)",[285,413,414,415,417],{},"If the release includes Prisma schema changes, run migrations against the production PCX database ",[300,416,302],{}," deploying the new service revision. The new container image will expect the updated schema to already be in place.",[419,420,422],"h3",{"id":421},"where-migrations-run-from","Where migrations run from",[285,424,425,426,429,430,433,434,343],{},"Production RDS lives in a ",[300,427,428],{},"private AWS network"," and is not reachable directly from your laptop. You need ",[300,431,432],{},"PuTTY"," (or an equivalent SSH client) to open a tunnel through the AWS jump box before you can connect. Full setup is documented in ",[294,435,110],{"href":436},"\u002F3.engineering\u002Fdatabase-connection",[285,438,439,440,443,444,446,447,450,451,454],{},"Migrations are ",[300,441,442],{},"not"," applied by deploying a new ECS task. The live container does ",[300,445,442],{}," run migrations on startup. The migration is triggered by running a command on ",[300,448,449],{},"your machine",", using the migration files in your ",[300,452,453],{},"local PCX checkout"," of the release branch. The new container image does not need to be live in AWS first — you are pushing schema changes to the database ahead of the code deployment.",[419,456,458],{"id":457},"migration-workflow","Migration workflow",[336,460,461,471,492,506,633,659,683,710],{},[313,462,463,466,467,470],{},[300,464,465],{},"Check out the release"," — ensure your local PCX repo includes the migration files for this release. This should be the ",[350,468,469],{},"main"," branch.",[313,472,473,476,477,480,481,484,485,487,488],{},[300,474,475],{},"Open an SSH tunnel in PuTTY"," — forward local port ",[350,478,479],{},"15432"," to the PCX RDS endpoint on port ",[350,482,483],{},"5432"," (see ",[294,486,110],{"href":436}," if you have not done this before), then keep the session open.",[289,489,491],{"icon":490},"i-lucide-triangle-alert","Keep the PuTTY session open for the entire migration. The tunnel only works while the connection is active.",[313,493,494,497,498,501,502,505],{},[300,495,496],{},"Retrieve credentials"," — in AWS RDS (",[350,499,500],{},"eu-west-2","), open the PCX PostgreSQL instance, follow the linked secret in ",[300,503,504],{},"Configuration",", and copy the username and password from Secrets Manager. Do not store these permanently — they rotate regularly.",[313,507,508,511,512,515,516,519,520,523,524,527,528,538,540,541,559,561,562,565,566,565,569,572,573,586,588,589,591,592],{},[300,509,510],{},"Point your local environment at production"," — PCX uses Prisma, which reads the database connection from a ",[350,513,514],{},"DATABASE_URL"," environment variable. With the SSH tunnel from step 2 running, use ",[350,517,518],{},"127.0.0.1:15432"," as the host.",[521,522],"br",{},"In the PCX repository, open (or create) a ",[350,525,526],{},".env"," file in the project root and set:",[529,530,536],"pre",{"className":531,"code":533,"language":534,"meta":535},[532],"language-text","DATABASE_URL=\"postgresql:\u002F\u002F\u003Cusername>:\u003Cpassword>@127.0.0.1:15432\u002F\u003Cdatabase_name>\"\n","text","",[350,537,533],{"__ignoreMap":535},[521,539],{},"Replace:",[310,542,543,553],{},[313,544,545,548,549,552],{},[350,546,547],{},"\u003Cusername>"," and ",[350,550,551],{},"\u003Cpassword>"," — from Secrets Manager (step 3)",[313,554,555,558],{},[350,556,557],{},"\u003Cdatabase_name>"," — the database name shown in the RDS instance or secret (often the same as the instance identifier)",[521,560],{},"If the password contains special characters (e.g. ",[350,563,564],{},"@",", ",[350,567,568],{},"#",[350,570,571],{},"\u002F","), URL-encode them in the connection string.",[289,574,575,576,579,580,582,583,585],{"icon":490},"This points your local tooling at ",[300,577,578],{},"production",". Do not commit ",[350,581,526],{}," with production credentials, and revert or remove the production ",[350,584,514],{}," once migrations are complete.",[521,587],{},"To avoid editing ",[350,590,526],{}," permanently, you can set the variable for a single command instead:",[529,593,597],{"className":594,"code":595,"language":596,"meta":535,"style":535},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","DATABASE_URL=\"postgresql:\u002F\u002F\u003Cusername>:\u003Cpassword>@127.0.0.1:15432\u002F\u003Cdatabase_name>\" npx prisma migrate deploy\n","bash",[350,598,599],{"__ignoreMap":535},[600,601,604,607,611,614,618,620,624,627,630],"span",{"class":602,"line":603},"line",1,[600,605,514],{"class":606},"sTEyZ",[600,608,610],{"class":609},"sMK4o","=",[600,612,613],{"class":609},"\"",[600,615,617],{"class":616},"sfazB","postgresql:\u002F\u002F\u003Cusername>:\u003Cpassword>@127.0.0.1:15432\u002F\u003Cdatabase_name>",[600,619,613],{"class":609},[600,621,623],{"class":622},"sBMFI"," npx",[600,625,626],{"class":616}," prisma",[600,628,629],{"class":616}," migrate",[600,631,632],{"class":616}," deploy\n",[313,634,635,638,639,656,658],{},[300,636,637],{},"Confirm the connection"," — before running migrations:",[529,640,642],{"className":594,"code":641,"language":596,"meta":535,"style":535},"npx prisma migrate status\n",[350,643,644],{"__ignoreMap":535},[600,645,646,649,651,653],{"class":602,"line":603},[600,647,648],{"class":622},"npx",[600,650,626],{"class":616},[600,652,629],{"class":616},[600,654,655],{"class":616}," status\n",[521,657],{},"This should connect successfully and list any pending migrations.",[313,660,661,664,665,680,682],{},[300,662,663],{},"Run migrations"," — from the PCX project locally:",[529,666,668],{"className":594,"code":667,"language":596,"meta":535,"style":535},"npx prisma migrate deploy\n",[350,669,670],{"__ignoreMap":535},[600,671,672,674,676,678],{"class":602,"line":603},[600,673,648],{"class":622},[600,675,626],{"class":616},[600,677,629],{"class":616},[600,679,632],{"class":616},[521,681],{},"Review pending migrations first and confirm they match what is in the release.",[313,684,685,688,689,703,705,706,709],{},[300,686,687],{},"Verify"," — confirm migrations are complete:",[529,690,691],{"className":594,"code":641,"language":596,"meta":535,"style":535},[350,692,693],{"__ignoreMap":535},[600,694,695,697,699,701],{"class":602,"line":603},[600,696,648],{"class":622},[600,698,626],{"class":616},[600,700,629],{"class":616},[600,702,655],{"class":616},[521,704],{},"This should report ",[300,707,708],{},"Database schema is up to date!"," before proceeding to the ECS deployment below.",[313,711,712,715,716,718,719,343],{},[300,713,714],{},"Close the tunnel"," — once migrations are complete and verified, close the PuTTY session and revert or remove the production ",[350,717,514],{}," from your local ",[350,720,526],{},[305,722,724],{"id":723},"part-4-create-a-new-task-definition-revision","Part 4: Create a New Task Definition Revision",[285,726,727],{},"Before updating the service, you need to create a new version (revision) of the task definition with the latest image.",[336,729,731,736,744,753,767],{"start":730},9,[313,732,360,733,343],{},[300,734,735],{},"Task definitions",[313,737,738,739,343],{},"In the list of task definitions, click on ",[300,740,741],{},[350,742,743],{},"esp-pcx",[313,745,746,747,752],{},"You will see a list of revisions (e.g., esp-pcx:17, esp-pcx:16, etc.). Click the ",[300,748,749],{},[350,750,751],{},"Create new revision"," button in the top right.",[313,754,755,756,759,760,763,764,343],{},"On the new revision form, the container image should already point to the latest image (",[350,757,758],{},"esp-pcx:latest","). ",[300,761,762],{},"Do not change anything"," — just scroll to the bottom and click ",[300,765,766],{},"Create",[313,768,769,770,773,774,777],{},"You should see a green confirmation banner: ",[300,771,772],{},"\"Task definition successfully created\""," (e.g., ",[350,775,776],{},"esp-pcx:18",").",[305,779,781],{"id":780},"part-5-update-the-service-to-use-the-new-revision","Part 5: Update the Service to Use the New Revision",[336,783,785,807,815,847,856],{"start":784},14,[313,786,787,788],{},"Navigate back to the PCX service:\n",[310,789,790],{},[313,791,792,793,795,796,800,801,800,803],{},"Click ",[300,794,363],{}," in the left menu → ",[300,797,798],{},[350,799,371],{}," → ",[300,802,387],{},[300,804,805],{},[350,806,396],{},[313,808,809,810,752],{},"Click the orange ",[300,811,812],{},[350,813,814],{},"Update service",[313,816,817,818,821,822],{},"On the update screen, under ",[300,819,820],{},"Deployment configuration",":\n",[310,823,824,833,844],{},[313,825,826,827,830,831],{},"Confirm the ",[300,828,829],{},"Task definition family"," is set to ",[350,832,743],{},[313,834,835,836,839,840,843],{},"Set the ",[300,837,838],{},"Task definition revision"," to the latest revision number (e.g., ",[350,841,842],{},"18 (LATEST)",")",[313,845,846],{},"Leave all other settings as they are",[313,848,849,850,855],{},"Scroll to the bottom and click the orange ",[300,851,852],{},[350,853,854],{},"Update"," button.",[313,857,858,859],{},"You should see a green banner: ",[300,860,861],{},"\"Service updated: esp-infrastructure:esp-pcx-service-2bjz1boz\"",[305,863,865],{"id":864},"part-6-confirm-the-deployment","Part 6: Confirm the Deployment",[336,867,869,876,891,904],{"start":868},19,[313,870,871,872,875],{},"You will be taken to the ",[300,873,874],{},"Tasks"," tab of the service.",[313,877,878,879,882,883,886,887,890],{},"Watch the task list — you should briefly see ",[300,880,881],{},"2 tasks",": the old one (",[350,884,885],{},"Running",") and the new one (",[350,888,889],{},"Provisioning","). The old task will stop once the new one is healthy.",[313,892,893,894,897,898,900,901,343],{},"Once complete, you should see ",[300,895,896],{},"1 task"," with status ",[300,899,885],{}," and the load balancer showing ",[300,902,903],{},"Healthy",[313,905,906,907,909,910],{},"On the ",[300,908,403],{}," tab, confirm:\n",[310,911,912,921],{},[313,913,914,917,918],{},[300,915,916],{},"Deployment status"," = ",[350,919,920],{},"Success",[313,922,923,917,926],{},[300,924,925],{},"Target health",[350,927,903],{},[285,929,930],{},"✅ The PCX service has been successfully updated in production.",[932,933],"hr",{},[305,935,139],{"id":936},"troubleshooting",[938,939,940,953],"table",{},[941,942,943],"thead",{},[944,945,946,950],"tr",{},[947,948,949],"th",{},"Issue",[947,951,952],{},"What to check",[954,955,956,976,999,1009,1021,1029],"tbody",{},[944,957,958,968],{},[959,960,961,964,965],"td",{},[350,962,963],{},"migrate deploy"," fails with ",[300,966,967],{},"P3005",[959,969,970,971,975],{},"Database has schema but no Prisma migration history — see ",[294,972,974],{"href":973},"#baselining-an-existing-production-database-p3005","baselining"," below. Production has already been baselined; this should only recur after a snapshot restore or similar.",[944,977,978,987],{},[959,979,980,964,983,986],{},[350,981,982],{},"migrate dev",[300,984,985],{},"P3006"," \u002F shadow database errors",[959,988,989,990,992,993,995,996,998],{},"Do ",[300,991,442],{}," use ",[350,994,982],{}," on production; use ",[350,997,963],{}," only.",[944,1000,1001,1006],{},[959,1002,1003,1004],{},"Connection refused on ",[350,1005,518],{},[959,1007,1008],{},"PuTTY tunnel is not open, or local port forwarding is misconfigured.",[944,1010,1011,1014],{},[959,1012,1013],{},"Task stays in \"Provisioning\" for a long time",[959,1015,1016,1017,1020],{},"Click the ",[300,1018,1019],{},"Events"," tab to see deployment messages",[944,1022,1023,1026],{},[959,1024,1025],{},"Deployment status shows \"In progress\"",[959,1027,1028],{},"Wait 2–3 minutes and refresh — this is normal during rollover",[944,1030,1031,1034],{},[959,1032,1033],{},"Load balancer shows \"Unhealthy\"",[959,1035,1036,1037,1040],{},"Check the ",[300,1038,1039],{},"Logs"," tab on the service for container errors",[419,1042,1044],{"id":1043},"baselining-an-existing-production-database-p3005","Baselining an existing production database (P3005)",[285,1046,1047,1048,548,1052,998],{},"Production PCX has already been baselined. You should not need this for routine releases — use the ",[294,1049,1051],{"href":1050},"#migration-workflow","migration workflow",[350,1053,1054],{},"npx prisma migrate deploy",[285,1056,1057,1058,964,1060,1062,1063,1066,1067,343],{},"Use this if ",[350,1059,963],{},[300,1061,967],{}," (\"database schema is not empty\"), typically after restoring from an RDS snapshot or bringing a database online that was created with ",[350,1064,1065],{},"prisma db push"," rather than migrations. See also ",[294,1068,1072],{"href":1069,"rel":1070},"https:\u002F\u002Fwww.prisma.io\u002Fdocs\u002Form\u002Fprisma-migrate\u002Fworkflows\u002Fbaselining",[1071],"nofollow","Prisma baselining",[336,1074,1075,1084,1110,1140,1177,1196,1207],{},[313,1076,1077,1078,1080,1081,1083],{},"Complete steps 1–5 of the ",[294,1079,1051],{"href":1050}," (tunnel, credentials, ",[350,1082,514],{},", confirm connection).",[313,1085,1086,1089,1090,1104,1106,1107,343],{},[300,1087,1088],{},"List pending migrations",":",[529,1091,1092],{"className":594,"code":641,"language":596,"meta":535,"style":535},[350,1093,1094],{"__ignoreMap":535},[600,1095,1096,1098,1100,1102],{"class":602,"line":603},[600,1097,648],{"class":622},[600,1099,626],{"class":616},[600,1101,629],{"class":616},[600,1103,655],{"class":616},[521,1105],{},"Note every migration folder listed as ",[300,1108,1109],{},"not yet applied",[313,1111,1112,1115,1116,1118,1119,1122,1123],{},[300,1113,1114],{},"Decide which migrations the database already has"," — for each pending migration, check whether its schema changes are already live (inspect via your client on ",[350,1117,518],{},", or read ",[350,1120,1121],{},"prisma\u002Fmigrations\u002F\u003Cfolder>\u002Fmigration.sql"," and confirm the objects exist). Split into:",[310,1124,1125,1131],{},[313,1126,1127,1130],{},[300,1128,1129],{},"Already in the database"," — mark as applied in step 4",[313,1132,1133,1136,1137,1139],{},[300,1134,1135],{},"Not yet in the database"," — leave for ",[350,1138,963],{}," in step 5",[313,1141,1142,1145,1146,1089,1149],{},[300,1143,1144],{},"Mark each baseline migration as applied"," — run ",[300,1147,1148],{},"once per folder",[529,1150,1152],{"className":594,"code":1151,"language":596,"meta":535,"style":535},"npx prisma migrate resolve --applied \"\u003Cmigration_folder_name>\"\n",[350,1153,1154],{"__ignoreMap":535},[600,1155,1156,1158,1160,1162,1165,1168,1171,1174],{"class":602,"line":603},[600,1157,648],{"class":622},[600,1159,626],{"class":616},[600,1161,629],{"class":616},[600,1163,1164],{"class":616}," resolve",[600,1166,1167],{"class":616}," --applied",[600,1169,1170],{"class":609}," \"",[600,1172,1173],{"class":616},"\u003Cmigration_folder_name>",[600,1175,1176],{"class":609},"\"\n",[313,1178,1179,1089,1182],{},[300,1180,1181],{},"Deploy remaining migrations",[529,1183,1184],{"className":594,"code":667,"language":596,"meta":535,"style":535},[350,1185,1186],{"__ignoreMap":535},[600,1187,1188,1190,1192,1194],{"class":602,"line":603},[600,1189,648],{"class":622},[600,1191,626],{"class":616},[600,1193,629],{"class":616},[600,1195,632],{"class":616},[313,1197,1198,1200,1201,1204,1205],{},[300,1199,687],{}," with ",[350,1202,1203],{},"npx prisma migrate status"," — should report ",[300,1206,708],{},[313,1208,1209,1210,343],{},"Close the tunnel and revert your local ",[350,1211,514],{},[1213,1214,1215],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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":535,"searchDepth":1217,"depth":1217,"links":1218},2,[1219,1220,1221,1222,1227,1228,1229,1230],{"id":307,"depth":1217,"text":308},{"id":333,"depth":1217,"text":334},{"id":374,"depth":1217,"text":375},{"id":410,"depth":1217,"text":411,"children":1223},[1224,1226],{"id":421,"depth":1225,"text":422},3,{"id":457,"depth":1225,"text":458},{"id":723,"depth":1217,"text":724},{"id":780,"depth":1217,"text":781},{"id":864,"depth":1217,"text":865},{"id":936,"depth":1217,"text":139,"children":1231},[1232],{"id":1043,"depth":1225,"text":1044},"Guide on how to update the production environment for the Capability Exchange","md",null,{},true,{"title":55,"description":1233},"NzGcJfiP7aS21m0ro4HbduvLLzTuo8oNpFdOsZYfV_8",[1241,1243],{"title":114,"path":115,"stem":116,"children":-1,"description":1242},"A comprehensive overview of the deployment process for new ESProfiler tenants",{"title":122,"path":123,"stem":124,"description":1242,"children":-1},1784892032287]