[{"data":1,"prerenderedAt":1010},["ShallowReactive",2],{"navigation":3,"\u002Fsync-api\u002Fexamples\u002Faws-lambda-python":99,"\u002Fsync-api\u002Fexamples\u002Faws-lambda-python-surround":1009},[4,16,52,71,91],{"title":5,"path":6,"stem":7,"children":8,"icon":15},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,11],{"title":10,"path":6,"stem":7},"Introduction",{"title":12,"path":13,"stem":14},"Authentication","\u002Fgetting-started\u002Fauthentication","1.getting-started\u002F2.authentication","i-tabler-rocket",{"title":17,"path":18,"stem":19,"children":20,"icon":51},"GraphQL API","\u002Fgraphql-api","2.graphql-api\u002F1.index",[21,23,27,31,35,39,43,47],{"title":22,"path":18,"stem":19},"API Overview",{"title":24,"path":25,"stem":26},"Querying Patterns","\u002Fgraphql-api\u002Fquerying","2.graphql-api\u002F2.querying",{"title":28,"path":29,"stem":30},"Mutation Patterns","\u002Fgraphql-api\u002Fmutations","2.graphql-api\u002F3.mutations",{"title":32,"path":33,"stem":34},"List SaaS Applications","\u002Fgraphql-api\u002Fguides\u002Flist-applications","2.graphql-api\u002F4.guides\u002F1.list-applications",{"title":36,"path":37,"stem":38},"Find Unused Licenses","\u002Fgraphql-api\u002Fguides\u002Ffind-unused-licenses","2.graphql-api\u002F4.guides\u002F2.find-unused-licenses",{"title":40,"path":41,"stem":42},"Retrieve Upcoming Renewals","\u002Fgraphql-api\u002Fguides\u002Fupcoming-renewals","2.graphql-api\u002F4.guides\u002F3.upcoming-renewals",{"title":44,"path":45,"stem":46},"Handle GraphQL Errors","\u002Fgraphql-api\u002Fguides\u002Fhandle-errors","2.graphql-api\u002F4.guides\u002F4.handle-errors",{"title":48,"path":49,"icon":50},"API Reference","\u002Fgql-schema-reference","i-tabler-file-code","i-tabler-braces",{"title":53,"path":54,"stem":55,"children":56,"icon":70},"Sync API","\u002Fsync-api","3.sync-api\u002F1.index",[57,59,63,67],{"title":58,"path":54,"stem":55},"Viio Sync API",{"title":60,"path":61,"stem":62},"Quickstart","\u002Fsync-api\u002Fquickstart","3.sync-api\u002F2.quickstart",{"title":64,"path":65,"icon":66},"Examples","\u002Fsync-api\u002Fexamples","i-tabler-code",{"title":68,"path":69,"icon":50},"SDK Reference","\u002Fsync-api\u002Fapi-reference","i-tabler-refresh",{"title":72,"path":73,"stem":74,"children":75,"icon":90},"MCP Server","\u002Fmcp-server","4.mcp-server\u002F1.index",[76,78,82,86],{"title":77,"path":73,"stem":74},"Viio MCP Server",{"title":79,"path":80,"stem":81},"Setup","\u002Fmcp-server\u002Fsetup","4.mcp-server\u002F2.setup",{"title":83,"path":84,"stem":85},"Available Tools","\u002Fmcp-server\u002Ftools","4.mcp-server\u002F3.tools",{"title":87,"path":88,"stem":89},"SaaS Analysis Use Cases","\u002Fmcp-server\u002Fuse-cases","4.mcp-server\u002F4.use-cases","i-tabler-robot",{"title":92,"path":93,"stem":94,"children":95,"icon":98},"AI Integration","\u002Fai","5.ai\u002F1.index",[96],{"title":97,"path":93,"stem":94},"llms.txt","i-tabler-sparkles",{"id":100,"title":101,"body":102,"dateModified":996,"datePublished":997,"description":998,"extension":999,"links":1000,"meta":1001,"navigation":1002,"path":1003,"seo":1004,"stem":1007,"__hash__":1008},"docs\u002F3.sync-api\u002F6.examples\u002F4.aws-lambda-python.md","AWS Lambda",{"type":103,"value":104,"toc":990},"minimark",[105,120,128,133,136,147,153,159,162,166,172,517,523,529,533,539,873,876,880,886,968,979,983,986],[106,107,108,109,114,115,119],"p",{},"This example runs the ",[110,111,113],"a",{"href":112},"\u002Fsync-api\u002Fexamples\u002Fmicrosoft-entra-id-python","Microsoft Entra ID"," and ",[110,116,118],{"href":117},"\u002Fsync-api\u002Fexamples\u002Fmicrosoft-licenses-python","Microsoft licenses"," scripts as two scheduled AWS Lambda functions. Each invocation runs one complete batch.",[106,121,122,123,127],{},"For SDK requirements and environment variables, see ",[110,124,126],{"href":125},"\u002Fsync-api\u002Fexamples#shared-setup","Shared Setup",".",[129,130,132],"h2",{"id":131},"project-layout","Project Layout",[106,134,135],{},"Put the two example scripts next to a handler module, a requirements file, and an AWS SAM template:",[137,138,144],"pre",{"className":139,"code":141,"language":142,"meta":143},[140],"language-text",".\n├── aws_lambda.py\n├── entra_employees.py\n├── microsoft_licenses.py\n├── requirements.txt\n└── template.yaml\n","text","",[145,146,141],"code",{"__ignoreMap":143},[106,148,149,152],{},[145,150,151],{},"requirements.txt",":",[137,154,157],{"className":155,"code":156,"language":142,"meta":143},[140],"viio-sync-api-sdk>=0.5.0\n",[145,158,156],{"__ignoreMap":143},[106,160,161],{},"The scripts use only the Python standard library and the SDK.",[129,163,165],{"id":164},"lambda-handlers","Lambda Handlers",[106,167,168,169,152],{},"Create ",[145,170,171],{},"aws_lambda.py",[137,173,177],{"className":174,"code":175,"language":176,"meta":143,"style":143},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import asyncio\nfrom typing import Any\n\nimport entra_employees\nimport microsoft_licenses\n\n\ndef employees_handler(event: dict[str, Any], context: object) -> dict[str, Any]:\n    del event, context\n    counts = asyncio.run(entra_employees.run_batch(entra_employees.sync_employees))\n    return {\"ok\": True, **counts}\n\n\ndef licenses_handler(event: dict[str, Any], context: object) -> dict[str, Any]:\n    del event, context\n    counts = asyncio.run(microsoft_licenses.run_batch(microsoft_licenses.sync_microsoft_licenses))\n    return {\"ok\": True, **counts}\n","python",[145,178,179,192,206,213,221,229,234,239,306,320,360,392,397,402,450,461,494],{"__ignoreMap":143},[180,181,184,188],"span",{"class":182,"line":183},"line",1,[180,185,187],{"class":186},"s7zQu","import",[180,189,191],{"class":190},"sTEyZ"," asyncio\n",[180,193,195,198,201,203],{"class":182,"line":194},2,[180,196,197],{"class":186},"from",[180,199,200],{"class":190}," typing ",[180,202,187],{"class":186},[180,204,205],{"class":190}," Any\n",[180,207,209],{"class":182,"line":208},3,[180,210,212],{"emptyLinePlaceholder":211},true,"\n",[180,214,216,218],{"class":182,"line":215},4,[180,217,187],{"class":186},[180,219,220],{"class":190}," entra_employees\n",[180,222,224,226],{"class":182,"line":223},5,[180,225,187],{"class":186},[180,227,228],{"class":190}," microsoft_licenses\n",[180,230,232],{"class":182,"line":231},6,[180,233,212],{"emptyLinePlaceholder":211},[180,235,237],{"class":182,"line":236},7,[180,238,212],{"emptyLinePlaceholder":211},[180,240,242,246,250,254,258,260,263,266,270,273,276,279,282,284,287,290,293,295,297,299,301,303],{"class":182,"line":241},8,[180,243,245],{"class":244},"spNyl","def",[180,247,249],{"class":248},"s2Zo4"," employees_handler",[180,251,253],{"class":252},"sMK4o","(",[180,255,257],{"class":256},"sHdIc","event",[180,259,152],{"class":252},[180,261,262],{"class":190}," dict",[180,264,265],{"class":252},"[",[180,267,269],{"class":268},"sBMFI","str",[180,271,272],{"class":252},",",[180,274,275],{"class":190}," Any",[180,277,278],{"class":252},"],",[180,280,281],{"class":256}," context",[180,283,152],{"class":252},[180,285,286],{"class":268}," object",[180,288,289],{"class":252},")",[180,291,292],{"class":252}," ->",[180,294,262],{"class":190},[180,296,265],{"class":252},[180,298,269],{"class":268},[180,300,272],{"class":252},[180,302,275],{"class":190},[180,304,305],{"class":252},"]:\n",[180,307,309,312,315,317],{"class":182,"line":308},9,[180,310,311],{"class":186},"    del",[180,313,314],{"class":190}," event",[180,316,272],{"class":252},[180,318,319],{"class":190}," context\n",[180,321,323,326,329,332,334,337,339,342,344,347,349,351,353,357],{"class":182,"line":322},10,[180,324,325],{"class":190},"    counts ",[180,327,328],{"class":252},"=",[180,330,331],{"class":190}," asyncio",[180,333,127],{"class":252},[180,335,336],{"class":248},"run",[180,338,253],{"class":252},[180,340,341],{"class":248},"entra_employees",[180,343,127],{"class":252},[180,345,346],{"class":248},"run_batch",[180,348,253],{"class":252},[180,350,341],{"class":248},[180,352,127],{"class":252},[180,354,356],{"class":355},"swJcz","sync_employees",[180,358,359],{"class":252},"))\n",[180,361,363,366,369,372,376,378,380,383,386,389],{"class":182,"line":362},11,[180,364,365],{"class":186},"    return",[180,367,368],{"class":252}," {",[180,370,371],{"class":252},"\"",[180,373,375],{"class":374},"sfazB","ok",[180,377,371],{"class":252},[180,379,152],{"class":252},[180,381,382],{"class":252}," True,",[180,384,385],{"class":252}," **",[180,387,388],{"class":190},"counts",[180,390,391],{"class":252},"}\n",[180,393,395],{"class":182,"line":394},12,[180,396,212],{"emptyLinePlaceholder":211},[180,398,400],{"class":182,"line":399},13,[180,401,212],{"emptyLinePlaceholder":211},[180,403,405,407,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448],{"class":182,"line":404},14,[180,406,245],{"class":244},[180,408,409],{"class":248}," licenses_handler",[180,411,253],{"class":252},[180,413,257],{"class":256},[180,415,152],{"class":252},[180,417,262],{"class":190},[180,419,265],{"class":252},[180,421,269],{"class":268},[180,423,272],{"class":252},[180,425,275],{"class":190},[180,427,278],{"class":252},[180,429,281],{"class":256},[180,431,152],{"class":252},[180,433,286],{"class":268},[180,435,289],{"class":252},[180,437,292],{"class":252},[180,439,262],{"class":190},[180,441,265],{"class":252},[180,443,269],{"class":268},[180,445,272],{"class":252},[180,447,275],{"class":190},[180,449,305],{"class":252},[180,451,453,455,457,459],{"class":182,"line":452},15,[180,454,311],{"class":186},[180,456,314],{"class":190},[180,458,272],{"class":252},[180,460,319],{"class":190},[180,462,464,466,468,470,472,474,476,479,481,483,485,487,489,492],{"class":182,"line":463},16,[180,465,325],{"class":190},[180,467,328],{"class":252},[180,469,331],{"class":190},[180,471,127],{"class":252},[180,473,336],{"class":248},[180,475,253],{"class":252},[180,477,478],{"class":248},"microsoft_licenses",[180,480,127],{"class":252},[180,482,346],{"class":248},[180,484,253],{"class":252},[180,486,478],{"class":248},[180,488,127],{"class":252},[180,490,491],{"class":355},"sync_microsoft_licenses",[180,493,359],{"class":252},[180,495,497,499,501,503,505,507,509,511,513,515],{"class":182,"line":496},17,[180,498,365],{"class":186},[180,500,368],{"class":252},[180,502,371],{"class":252},[180,504,375],{"class":374},[180,506,371],{"class":252},[180,508,152],{"class":252},[180,510,382],{"class":252},[180,512,385],{"class":252},[180,514,388],{"class":190},[180,516,391],{"class":252},[106,518,519,522],{},[145,520,521],{},"asyncio.run"," creates the Sync API client and closes it inside the invocation's event loop. This prevents a reused Lambda execution environment from keeping a gRPC AsyncIO channel bound to an earlier event loop.",[106,524,525,526,528],{},"If a sync fails, ",[145,527,346],{}," aborts the batch and the handler raises the error, so the invocation is reported as failed.",[129,530,532],{"id":531},"schedule-with-aws-sam","Schedule with AWS SAM",[106,534,168,535,538],{},[145,536,537],{},"template.yaml",". It deploys both functions with Python 3.11 on Arm64 and a 15-minute timeout. Amazon EventBridge Scheduler runs the employee sync at 02:00 UTC and the license sync at 03:00 UTC, so the two batches don't overlap:",[137,540,544],{"className":541,"code":542,"language":543,"meta":143,"style":143},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","AWSTemplateFormatVersion: \"2010-09-09\"\nTransform: AWS::Serverless-2016-10-31\nDescription: Nightly Microsoft Graph syncs to the Viio Sync API\n\nParameters:\n  MicrosoftTenantId:\n    Type: String\n  MicrosoftClientId:\n    Type: String\n  MicrosoftClientSecret:\n    Type: String\n    NoEcho: true\n  ViioSyncApiEndpoint:\n    Type: String\n    Default: https:\u002F\u002Fsync.viio.io\n  ViioSyncApiKey:\n    Type: String\n    NoEcho: true\n  ViioDirectIntegrationInstallationId:\n    Type: String\n\nGlobals:\n  Function:\n    Architectures:\n      - arm64\n    CodeUri: .\n    Runtime: python3.11\n    MemorySize: 512\n    Timeout: 900\n    Environment:\n      Variables:\n        MICROSOFT_TENANT_ID: !Ref MicrosoftTenantId\n        MICROSOFT_CLIENT_ID: !Ref MicrosoftClientId\n        MICROSOFT_CLIENT_SECRET: !Ref MicrosoftClientSecret\n        VIIO_SYNC_API_ENDPOINT: !Ref ViioSyncApiEndpoint\n        VIIO_SYNC_API_KEY: !Ref ViioSyncApiKey\n        VIIO_DIRECT_INTEGRATION_INSTALLATION_ID: !Ref ViioDirectIntegrationInstallationId\n\nResources:\n  EmployeeSyncFunction:\n    Type: AWS::Serverless::Function\n    Properties:\n      Handler: aws_lambda.employees_handler\n      Events:\n        NightlyEmployeeSync:\n          Type: ScheduleV2\n          Properties:\n            ScheduleExpression: cron(0 2 * * ? *)\n            ScheduleExpressionTimezone: UTC\n\n  LicenseSyncFunction:\n    Type: AWS::Serverless::Function\n    Properties:\n      Handler: aws_lambda.licenses_handler\n      Events:\n        NightlyLicenseSync:\n          Type: ScheduleV2\n          Properties:\n            ScheduleExpression: cron(0 3 * * ? *)\n            ScheduleExpressionTimezone: UTC\n","yaml",[145,545,546,551,556,561,565,570,575,580,585,589,594,598,603,608,612,617,622,626,631,637,642,647,653,659,665,671,677,683,689,695,701,707,713,719,725,731,737,743,748,754,760,766,772,778,784,790,796,802,808,814,819,825,830,835,841,846,852,857,862,868],{"__ignoreMap":143},[180,547,548],{"class":182,"line":183},[180,549,550],{},"AWSTemplateFormatVersion: \"2010-09-09\"\n",[180,552,553],{"class":182,"line":194},[180,554,555],{},"Transform: AWS::Serverless-2016-10-31\n",[180,557,558],{"class":182,"line":208},[180,559,560],{},"Description: Nightly Microsoft Graph syncs to the Viio Sync API\n",[180,562,563],{"class":182,"line":215},[180,564,212],{"emptyLinePlaceholder":211},[180,566,567],{"class":182,"line":223},[180,568,569],{},"Parameters:\n",[180,571,572],{"class":182,"line":231},[180,573,574],{},"  MicrosoftTenantId:\n",[180,576,577],{"class":182,"line":236},[180,578,579],{},"    Type: String\n",[180,581,582],{"class":182,"line":241},[180,583,584],{},"  MicrosoftClientId:\n",[180,586,587],{"class":182,"line":308},[180,588,579],{},[180,590,591],{"class":182,"line":322},[180,592,593],{},"  MicrosoftClientSecret:\n",[180,595,596],{"class":182,"line":362},[180,597,579],{},[180,599,600],{"class":182,"line":394},[180,601,602],{},"    NoEcho: true\n",[180,604,605],{"class":182,"line":399},[180,606,607],{},"  ViioSyncApiEndpoint:\n",[180,609,610],{"class":182,"line":404},[180,611,579],{},[180,613,614],{"class":182,"line":452},[180,615,616],{},"    Default: https:\u002F\u002Fsync.viio.io\n",[180,618,619],{"class":182,"line":463},[180,620,621],{},"  ViioSyncApiKey:\n",[180,623,624],{"class":182,"line":496},[180,625,579],{},[180,627,629],{"class":182,"line":628},18,[180,630,602],{},[180,632,634],{"class":182,"line":633},19,[180,635,636],{},"  ViioDirectIntegrationInstallationId:\n",[180,638,640],{"class":182,"line":639},20,[180,641,579],{},[180,643,645],{"class":182,"line":644},21,[180,646,212],{"emptyLinePlaceholder":211},[180,648,650],{"class":182,"line":649},22,[180,651,652],{},"Globals:\n",[180,654,656],{"class":182,"line":655},23,[180,657,658],{},"  Function:\n",[180,660,662],{"class":182,"line":661},24,[180,663,664],{},"    Architectures:\n",[180,666,668],{"class":182,"line":667},25,[180,669,670],{},"      - arm64\n",[180,672,674],{"class":182,"line":673},26,[180,675,676],{},"    CodeUri: .\n",[180,678,680],{"class":182,"line":679},27,[180,681,682],{},"    Runtime: python3.11\n",[180,684,686],{"class":182,"line":685},28,[180,687,688],{},"    MemorySize: 512\n",[180,690,692],{"class":182,"line":691},29,[180,693,694],{},"    Timeout: 900\n",[180,696,698],{"class":182,"line":697},30,[180,699,700],{},"    Environment:\n",[180,702,704],{"class":182,"line":703},31,[180,705,706],{},"      Variables:\n",[180,708,710],{"class":182,"line":709},32,[180,711,712],{},"        MICROSOFT_TENANT_ID: !Ref MicrosoftTenantId\n",[180,714,716],{"class":182,"line":715},33,[180,717,718],{},"        MICROSOFT_CLIENT_ID: !Ref MicrosoftClientId\n",[180,720,722],{"class":182,"line":721},34,[180,723,724],{},"        MICROSOFT_CLIENT_SECRET: !Ref MicrosoftClientSecret\n",[180,726,728],{"class":182,"line":727},35,[180,729,730],{},"        VIIO_SYNC_API_ENDPOINT: !Ref ViioSyncApiEndpoint\n",[180,732,734],{"class":182,"line":733},36,[180,735,736],{},"        VIIO_SYNC_API_KEY: !Ref ViioSyncApiKey\n",[180,738,740],{"class":182,"line":739},37,[180,741,742],{},"        VIIO_DIRECT_INTEGRATION_INSTALLATION_ID: !Ref ViioDirectIntegrationInstallationId\n",[180,744,746],{"class":182,"line":745},38,[180,747,212],{"emptyLinePlaceholder":211},[180,749,751],{"class":182,"line":750},39,[180,752,753],{},"Resources:\n",[180,755,757],{"class":182,"line":756},40,[180,758,759],{},"  EmployeeSyncFunction:\n",[180,761,763],{"class":182,"line":762},41,[180,764,765],{},"    Type: AWS::Serverless::Function\n",[180,767,769],{"class":182,"line":768},42,[180,770,771],{},"    Properties:\n",[180,773,775],{"class":182,"line":774},43,[180,776,777],{},"      Handler: aws_lambda.employees_handler\n",[180,779,781],{"class":182,"line":780},44,[180,782,783],{},"      Events:\n",[180,785,787],{"class":182,"line":786},45,[180,788,789],{},"        NightlyEmployeeSync:\n",[180,791,793],{"class":182,"line":792},46,[180,794,795],{},"          Type: ScheduleV2\n",[180,797,799],{"class":182,"line":798},47,[180,800,801],{},"          Properties:\n",[180,803,805],{"class":182,"line":804},48,[180,806,807],{},"            ScheduleExpression: cron(0 2 * * ? *)\n",[180,809,811],{"class":182,"line":810},49,[180,812,813],{},"            ScheduleExpressionTimezone: UTC\n",[180,815,817],{"class":182,"line":816},50,[180,818,212],{"emptyLinePlaceholder":211},[180,820,822],{"class":182,"line":821},51,[180,823,824],{},"  LicenseSyncFunction:\n",[180,826,828],{"class":182,"line":827},52,[180,829,765],{},[180,831,833],{"class":182,"line":832},53,[180,834,771],{},[180,836,838],{"class":182,"line":837},54,[180,839,840],{},"      Handler: aws_lambda.licenses_handler\n",[180,842,844],{"class":182,"line":843},55,[180,845,783],{},[180,847,849],{"class":182,"line":848},56,[180,850,851],{},"        NightlyLicenseSync:\n",[180,853,855],{"class":182,"line":854},57,[180,856,795],{},[180,858,860],{"class":182,"line":859},58,[180,861,801],{},[180,863,865],{"class":182,"line":864},59,[180,866,867],{},"            ScheduleExpression: cron(0 3 * * ? *)\n",[180,869,871],{"class":182,"line":870},60,[180,872,813],{},[106,874,875],{},"Lambda stops a function after 15 minutes. If a sync can take longer for your tenant, run the script on a scheduler without that limit, such as a container task.",[129,877,879],{"id":878},"package-native-dependencies","Package Native Dependencies",[106,881,882,885],{},[145,883,884],{},"grpcio"," contains native code. When building an Arm64 Lambda ZIP or layer on another operating system, install the matching Linux wheel:",[137,887,891],{"className":888,"code":889,"language":890,"meta":143,"style":143},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python -m pip install \\\n  --platform manylinux2014_aarch64 \\\n  --implementation cp \\\n  --python-version 3.11 \\\n  --only-binary=:all: \\\n  --target package \\\n  \"viio-sync-api-sdk>=0.5.0\"\n","bash",[145,892,893,909,919,929,940,947,957],{"__ignoreMap":143},[180,894,895,897,900,903,906],{"class":182,"line":183},[180,896,176],{"class":268},[180,898,899],{"class":374}," -m",[180,901,902],{"class":374}," pip",[180,904,905],{"class":374}," install",[180,907,908],{"class":190}," \\\n",[180,910,911,914,917],{"class":182,"line":194},[180,912,913],{"class":374},"  --platform",[180,915,916],{"class":374}," manylinux2014_aarch64",[180,918,908],{"class":190},[180,920,921,924,927],{"class":182,"line":208},[180,922,923],{"class":374},"  --implementation",[180,925,926],{"class":374}," cp",[180,928,908],{"class":190},[180,930,931,934,938],{"class":182,"line":215},[180,932,933],{"class":374},"  --python-version",[180,935,937],{"class":936},"sbssI"," 3.11",[180,939,908],{"class":190},[180,941,942,945],{"class":182,"line":223},[180,943,944],{"class":374},"  --only-binary=:all:",[180,946,908],{"class":190},[180,948,949,952,955],{"class":182,"line":231},[180,950,951],{"class":374},"  --target",[180,953,954],{"class":374}," package",[180,956,908],{"class":190},[180,958,959,962,965],{"class":182,"line":236},[180,960,961],{"class":252},"  \"",[180,963,964],{"class":374},"viio-sync-api-sdk>=0.5.0",[180,966,967],{"class":252},"\"\n",[106,969,970,971,974,975,978],{},"Replace ",[145,972,973],{},"3.11"," with the target Lambda runtime version. For an x86-64 function, use ",[145,976,977],{},"manylinux2014_x86_64",". Python Lambda container images can install the package normally.",[980,981],"read-more",{"title":982,"to":65},"Back to the examples",[980,984],{"title":985,"to":61},"Learn the batch lifecycle",[987,988,989],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":143,"searchDepth":183,"depth":194,"links":991},[992,993,994,995],{"id":131,"depth":194,"text":132},{"id":164,"depth":194,"text":165},{"id":531,"depth":194,"text":532},{"id":878,"depth":194,"text":879},"2026-10-06","2026-07-31","Run the Microsoft Entra ID and Microsoft licenses syncs on a schedule from AWS Lambda with the Viio Python SDK.","md",null,{},false,"\u002Fsync-api\u002Fexamples\u002Faws-lambda-python",{"title":1005,"description":1006},"Viio Sync API from AWS Lambda with Python","Package the Viio Python SDK examples as scheduled AWS Lambda functions that send Microsoft Entra ID employees and Microsoft 365 licenses to Viio.","3.sync-api\u002F6.examples\u002F4.aws-lambda-python","q0gnQk7dqxj2vrQmhdOvryfo86HKV6TykT926jzQsMA",[1000,1000],1792747810233]