CINXE.COM
Announcing TorchServe, An Open Source Model Server for PyTorch | AWS News Blog
<!doctype html> <html lang="en-US" class="no-js aws-lng-en_US" xmlns="http://www.w3.org/1999/xhtml" data-aws-assets="https://a0.awsstatic.com" data-js-version="1.0.681" data-css-version="1.0.538" data-static-assets="https://a0.awsstatic.com" prefix="og: https://ogp.me/ns#"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Announcing TorchServe, An Open Source Model Server for PyTorch | AWS News Blog</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: https://a0.awsstatic.com https://prod.us-east-1.ui.gcr-chat.marketing.aws.dev; base-uri 'none'; connect-src 'self' *.akamaized.net *.googlevideo.com/videoplayback https://*.analytics.console.aws.a2z.com https://*.harmony.a2z.com https://*.marketing.aws.dev https://*.panorama.console.api.aws https://*.prod.chc-features.uxplatform.aws.dev https://112-tzm-766.mktoresp.com https://112-tzm-766.mktoutil.com https://a0.awsstatic.com https://a0.p.awsstatic.com https://a1.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net https://amazonwebservicesinc.tt.omtrdc.net https://api-v2.builderprofile.aws.dev https://api.regional-table.region-services.aws.a2z.com https://api.us-west-2.prod.pricing.aws.a2z.com https://auth.aws.amazon.com/ https://aws.amazon.com/p/sf/ https://aws.demdex.net https://b0.p.awsstatic.com https://c0.b0.p.awsstatic.com https://calculator.aws https://chatbot-api.us-east-1.prod.mrc-sunrise.marketing.aws.dev https://chatbot-stream-api.us-east-1.prod.mrc-sunrise.marketing.aws.dev https://cm.everesttech.net https://d-90676d7478.awsapps.com https://d0.awsstatic.com https://d1.awsstatic.com https://d1fgizr415o1r6.cloudfront.net https://d2c.aws.amazon.com https://d3borx6sfvnesb.cloudfront.net https://dftu77xade0tc.cloudfront.net https://dpm.demdex.net https://edge.adobedc.net https://fls-na.amazon.com https://i18n-string.us-west-2.prod.pricing.aws.a2z.com https://iad.staging.prod.tv.awsstatic.com https://infra-api.us-east-1.prod.mrc-sunrise.marketing.aws.dev https://ingestion.aperture-public-api.feedback.console.aws.dev https://livechat-api.us-east-1.prod.mrc-sunrise.marketing.aws.dev https://oidc.us-east-1.amazonaws.com https://pricing-table.us-west-2.prod.site.p.awsstatic.com https://prod-api.cosmic.aws.dev https://prod-us-west-2.csp-report.marketing.aws.dev https://prod-us-west-2.csp-report.marketing.aws.dev/submit https://prod.log.shortbread.aws.dev https://prod.tools.shortbread.aws.dev https://prod.us-east-1.api.gcr-chat.marketing.aws.dev https://prod.us-east-1.rest-bot.gcr-chat.marketing.aws.dev https://prod.us-east-1.ui.gcr-chat.marketing.aws.dev https://prod2.clientlogger.cn-northwest-1.marketplace.aws.a2z.org.cn https://public.lotus.awt.aws.a2z.com https://s0.awsstatic.com https://s3.amazonaws.com/aws-messaging-pricing-information/ https://s3.amazonaws.com/public-pricing-agc/ https://spot-bid-advisor.s3.amazonaws.com https://t0.m.awsstatic.com https://token.us-west-2.prod.site.p.awsstatic.com https://tv.awsstatic.com https://view-stage.us-west-2.prod.pricing.aws.a2z.com https://view-staging.us-east-1.prod.plc1-prod.pricing.aws.a2z.com https://vs.aws.amazon.com https://webchat-aws.clink.cn https://www.youtube-nocookie.com https://www.youtube.com https://xcxrmtkxx5.execute-api.us-east-1.amazonaws.com/prod/ wss://*.transport.connect.us-east-1.amazonaws.com wss://prod.us-east-1.wss-bot.gcr-chat.marketing.aws.dev wss://webchat-aws.clink.cn; font-src 'self' data: https://a0.awsstatic.com https://f0.awsstatic.com https://fonts.gstatic.com https://prod.us-east-1.ui.gcr-chat.marketing.aws.dev; frame-src 'self' https://*.widget.console.aws.amazon.com https://aws.demdex.net https://c0.b0.p.awsstatic.com https://calculator.aws https://commenting.awsblogs.com https://conversational-experience-worker.widget.console.aws.amazon.com/lotus/isolatedIFrame https://dpm.demdex.net https://player.vimeo.com https://pricing-table.us-west-2.prod.site.p.awsstatic.com https://token.us-west-2.prod.site.p.awsstatic.com https://www.youtube-nocookie.com https://www.youtube.com; img-src 'self' blob: data: https://*.vidyard.com https://*.ytimg.com https://a0.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net https://avatars.builderprofile.aws.dev https://aws-clink2-resource.s3.cn-northwest-1.amazonaws.com.cn https://aws-quickstart.s3.amazonaws.com https://aws.amazon.com https://aws.demdex.net https://awsmedia.s3.amazonaws.com https://cm.everesttech.net https://d1.awsstatic.com https://d1d1et6laiqoh9.cloudfront.net https://d2908q01vomqb2.cloudfront.net https://d2c.aws.amazon.com https://d2cpw7vd6a2efr.cloudfront.net https://d36cz9buwru1tt.cloudfront.net https://d7umqicpi7263.cloudfront.net https://docs.aws.amazon.com https://dpm.demdex.net https://fls-na.amazon.com https://google.ca https://google.co.in https://google.co.jp https://google.co.th https://google.co.uk https://google.com https://google.com.ar https://google.com.au https://google.com.br https://google.com.hk https://google.com.mx https://google.com.tr https://google.com.tw https://google.de https://google.es https://google.fr https://google.it https://google.nl https://google.pl https://google.ru https://iad.staging.prod.tv.awsstatic.com https://img.youtube.com https://marketingplatform.google.com https://media.amazonwebservices.com https://p.adsymptotic.com https://pages.awscloud.com https://prod.cosmic.aws.dev https://prod.us-east-1.ui.gcr-chat.marketing.aws.dev https://s3.amazonaws.com/aws-quickstart/ https://s3.cn-north-1.amazonaws.com.cn/awschinablog/ https://s3.cn-north-1.amazonaws.com.cn/images-bjs/ https://ssl-static.libsyn.com https://static-cdn.jtvnw.net https://tv.awsstatic.com https://webchat-aws.clink.cn https://www.google.com https://www.linkedin.com https://yt3.ggpht.com; media-src 'self' https://*.libsyn.com https://a0.awsstatic.com https://anchor.fm https://awsmedia.s3.amazonaws.com https://awspodcastsiberiaent.s3.eu-west-3.amazonaws.com https://chtbl.com https://content.production.cdn.art19.com https://d1.awsstatic.com https://d1hemuljm71t2j.cloudfront.net https://d1le29qyzha1u4.cloudfront.net https://d1oqpvwii7b6rh.cloudfront.net https://d1vo51ubqkiilx.cloudfront.net https://d1yyh5dhdgifnx.cloudfront.net https://d2908q01vomqb2.cloudfront.net https://d2a6igt6jhaluh.cloudfront.net https://d3ctxlq1ktw2nl.cloudfront.net https://d3h2ozso0dirfl.cloudfront.net https://dgen8gghn3u86.cloudfront.net https://dk261l6wntthl.cloudfront.net https://download.stormacq.com/aws/podcast/ https://dts.podtrac.com https://iad.staging.prod.tv.awsstatic.com https://media.amazonwebservices.com https://mktg-apac.s3-ap-southeast-1.amazonaws.com https://rss.art19.com https://s3-ap-northeast-1.amazonaws.com/aws-china-media/ https://tv.awsstatic.com https://www.buzzsprout.com; object-src 'none'; script-src 'nonce-JMB0jBT6MNpEvh5RujGDviEs2UnU632vT7Z1D3RNKBg=' 'self' blob: https://*.cdn.console.awsstatic.com/ https://*.cdn.uis.awsstatic.com/ https://a.b.cdn.console.awsstatic.com https://a0.awsstatic.com https://amazonwebservicesinc.tt.omtrdc.net https://cdn.builderprofile.aws.dev https://d2c.aws.amazon.com https://googleads.g.doubleclick.net https://loader.us-east-1.prod.mrc-sunrise.marketing.aws.dev https://prod.cosmic.aws.dev https://prod.us-east-1.ui.gcr-chat.marketing.aws.dev https://spot-price.s3.amazonaws.com https://static.doubleclick.net https://t0.m.awsstatic.com https://token.us-west-2.prod.site.p.awsstatic.com https://website.spot.ec2.aws.a2z.com https://www.google.com https://www.gstatic.com https://www.youtube.com/iframe_api https://www.youtube.com/s/player/; style-src 'self' 'unsafe-inline' https://a0.awsstatic.com https://prod.us-east-1.ui.gcr-chat.marketing.aws.dev https://token.us-west-2.prod.site.p.awsstatic.com; report-uri https://prod-us-west-2.csp-report.marketing.aws.dev/submit" data-report-uri="https://prod-us-west-2.csp-report.marketing.aws.dev/submit"> <script src="https://a0.awsstatic.com/libra/1.0.590/csp/csp-report.js"></script> <meta name="robots" content="max-image-preview:large"> <link rel="dns-prefetch" href="//a0.awsstatic.com"> <style id="global-styles-inline-css" type="text/css"> body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--duotone--dark-grayscale: url('#wp-duotone-dark-grayscale');--wp--preset--duotone--grayscale: url('#wp-duotone-grayscale');--wp--preset--duotone--purple-yellow: url('#wp-duotone-purple-yellow');--wp--preset--duotone--blue-red: url('#wp-duotone-blue-red');--wp--preset--duotone--midnight: url('#wp-duotone-midnight');--wp--preset--duotone--magenta-yellow: url('#wp-duotone-magenta-yellow');--wp--preset--duotone--purple-green: url('#wp-duotone-purple-green');--wp--preset--duotone--blue-orange: url('#wp-duotone-blue-orange');--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} </style> <link rel="canonical" href="https://aws.amazon.com/blogs/aws/announcing-torchserve-an-open-source-model-server-for-pytorch/"> <meta property="og:locale" content="en_US"> <meta property="og:site_name" content="Amazon Web Services"> <meta property="og:title" content="Announcing TorchServe, An Open Source Model Server for PyTorch | Amazon Web Services"> <meta property="og:type" content="article"> <meta property="og:url" content="https://aws.amazon.com/blogs/aws/announcing-torchserve-an-open-source-model-server-for-pytorch/"> <meta property="og:description" content="PyTorch is one of the most popular open source libraries for deep learning. Developers and researchers particularly enjoy the flexibility it gives them in building and training models. Yet, this is only half the story, and deploying and managing models in production is often the most difficult part of the machine learning process: building bespoke […]"> <meta property="og:image" content="https://d2908q01vomqb2.cloudfront.net/da4b9237bacccdf19c0760cab7aec4a8359010b0/2020/04/21/Site-Merch_TorchServe_SocialMedia_2.png"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="400"> <meta property="og:updated_time" content="2022-11-03T10:46:32-07:00"> <meta property="article:publisher" content="https://www.facebook.com/amazonwebservices"> <meta property="article:section" content="Announcements"> <meta property="article:tag" content="Announcements"> <meta property="article:tag" content="Artificial Intelligence"> <meta property="article:tag" content="Open Source"> <meta property="article:tag" content="PyTorch on AWS"> <meta property="article:tag" content="Tensorflow on AWS"> <meta property="article:published_time" content="2020-04-21T09:30:57-07:00"> <meta property="article:modified_time" content="2022-11-03T10:46:32-07:00"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="@awscloud"> <meta name="twitter:domain" content="https://aws.amazon.com/blogs/"> <meta name="twitter:title" content="Announcing TorchServe, An Open Source Model Server for PyTorch | Amazon Web Services"> <meta name="twitter:creator" content="@julsimon"> <meta name="twitter:description" content="PyTorch is one of the most popular open source libraries for deep learning. Developers and researchers particularly enjoy the flexibility it gives them in building and training models. Yet, this is only half the story, and deploying and managing models in production is often the most difficult part of the machine learning process: building bespoke […]"> <meta name="twitter:image" content="https://d2908q01vomqb2.cloudfront.net/da4b9237bacccdf19c0760cab7aec4a8359010b0/2020/04/21/Site-Merch_TorchServe_SocialMedia_2.png"> <link rel="icon" type="image/ico" href="https://a0.awsstatic.com/main/images/site/fav/favicon.ico"> <link rel="shortcut icon" type="image/ico" href="https://a0.awsstatic.com/main/images/site/fav/favicon.ico"> <link rel="apple-touch-icon" sizes="57x57" href="https://a0.awsstatic.com/main/images/site/touch-icon-iphone-114-smile.png"> <link rel="apple-touch-icon" sizes="72x72" href="https://a0.awsstatic.com/main/images/site/touch-icon-ipad-144-smile.png"> <link rel="apple-touch-icon" sizes="114x114" href="https://a0.awsstatic.com/main/images/site/touch-icon-iphone-114-smile.png"> <link rel="apple-touch-icon" sizes="144x144" href="https://a0.awsstatic.com/main/images/site/touch-icon-ipad-144-smile.png"> <link rel="home" type="application/rss+xml" title="RSS 2.0 Feed" href="https://aws.amazon.com/blogs/aws/feed/"> <meta name="robots" content="index, follow"> <link rel="stylesheet" href="https://a0.awsstatic.com/libra-css/css/1.0.506/style-awsm.css"> <link rel="stylesheet" href="https://a0.awsstatic.com/aws-blog/1.0.83/css/blog.css"> <script type="application/json" id="aws-page-settings"> {"blogPageTitle":"Announcing TorchServe, An Open Source Model Server for PyTorch","currentLanguage":"en-US","libraCSSPath":"https:\/\/a0.awsstatic.com\/libra-css\/css\/1.0.506","requireBaseUrl":"https:\/\/a0.awsstatic.com","requirePackages":[{"name":"libra","location":"libra\/1.0.590"}],"requirePaths":{"aws-blog":"https:\/\/a0.awsstatic.com\/aws-blog\/1.0.83\/js","directories":"https:\/\/a0.awsstatic.com\/libra\/1.0.590\/directories","librastandardlib":"https:\/\/a0.awsstatic.com\/libra\/1.0.590\/librastandardlib","scripts":"https:\/\/a0.awsstatic.com\/libra\/1.0.590\/v1-polyfills\/scripts"},"supportedLanguages":["ar","de","en","es","fr","id","it","jp","ko","pt","ru","th","tr","vi","cn","tw"],"currentStage":"Prod"} </script> <script src="https://a0.awsstatic.com/aws-blog/1.0.83/js/blog-head.js"></script> <script src="https://a0.awsstatic.com/s_code/js/3.0/awshome_s_code.js"></script> <script type="application/json" id="target-mediator"> {"supportedLanguages":["ar","de","en","es","fr","id","it","jp","ko","pt","ru","th","tr","vi","cn","tw"],"pageLanguage":"en","customParams":{"category0":"Announcements","category1":"Artificial Intelligence","category2":"Open Source","category3":"PyTorch on AWS","category4":"Tensorflow on AWS"}} </script> <script src="https://a0.awsstatic.com/target/1.0.122/aws-target-mediator.js"></script> <noscript> <style>.js-mbox { visibility: visible; }</style> </noscript> </head> <body class="awsm aws-blogs-page aws-blogs-page-type-single"> <script id="awsc-panorama-bundle" src="https://prod.pa.cdn.uis.awsstatic.com/panorama-nav-init.js" data-config="{"appEntity":"aws-marketing","region":"us-west-1","service":"blogs-site"}" async="true"></script> <a id="aws-page-skip-to-main" class="lb-sr-only lb-sr-only-focusable lb-bold lb-skip-el" href="#aws-page-content-main"> Skip to Main Content</a> <header id="aws-page-header" class="awsm m-page-header lb-with-mobile-subrow" role="banner"> <div id="m-nav" class="m-nav" role="navigation" aria-label="Global Navigation"> <div class="m-nav-header lb-clearfix" data-menu-url="https://s0.awsstatic.com/en_US/nav/v3/panel-content/desktop/index.html"> <div class="m-nav-logo"> <div class="lb-bg-logo aws-amazon_web_services_smile-header-desktop-en"> <a href="https://aws.amazon.com/?nc2=h_lg"><span>Click here to return to Amazon Web Services homepage</span></a> </div> </div> <nav class="m-nav-secondary-links" style="min-width: 620px" aria-label="Secondary Global Navigation"> <a href="https://aws.amazon.com/about-aws/?nc2=h_header">About AWS</a> <a href="https://aws.amazon.com/contact-us/?nc2=h_header">Contact Us</a> <a class="lb-txt-none lb-tiny-iblock lb-txt-13 lb-txt lb-has-trigger-indicator" href="#" data-mbox-ignore="true" data-lb-popover-trigger="popover-support-selector" role="button" aria-expanded="false" aria-label="Explore support options" id="popover-popover-support-selector-trigger" aria-controls="popover-support-selector" aria-haspopup="true"> Support <svg viewbox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-chevron-down lb-trigger-mount"> <path d="M1 4.5L8 11.5L15 4.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </a> <a id="m-nav-language-selector" class="lb-tiny-iblock lb-txt lb-has-trigger-indicator" href="#" data-lb-popover-trigger="popover-language-selector" data-language="en" aria-label="Set site language" role="button" aria-controls="popover-language-selector" aria-expanded="false" aria-haspopup="true"> English <svg viewbox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-chevron-down lb-trigger-mount"> <path d="M1 4.5L8 11.5L15 4.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </a> <a class="lb-tiny-iblock lb-txt lb-has-trigger-indicator" href="#" data-lb-popover-trigger="popover-my-account" aria-label="Access account options" role="button" aria-controls="popover-my-account" aria-expanded="false" aria-haspopup="true"> My Account <svg viewbox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-chevron-down lb-trigger-mount"> <path d="M1 4.5L8 11.5L15 4.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </a> <div class="m-nav-cta-btn"> <div class="lb-mbox js-mbox" data-lb-comp="mbox" data-lb-comp-ignore="true" data-mbox="en_header_nav_cta"> <div class="lb-data-attr-wrapper data-attr-wrapper" data-da-type="so" data-da-so-type="viewport" data-da-so-language="en" data-da-so-category="monitoring" data-da-so-name="nav-buttons" data-da-so-version="sign-up-sign-in-all" data-da-so-url="nav"> <div class="data-attr-wrapper lb-tiny-iblock lb-none-pad lb-box" data-da-type="so" data-da-so-type="viewport" data-da-so-language="en" data-da-so-category="monitoring" data-da-so-name="nav-buttons" data-da-so-version="prospect-sign-in" data-da-so-url="all"> <a class="lb-txt-none lb-tiny-iblock lb-txt-13 lb-txt" style="padding-top:8px; padding-right:13px;" href="https://console.aws.amazon.com/console/home?nc2=h_ct&src=header-signin"> Sign In</a> </div> <div class="data-attr-wrapper lb-tiny-iblock lb-none-v-margin lb-btn" data-da-type="so" data-da-so-type="viewport" data-da-so-language="en" data-da-so-category="monitoring" data-da-so-name="nav-buttons" data-da-so-version="prospect-signup" data-da-so-url="all"> <a class="lb-btn-p-primary" href="https://portal.aws.amazon.com/gp/aws/developer/registration/index.html?nc2=h_ct&src=header_signup" data-trk-params="{"trkOverrideWithQs":true}" role="button"> <span> Create an AWS Account</span> </a> </div> </div> </div> <div class="lb-mbox js-mbox" data-lb-comp="mbox" data-lb-comp-ignore="true" data-mbox="en_header_desktop_nav_cta_test"> </div> </div> </nav> <div class="m-nav-primary-group"> <nav class="m-nav-primary-links" aria-label="Primary Global Navigation"> <i class="m-nav-angle-left-icon" aria-hidden="true"></i> <ul> <li aria-expanded="false"><span><a href="https://aws.amazon.com/q/?nc2=h_ql_prod_l1_q" class="m-nav-featured">Amazon Q</a></span></li> <li aria-expanded="false"><span><a href="https://aws.amazon.com/products/?nc2=h_ql_prod" data-panel="m-nav-panel-products">Products</a></span></li> <li aria-expanded="false"><span><a href="https://aws.amazon.com/solutions/?nc2=h_ql_sol" data-panel="m-nav-panel-solutions">Solutions</a></span></li> <li aria-expanded="false"><span><a href="https://aws.amazon.com/pricing/?nc2=h_ql_pr" data-panel="m-nav-panel-pricing">Pricing</a></span></li> <li aria-expanded="false"><span><a href="https://aws.amazon.com/documentation-overview/?nc2=h_ql_doc_do" data-panel="m-nav-panel-documentation">Documentation</a></span></li> <li aria-expanded="false"><span><a href="https://aws.amazon.com/getting-started/?nc2=h_ql_le" data-panel="m-nav-panel-learn">Learn</a></span></li> <li aria-expanded="false"><span><a href="https://aws.amazon.com/partners/?nc2=h_ql_pn" data-panel="m-nav-panel-partner">Partner Network</a></span></li> <li aria-expanded="false"><span><a href="https://aws.amazon.com/marketplace/?nc2=h_ql_mp" data-panel="m-nav-panel-marketplace">AWS Marketplace</a></span></li> <li aria-expanded="false"><span><a href="https://aws.amazon.com/customer-enablement/?nc2=h_ql_ce" data-panel="m-nav-panel-customer">Customer Enablement</a></span></li> <li aria-expanded="false"><span><a href="https://aws.amazon.com/events/?nc2=h_ql_ev" data-panel="m-nav-panel-events">Events</a></span></li> <li aria-expanded="false"><span><a href="https://aws.amazon.com/contact-us/?nc2=h_ql_exm" data-panel="m-nav-panel-more">Explore More </a></span></li> </ul> <div class="m-nav-icon-group"> <i class="m-nav-angle-right-icon" aria-hidden="true"></i> <button class="m-nav-search-icon" tabindex="0" aria-expanded="false" aria-label="Search"> <svg viewbox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-magnify"> <path d="M10.5 10.5L14.5 14.5" stroke-width="2" stroke-linejoin="round" /> <path d="M7 12.5C10.0376 12.5 12.5 10.0376 12.5 7C12.5 3.96243 10.0376 1.5 7 1.5C3.96243 1.5 1.5 3.96243 1.5 7C1.5 10.0376 3.96243 12.5 7 12.5Z" stroke-width="2" stroke-linejoin="round" /> </svg> </button> </div> </nav> <div id="m-nav-desktop-search" class="m-nav-search"> <form action="https://aws.amazon.com/search/" role="search"> <div class="m-typeahead" data-directory-id="typeahead-suggestions" data-lb-comp="typeahead"> <input class="m-nav-search-field" placeholder="Search" autocomplete="off" spellcheck="false" dir="auto" type="text" name="searchQuery"> </div> </form> <i class="m-nav-close-icon" role="button" aria-label="Close"></i> </div> </div> </div> <div class="lb-popover lb-popover-aui lb-popover-tiny" data-lb-comp="popover" data-id="popover-language-selector" id="popover-language-selector" aria-modal="false" aria-labelledby="popover-popover-language-selector-trigger" data-action="hover" data-position="top"> <a class="lb-popover-close" role="button" tabindex="0" aria-label="Close" title="Close"> <span class="lb-sr-only">Close</span> </a> <div class="lb-grid lb-row lb-row-max-large lb-snap"> <div class="lb-col lb-tiny-24 lb-mid-12"> <ul class="lb-txt-none lb-ul lb-list-style-none lb-tiny-ul-block"> <li lang="ar-SA" translate="no" data-language="ar"><a href="https://aws.amazon.com/ar/?nc1=h_ls">عربي</a></li> <li lang="id-ID" translate="no" data-language="id"><a href="https://aws.amazon.com/id/?nc1=h_ls">Bahasa Indonesia</a></li> <li lang="de-DE" translate="no" data-language="de"><a href="https://aws.amazon.com/de/?nc1=h_ls">Deutsch</a></li> <li lang="en-US" translate="no" data-language="en"><a href="https://aws.amazon.com/?nc1=h_ls">English</a></li> <li lang="es-ES" translate="no" data-language="es"><a href="https://aws.amazon.com/es/?nc1=h_ls">Español</a></li> <li lang="fr-FR" translate="no" data-language="fr"><a href="https://aws.amazon.com/fr/?nc1=h_ls">Français</a></li> <li lang="it-IT" translate="no" data-language="it"><a href="https://aws.amazon.com/it/?nc1=h_ls">Italiano</a></li> <li lang="pt-BR" translate="no" data-language="pt"><a href="https://aws.amazon.com/pt/?nc1=h_ls">Português</a></li> </ul> </div> <div class="lb-col lb-tiny-24 lb-mid-12"> <ul class="lb-txt-none lb-ul lb-list-style-none lb-tiny-ul-block"> <li lang="vi-VN" translate="no" data-language="vi"><a href="https://aws.amazon.com/vi/?nc1=f_ls">Tiếng Việt</a></li> <li lang="tr-TR" translate="no" data-language="tr"><a href="https://aws.amazon.com/tr/?nc1=h_ls">Türkçe</a></li> <li lang="ru-RU" translate="no" data-language="ru"><a href="https://aws.amazon.com/ru/?nc1=h_ls">Ρусский</a></li> <li lang="th-TH" translate="no" data-language="th"><a href="https://aws.amazon.com/th/?nc1=f_ls">ไทย</a></li> <li lang="ja-JP" translate="no" data-language="jp"><a href="https://aws.amazon.com/jp/?nc1=h_ls">日本語</a></li> <li lang="ko-KR" translate="no" data-language="ko"><a href="https://aws.amazon.com/ko/?nc1=h_ls">한국어</a></li> <li lang="zh-CN" translate="no" data-language="cn"><a href="https://aws.amazon.com/cn/?nc1=h_ls">中文 (简体)</a></li> <li lang="zh-TW" translate="no" data-language="tw"><a href="https://aws.amazon.com/tw/?nc1=h_ls">中文 (繁體)</a></li> </ul> </div> </div> </div> <div class="lb-popover lb-popover-aui lb-popover-tiny" data-lb-comp="popover" data-id="popover-my-account" id="popover-my-account" aria-modal="false" aria-labelledby="popover-popover-my-account-trigger" data-action="hover" data-position="top"> <a class="lb-popover-close" role="button" tabindex="0" aria-label="Close" title="Close"> <span class="lb-sr-only">Close</span> </a> <ul class="lb-txt-none lb-ul lb-list-style-none lb-tiny-ul-block"> <li class="m-no-auth" data-myaws-auth-only="true"><a href="https://aws.amazon.com/profile/?nc2=h_m_mc">My Profile</a></li> <li class="m-no-auth" data-myaws-auth-only="true"><a href="https://auth.aws.amazon.com/sign-out/?nc2=h_m_mc">Sign out of AWS Builder ID</a></li> <li><a href="https://console.aws.amazon.com/?nc2=h_m_mc">AWS Management Console</a></li> <li><a href="https://console.aws.amazon.com/billing/home#/account?nc2=h_m_ma">Account Settings</a></li> <li><a href="https://console.aws.amazon.com/billing/home?nc2=h_m_bc">Billing & Cost Management</a></li> <li><a href="https://console.aws.amazon.com/iam/home?nc2=h_m_sc#security_credential">Security Credentials</a></li> <li><a href="https://phd.aws.amazon.com/?nc2=h_m_sc">AWS Personal Health Dashboard</a></li> </ul> </div> <div class="lb-popover lb-popover-aui lb-popover-tiny" data-lb-comp="popover" data-id="popover-support-selector" id="popover-support-selector" aria-modal="false" aria-labelledby="popover-popover-support-selector-trigger" data-action="hover" data-position="top"> <a class="lb-popover-close" role="button" tabindex="0" aria-label="Close" title="Close"> <span class="lb-sr-only">Close</span> </a> <ul class="lb-txt-none lb-ul lb-list-style-none lb-tiny-ul-block"> <li><a href="https://console.aws.amazon.com/support/home/?nc2=h_ql_cu">Support Center</a></li> <li><a href="https://iq.aws.amazon.com/?utm=mkt.nav">Expert Help</a></li> <li><a href="https://repost.aws/knowledge-center/?nc2=h_m_ma">Knowledge Center</a></li> <li><a href="https://aws.amazon.com/premiumsupport/?nc2=h_m_bc">AWS Support Overview</a></li> <li><a href="https://repost.aws/">AWS re:Post</a></li> </ul> </div> <script type="text/x-handlebars-template" data-hbs-template-path="nav-desktop/suggestions" data-hbs-context="{"pricingText":"Pricing","documentationText":"Documentation","calculatorText":"Calculator"}"></script> <script type="text/x-handlebars-template" data-hbs-template-path="nav-desktop/products-head" data-hbs-context="{"productsText":"Products"}"></script> <script type="text/x-handlebars-template" data-hbs-template-path="nav-desktop/keypages-head" data-hbs-context="{"relatedPagesText":"Related Pages"}"></script> <script type="text/x-handlebars-template" data-hbs-template-path="nav-desktop/tutorials-head" data-hbs-context="{"tutorialsText":"Tutorials"}"></script> <script type="text/x-handlebars-template" data-hbs-template-path="nav-desktop/blogs-head" data-hbs-context="{"blogsText":"Blogs"}"></script> <script type="text/x-handlebars-template" data-hbs-template-path="nav-desktop/see-all" data-hbs-context="{"resultsText":"See more results for"}"></script> </div> <div id="m-nav-mobile" class="m-nav-mobile" role="navigation" aria-label="Global Navigation for Mobile"> <div id="m-nav-mobile-header" class="m-nav-mobile-header m-nav-mobile-with-sub-row" data-menu-url="https://s0.awsstatic.com/en_US/nav/v3/panel-content/mobile/index.html"> <div class="lb-bg-logo aws-amazon_web_services_smile-header-mobile-en"> <a href="https://aws.amazon.com/?nc2=h_lg"><span>Click here to return to Amazon Web Services homepage</span></a> </div> <div class="m-nav-mobile-button-group"> <button class="m-nav-mobile-button icon-search" tabindex="0" aria-expanded="false" aria-label="Search"> <svg viewbox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M10.5 10.5L14.5 14.5" stroke-width="2" stroke-linejoin="round" /> <path d="M7 12.5C10.0376 12.5 12.5 10.0376 12.5 7C12.5 3.96243 10.0376 1.5 7 1.5C3.96243 1.5 1.5 3.96243 1.5 7C1.5 10.0376 3.96243 12.5 7 12.5Z" stroke-width="2" stroke-linejoin="round" /> </svg> </button> <button class="m-nav-mobile-button icon-reorder" tabindex="0" aria-expanded="false" aria-label="Menu"> <svg viewbox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M15 3H1" stroke-width="2" stroke-linejoin="round" /> <path d="M15 8H1" stroke-width="2" stroke-linejoin="round" /> <path d="M15 13H1" stroke-width="2" stroke-linejoin="round" /> </svg> </button> <div class="lb-mbox js-mbox" data-lb-comp="mbox" data-lb-comp-ignore="true" data-mbox="en_header_mobile_nav_cta_test"> </div> </div> <div id="m-nav-mobile-sub-row" class="m-nav-mobile-sub-row"> <div class="data-attr-wrapper lb-btn" data-da-type="so" data-da-so-category="monitoring" data-da-so-language="en" data-da-so-name="global-mobile-sticky-cta-buttons" data-da-so-type="viewport" data-da-so-version="get-started-for-free-cta" data-da-so-url="all"> <a class="lb-btn-p-primary" href="https://portal.aws.amazon.com/gp/aws/developer/registration/index.html?nc2=h_mobile" role="button"> <span> Get Started for Free</span> </a> </div> <div class="data-attr-wrapper lb-btn" data-da-type="so" data-da-so-category="monitoring" data-da-so-language="en" data-da-so-name="global-mobile-sticky-cta-buttons" data-da-so-type="viewport" data-da-so-version="contact-us"> <a class="lb-btn-p" href="https://aws.amazon.com/contact-us/?nc2=h_mobile" role="button"> <span> Contact Us</span> </a> </div> </div> </div> <div id="m-nav-mobile-search" class="m-nav-mobile-search"> <form action="https://aws.amazon.com/search" role="search"> <div class="m-typeahead"> <input class="m-nav-search-field" placeholder="Search" autocomplete="off" spellcheck="false" dir="auto" type="text" name="searchQuery"> </div> </form> </div> <nav id="m-nav-trimdown" aria-label="Condensed Global Navigation for Mobile"> <ul class="m-nav-mobile-menu-group"> <li> <a href="https://aws.amazon.com/products/?nc2=h_mo">Products</a> </li> <li> <a href="https://aws.amazon.com/solutions/?nc2=h_mo">Solutions</a> </li> <li> <a href="https://aws.amazon.com/pricing/?nc2=h_mo">Pricing</a> </li> <li> <a href="https://aws.amazon.com/what-is-aws/?nc2=h_mo">Introduction to AWS</a> </li> <li> <a href="https://aws.amazon.com/getting-started/?nc2=h_mo">Getting Started</a> </li> <li> <a href="https://aws.amazon.com/documentation-overview/?nc2=h_mo">Documentation</a> </li> <li> <a href="https://aws.amazon.com/training/?nc2=h_mo">Training and Certification</a> </li> <li> <a href="https://aws.amazon.com/developer/?nc2=h_mo">Developer Center</a> </li> <li> <a href="https://aws.amazon.com/solutions/case-studies/?nc2=h_mo">Customer Success</a> </li> <li> <a href="https://aws.amazon.com/partners/?nc2=h_mo">Partner Network</a> </li> <li> <a href="https://aws.amazon.com/marketplace/?nc2=h_mo">AWS Marketplace</a> </li> <li> <a href="https://console.aws.amazon.com/support/home?nc2=h_ql_cu">Support</a> </li> <li> <a href="https://repost.aws/">AWS re:Post</a> </li> <li> <a href="https://console.aws.amazon.com/console/home">Log into Console</a> </li> <li> <a href="https://aws.amazon.com/console/mobile/">Download the Mobile App</a> </li> </ul> </nav> </div> </header> <div class="awsm"> <div class="lb-blog-nav" data-lb-comp="aws-blog:blog-nav" data-lb-sticky-header="true"> <div class="lb-row lb-row-max-xlarge lb-snap"> <div class="lb-blog-nav-content"> <div class="lb-blog-nav-links"> <a class="lb-txt-none lb-txt" href="/blogs" data-trk-params="{"trkOverrideWithQs":true}"> AWS Blog Home</a> <a class="lb-txt-none lb-txt lb-has-trigger-indicator" href="#" data-mbox-ignore="true" data-lb-popover-trigger="blog-category" role="button" aria-expanded="false" aria-label="Select blog category" id="popover-blog-category-trigger" aria-controls="blog-category" aria-haspopup="true" data-trk-params="{"trkOverrideWithQs":true}"> Blogs <i class="icon-caret-down lb-trigger-mount"></i></a> <a class="lb-txt-none lb-txt lb-has-trigger-indicator" href="#" data-mbox-ignore="true" data-lb-popover-trigger="blog-editions" role="button" aria-expanded="false" aria-label="Select blog language" id="popover-blog-editions-trigger" aria-controls="blog-editions" aria-haspopup="true" data-trk-params="{"trkOverrideWithQs":true}"> Editions <i class="icon-caret-down lb-trigger-mount"></i></a> </div> </div> </div> </div> <div class="lb-popover lb-popover-aui lb-popover-xlarge" data-lb-comp="popover" data-id="blog-category" id="blog-category" aria-modal="false" aria-labelledby="popover-blog-category-trigger" data-action="hover" data-position="top"> <a class="lb-popover-close" role="button" tabindex="0" aria-label="Close" title="Close"> <span class="lb-sr-only">Close</span> </a> <div class="lb-none-pad lb-none-v-margin lb-grid lb-row lb-row-max-large lb-snap"> <div class="lb-col lb-tiny-24 lb-mid-12"> <div class="lb-none-pad lb-none-v-margin lb-box"> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/architecture/"> Architecture</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/mt/" data-trk-params="{"trkOverrideWithQs":true}"> AWS Cloud Operations</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/gametech/" data-trk-params="{"trkOverrideWithQs":true}"> AWS for Games</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/aws-insights/"> AWS Insights</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/awsmarketplace/"> AWS Marketplace</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/aws/"> AWS News</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/apn/"> AWS Partner Network</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/smb/"> AWS Smart Business</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/big-data/"> Big Data</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/business-intelligence/"> Business Intelligence</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/business-productivity/"> Business Productivity</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/enterprise-strategy/" data-trk-params="{"trkOverrideWithQs":true}"> Cloud Enterprise Strategy</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/aws-cloud-financial-management/"> Cloud Financial Management</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/compute/"> Compute</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/contact-center/"> Contact Center</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/containers/"> Containers</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/database/"> Database</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/desktop-and-application-streaming/"> Desktop & Application Streaming</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/developer/" data-trk-params="{"trkOverrideWithQs":true}"> Developer Tools</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/devops/" data-trk-params="{"trkOverrideWithQs":true}"> DevOps & Developer Productivity</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/mobile/"> Front-End Web & Mobile</a> </div> </div> <div class="lb-col lb-tiny-24 lb-mid-12"> <div class="lb-none-pad lb-none-v-margin lb-box"> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/hpc/"> HPC</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/ibm-redhat/"> IBM and Red Hat</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/industries/"> Industries</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/infrastructure-and-automation/"> Integration & Automation</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/iot/"> Internet of Things</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/machine-learning/"> Machine Learning</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/media/"> Media</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/messaging-and-targeting/"> Messaging & Targeting</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/modernizing-with-aws/"> Microsoft Workloads on AWS</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/migration-and-modernization/"> Migration and Modernization</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/dotnet/"> .NET on AWS</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/networking-and-content-delivery/"> Networking & Content Delivery</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/opensource/"> Open Source</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/publicsector/"> Public Sector</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/quantum-computing/" data-trk-params="{"trkOverrideWithQs":true}"> Quantum Computing</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/robotics/"> Robotics</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/awsforsap/"> SAP</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/security/blogs/" data-trk-params="{"trkOverrideWithQs":true}"> Security</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/spatial/"> Spatial Computing</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/startups/"> Startups</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/storage/"> Storage</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/supply-chain/"> Supply Chain & Logistics</a> <a class="lb-txt-none lb-txt" href="https://aws.amazon.com/blogs/training-and-certification/"> Training & Certification</a> </div> </div> </div> </div> <div class="lb-popover lb-popover-aui lb-popover-tiny" data-lb-comp="popover" data-id="blog-editions" id="blog-editions" aria-modal="false" aria-labelledby="popover-blog-editions-trigger" data-action="hover" data-position="top"> <a class="lb-popover-close" role="button" tabindex="0" aria-label="Close" title="Close"> <span class="lb-sr-only">Close</span> </a> <ul class="lb-txt-none lb-none-v-margin lb-ul lb-list-style-none lb-li-micro-v-margin lb-tiny-ul-block"> <li translate="no" lang="zh-CN"><a href="https://aws.amazon.com/cn/blogs/china/">中国版</a></li> <li translate="no" lang="ja-JP"><a href="https://aws.amazon.com/jp/blogs/news/">日本版</a></li> <li translate="no" lang="ko-KR"><a href="https://aws.amazon.com/ko/blogs/korea/">한국 에디션</a></li> <li translate="no" lang="ko-KR"><a href="https://aws.amazon.com/ko/blogs/tech/">기술 블로그</a></li> <li translate="no" lang="id-ID"><a href="https://aws.amazon.com/id/blogs/indonesia/">Edisi Bahasa Indonesia</a></li> <li translate="no" lang="tr-TR"><a href="https://aws.amazon.com/th/blogs/thailand/">AWS Thai Blog</a></li> <li translate="no" lang="fr-FR"><a href="https://aws.amazon.com/fr/blogs/france/">Édition Française</a></li> <li translate="no" lang="de-DE"><a href="https://aws.amazon.com/de/blogs/germany/">Deutsche Edition</a></li> <li translate="no" lang="pt-BR"><a href="https://aws.amazon.com/pt/blogs/aws-brasil/">Edição em Português</a></li> <li translate="no" lang="es-ES"><a href="https://aws.amazon.com/es/blogs/aws-spanish/">Edición en Español</a></li> <li translate="no" lang="ru-RU"><a href="https://aws.amazon.com/ru/blogs/rus/">Версия на русском</a></li> <li translate="no" lang="tr-TR"><a href="https://aws.amazon.com/tr/blogs/turkey/">Türkçe Sürüm</a></li> </ul> </div> </div> <div id="aws-page-content" class="aws-blog-has-related-posts lb-page-content lb-page-with-sticky-subnav blog-page" data-page-alert-target="true"> <div class="aws-blog-content lb-row lb-row-max-large lb-snap lb-gutter-mid"> <main class="lb-col lb-tiny-24 lb-mid-16" role="main" id="aws-page-content-main" tabindex="-1"> <h2 class="lb-h5 blog-title"><a href="https://aws.amazon.com/blogs/aws/">AWS News Blog</a></h2> <article class="blog-post" vocab="https://schema.org/" typeof="TechArticle"> <meta property="inLanguage" content="en-US"> <meta property="image" content="https://d2908q01vomqb2.cloudfront.net/da4b9237bacccdf19c0760cab7aec4a8359010b0/2020/04/21/Site-Merch_TorchServe_SocialMedia_2.png"> <h1 class="lb-h2 blog-post-title" property="name headline">Announcing TorchServe, An Open Source Model Server for PyTorch</h1> <footer class="blog-post-meta" data-lb-comp="aws-blog:share-dialog"> <span>by <a href="https://aws.amazon.com/blogs/aws/author/julsimon/" title="Posts by Julien Simon">Julien Simon</a></span> <span>on <time property="datePublished" datetime="2020-04-21T09:30:57-07:00">21 APR 2020</time></span> <span>in <span class="blog-post-categories"><a href="https://aws.amazon.com/blogs/aws/category/post-types/announcements/" title="View all posts in Announcements"><span property="articleSection">Announcements</span></a>, <a href="https://aws.amazon.com/blogs/aws/category/artificial-intelligence/" title="View all posts in Artificial Intelligence"><span property="articleSection">Artificial Intelligence</span></a>, <a href="https://aws.amazon.com/blogs/aws/category/open-source/" title="View all posts in Open Source"><span property="articleSection">Open Source</span></a>, <a href="https://aws.amazon.com/blogs/aws/category/artificial-intelligence/pytorch-on-aws/" title="View all posts in PyTorch on AWS"><span property="articleSection">PyTorch on AWS</span></a>, <a href="https://aws.amazon.com/blogs/aws/category/artificial-intelligence/tensorflow-on-aws/" title="View all posts in Tensorflow on AWS"><span property="articleSection">Tensorflow on AWS</span></a></span></span> <span><a href="https://aws.amazon.com/blogs/aws/announcing-torchserve-an-open-source-model-server-for-pytorch/" property="url">Permalink</a></span> <span><a href="#" role="button" data-share-dialog-toggle><span class="span icon-share"></span> Share</a></span> <div class="blog-share-dialog" data-share-dialog style="display: none;"> <ul> <li> <a class="lb-txt" href="https://www.facebook.com/sharer/sharer.php?u=https://aws.amazon.com/blogs/aws/announcing-torchserve-an-open-source-model-server-for-pytorch/" target="_blank" rel="noopener noreferrer" aria-label="Share on Facebook"><span class="icon-facebook-square"></span></a> </li> <li> <a class="lb-txt" href="https://twitter.com/intent/tweet/?text=Announcing%20TorchServe%2C%20An%20Open%20Source%20Model%20Server%20for%20PyTorch&via=awscloud&url=https://aws.amazon.com/blogs/aws/announcing-torchserve-an-open-source-model-server-for-pytorch/" target="_blank" rel="noopener noreferrer" aria-label="Share on Twitter"><span class="icon-twitter-square"></span></a> </li> <li> <a class="lb-txt" href="https://www.linkedin.com/shareArticle?mini=true&title=Announcing%20TorchServe%2C%20An%20Open%20Source%20Model%20Server%20for%20PyTorch&source=Amazon%20Web%20Services&url=https://aws.amazon.com/blogs/aws/announcing-torchserve-an-open-source-model-server-for-pytorch/" target="_blank" rel="noopener noreferrer" aria-label="Share on LinkedIn"><span class="icon-linkedin-square"></span></a> </li> <li> <a class="lb-txt" href="mailto:?subject=Announcing%20TorchServe%2C%20An%20Open%20Source%20Model%20Server%20for%20PyTorch&body=Announcing%20TorchServe%2C%20An%20Open%20Source%20Model%20Server%20for%20PyTorch%0A%0Ahttps://aws.amazon.com/blogs/aws/announcing-torchserve-an-open-source-model-server-for-pytorch/" target="_blank" rel="noopener noreferrer" aria-label="Share on Email"><span class="icon-envelope-square"></span></a> </li> <li class="blog-share-dialog-url"><input type="text" value="https://aws.amazon.com/blogs/aws/announcing-torchserve-an-open-source-model-server-for-pytorch/" title="Link to Announcing TorchServe, An Open Source Model Server for PyTorch" readonly data-share-dialog-url></li> </ul> </div> </footer> <section class="blog-post-content lb-rtxt" property="articleBody"> <table id="amazon-polly-audio-table"> <tbody> <tr> <td id="amazon-polly-audio-tab"> <div id="amazon-ai-player-label"></div> <div id="amazon-ai-player-container"> <audio class="amazon-ai-player" id="amazon-ai-player" preload="none" controls> <source type="audio/mpeg" src="https://d2908q01vomqb2.cloudfront.net/polly/da4b9237bacccdf19c0760cab7aec4a8359010b0amazon_polly_36459.mp3?version=1587486919"> </audio> </div> <div id="amazon-polly-subscribe-tab"></div> <div id="amazon-polly-by-tab"> <a href="https://aws.amazon.com/polly/" target="_blank" rel="noopener noreferrer"><img src="https://a0.awsstatic.com/aws-blog/images/Voiced_by_Amazon_Polly_EN.png" alt="Voiced by Polly" width="554" height="56"></a> </div> </td> </tr> </tbody> </table> <p><a href="http://aws.amazon.com/pytorch" target="_blank" rel="noopener noreferrer">PyTorch</a> is one of the most popular open source libraries for deep learning. Developers and researchers particularly enjoy the flexibility it gives them in building and training models. Yet, this is only half the story, and deploying and managing models in production is often the most difficult part of the machine learning process: building bespoke prediction APIs, scaling them, securing them, etc.</p> <p>One way to simplify the model deployment process is to use a model server, i.e. an off-the-shelf web application specially designed to serve machine learning predictions in production. Model servers make it easy to load one or several models, automatically creating a prediction API backed by a scalable web server. They’re also able to run preprocessing and postprocessing code on prediction requests. Last but not least, model servers also provide production-critical features like logging, monitoring, and security. Popular model servers include <a href="https://www.tensorflow.org/tfx/guide/serving">TensorFlow Serving</a> and the <a href="https://github.com/awslabs/multi-model-server">Multi Model Server</a>.</p> <p>Today, I’m extremely happy to announce <a href="https://github.com/pytorch/serve">TorchServe</a>, a PyTorch model serving library that makes it easy to deploy trained PyTorch models at scale without having to write custom code.</p> <p><span style="text-decoration: underline;"><strong>Introducing TorchServe<br> </strong></span><a href="https://github.com/pytorch/serve">TorchServe</a> is a collaboration between AWS and Facebook, and it’s available as part of the <a href="https://pytorch.org/">PyTorch</a> open source project. If you’re interested in how the project was initiated, you can read the initial <a href="https://github.com/pytorch/pytorch/issues/27610">RFC</a> on Github.</p> <p>With <a href="https://github.com/pytorch/serve">TorchServe</a>, PyTorch users can now bring their models to production quicker, without having to write custom code: on top of providing a low latency prediction API, <a href="https://github.com/pytorch/serve">TorchServe</a> embeds default handlers for the most common applications such as object detection and text classification. In addition, <a href="https://github.com/pytorch/serve">TorchServe</a> includes multi-model serving, model versioning for A/B testing, monitoring metrics, and RESTful endpoints for application integration. As you would expect, <a href="https://github.com/pytorch/serve">TorchServe</a> supports any machine learning environment, including <a href="https://aws.amazon.com/sagemaker/">Amazon SageMaker</a>, container services, and <a href="https://aws.amazon.com/ec2/">Amazon Elastic Compute Cloud (Amazon EC2)</a>.</p> <p>Several customers are already enjoying the benefits of <a href="https://github.com/pytorch/serve">TorchServe</a>.</p> <p><a href="https://www.tri-ad.global/">Toyota Research Institute Advanced Development, Inc.</a> (TRI-AD) is developing software for automated driving at <a href="https://global.toyota/en/">Toyota Motor Corporation</a>. Says Yusuke Yachide, Lead of ML Tools at TRI-AD: “we continuously optimize and improve our computer vision models, which are critical to TRI-AD’s mission of achieving safe mobility for all with autonomous driving. Our models are trained with PyTorch on AWS, but until now PyTorch lacked a model serving framework. As a result, we spent significant engineering effort in creating and maintaining software for deploying PyTorch models to our fleet of vehicles and cloud servers. With <a href="https://github.com/pytorch/serve">TorchServe</a>, we now have a performant and lightweight model server that is officially supported and maintained by AWS and the PyTorch community”.</p> <p><a href="https://www.matroid.com/">Matroid</a> is a maker of computer vision software that detects objects and events in video footage. Says Reza Zadeh, Founder and CEO at Matroid Inc.: “we develop a rapidly growing number of machine learning models using PyTorch on AWS and on-premise environments. The models are deployed using a custom model server that requires converting the models to a different format, which is time-consuming and burdensome. <a href="https://github.com/pytorch/serve">TorchServe</a> allows us to simplify model deployment using a single servable file that also serves as the single source of truth, and is easy to share and manage”.</p> <p>Now, I’d like to show you how to install <a href="https://github.com/pytorch/serve">TorchServe</a>, and load a pretrained model on <a href="https://aws.amazon.com/ec2/">Amazon Elastic Compute Cloud (Amazon EC2)</a>. You can try other environments by following the <a href="https://github.com/pytorch/serve/tree/master/docs">documentation</a>.</p> <p><span style="text-decoration: underline;"><strong>Installing TorchServe</strong></span><br> First, I fire up a CPU-based <a href="https://aws.amazon.com/ec2/">Amazon Elastic Compute Cloud (Amazon EC2)</a> instance running the <a href="https://aws.amazon.com/marketplace/pp/Amazon-Web-Services-AWS-Deep-Learning-AMI-Ubuntu-1/B07Y43P7X5">Deep Learning AMI (Ubuntu edition)</a>. This AMI comes preinstalled with several dependencies that I’ll need, which will speed up setup. Of course you could use any AMI instead.</p> <p><a href="https://github.com/pytorch/serve">TorchServe</a> is implemented in Java, and I need the latest OpenJDK to run it.</p> <p><code>sudo apt install openjdk-11-jdk</code></p> <p>Next, I create and activate a new <a href="https://docs.conda.io/en/latest/">Conda</a> environment for <a href="https://github.com/pytorch/serve">TorchServe</a>. This will keep my Python packages nice and tidy (<em>virtualenv</em> works too, of course).</p> <p><code>conda create -n torchserve</code></p> <p><code>source activate torchserve</code></p> <p>Next, I install dependencies for <a href="https://github.com/pytorch/serve">TorchServe</a>.</p> <p><code>pip install sentencepiece # not available as a Conda package</code></p> <p><code>conda install psutil pytorch torchvision torchtext -c pytorch </code></p> <p>If you’re using a GPU instance, you’ll need an extra package.</p> <p><code>conda install cudatoolkit=10.1</code><code></code></p> <p>Now that dependencies are installed, I can clone the <a href="https://github.com/pytorch/serve">TorchServe</a> repository, and install <a href="https://github.com/pytorch/serve">TorchServe</a>.</p> <p><code>git clone https://github.com/pytorch/serve.git</code></p> <p><code>cd serve</code></p> <p><code>pip install .</code></p> <p><code>cd model-archiver</code></p> <p><code>pip install .</code></p> <p>Setup is complete, let’s deploy a model!</p> <p><span style="text-decoration: underline;"><strong>Deploying a Model<br> </strong></span>For the sake of this demo, I’ll simply download a pretrained model from the PyTorch <a href="https://pytorch.org/docs/stable/torchvision/models.html">model zoo</a>. In real life, you would probably use your own model.</p> <p><code>wget https://download.pytorch.org/models/densenet161-8d451a50.pth</code></p> <p>Next, I need to package the model into a model archive. A model archive is a ZIP file storing all model artefacts, i.e. the model itself (<em>densenet161-8d451a50.pth</em>), a Python script to load the state dictionary (matching tensors to layers), and any extra file you may need. Here, I include a file named <em>index_to_name.json</em>, which maps class identifiers to class names. This will be used by the built-in <em>image_classifier</em> handler, which is in charge of the prediction logic. Other built-in handlers are available (<em>object_detector</em>, <em>text_classifier</em>, <em>image_segmenter</em>), and you can implement your own.</p> <p><code>torch-model-archiver --model-name densenet161 --version 1.0 \<br> --model-file examples/image_classifier/densenet_161/model.py \<br> --serialized-file densenet161-8d451a50.pth \<br> --extra-files examples/image_classifier/index_to_name.json \<br> --handler image_classifier</code></p> <p>Next, I create a directory to store model archives, and I move the one I just created there.</p> <p><code>mkdir model_store</code></p> <p><code>mv densenet161.mar model_store/</code></p> <p>Now, I can start <a href="https://github.com/pytorch/serve">TorchServe</a>, pointing it at the model store and at the model I want to load. Of course, I could load several models if needed.</p> <p><code>torchserve --start --model-store model_store --models densenet161=densenet161.mar</code></p> <p>Still on the same machine, I grab an image and easily send it to <a href="https://github.com/pytorch/serve">TorchServe</a> for local serving using an HTTP POST request. Note the format of the URL, which includes the name of the model I want to use.</p> <p><code>curl -O https://s3.amazonaws.com/model-server/inputs/kitten.jpg</code></p> <p><code>curl -X POST http://127.0.0.1:8080/predictions/densenet161 -T kitten.jpg</code></p> <p>The result appears immediately. Note that class names are visible, thanks to the built-in handler.</p> <p><code>[</code><br> <code>{"tiger_cat": 0.4693356156349182},</code><br> <code>{"tabby": 0.46338796615600586},</code><br> <code>{"Egyptian_cat": 0.06456131488084793},</code><br> <code>{"lynx": 0.0012828155886381865},</code><br> <code>{"plastic_bag": 0.00023323005007114261}</code><br> <code>]</code></p> <p>I then stop <a href="https://github.com/pytorch/serve">TorchServe</a> with the ‘<em>stop</em>‘ command.</p> <p><code>torchserve --stop</code></p> <p>As you can see, it’s easy to get started with <a href="https://github.com/pytorch/serve">TorchServe</a> using the default configuration. Now let me show you how to set it up for remote serving.</p> <p><strong><span style="text-decoration: underline;">Configuring TorchServe for Remote Serving</span></strong><br> Let’s create a configuration file for <a href="https://github.com/pytorch/serve">TorchServe</a>, named <em>config.properties</em> (the default name). This files defines which model to load, and sets up remote serving. Here, I’m binding the server to all public IP addresses, but you can restrict it to a specific address if you want to. As this is running on an EC2 instance, I need to make sure that ports 8080 and 8081 are open in the Security Group.</p> <p><code>model_store=model_store</code><br> <code>load_models=densenet161.mar</code><br> <code>inference_address=http://0.0.0.0:8080</code><br> <code>management_address=http://0.0.0.0:8081</code></p> <p>Now I can start <a href="https://github.com/pytorch/serve">TorchServe</a> in the same directory, without having to pass any command line arguments.</p> <p><code>torchserve --start</code></p> <p>Moving back to my local machine, I can now invoke <a href="https://github.com/pytorch/serve">TorchServe</a> remotely, and get the same result.</p> <p><code>curl -X POST http://ec2-54-85-61-250.compute-1.amazonaws.com:8080/predictions/densenet161 -T kitten.jpg</code></p> <p>You probably noticed that I used HTTP. I’m guessing a lot of you will require HTTPS in production, so let me show you how to set it up.</p> <p><strong><span style="text-decoration: underline;">Configuring TorchServe for HTTPS<br> </span></strong><a href="https://github.com/pytorch/serve">TorchServe</a> can use either the Java keystore or a certificate. I’ll go with the latter.</p> <p>First, I create a certificate and a private key with <em>openssl</em>.</p> <p><code>openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem</code></p> <p>Then, I update the configuration file to define the location of the certificate and key, and I bind <a href="https://github.com/pytorch/serve">TorchServe</a> to its default secure ports (don’t forget to update the Security Group).</p> <p><code>model_store=model_store</code><br> <code>load_models=densenet161.mar</code><br> <code>inference_address=https://0.0.0.0:8443</code><br> <code>management_address=https://0.0.0.0:8444</code><br> <code>private_key_file=mykey.key</code><br> <code>certificate_file=mycert.pem</code></p> <p>I restart <a href="https://github.com/pytorch/serve">TorchServe</a>, and I can now invoke it with HTTPS. As I use a self-signed certificate, I need to pass the ‘–insecure’ flag to <em>curl</em>.</p> <p><code>curl --insecure -X POST https://ec2-54-85-61-250.compute-1.amazonaws.com:8443/predictions/densenet161 -T kitten.jpg</code></p> <p>There’s a lot more to <a href="https://github.com/pytorch/serve">TorchServe</a> configuration, and I encourage you to read its <a href="https://github.com/pytorch/serve/tree/master/docs">documentation</a>!</p> <p><strong><span style="text-decoration: underline;">Getting Started</span></strong><br> <a href="https://github.com/pytorch/serve">TorchServe</a> is available now at <a href="https://github.com/pytorch/serve">https://github.com/pytorch/serve</a>.</p> <p>Give it a try, and please send us feedback on <a href="https://github.com/pytorch/pytorch/issues/">Github</a>.</p> <a href="https://aws.amazon.com/developer/community/evangelists/julien-simon/">- Julien</a> <!-- '"` --> </section> <footer> <div class="blog-author-box" property="author" typeof="Person"> <div class="blog-author-image"> <img alt="Julien Simon" src="https://d2908q01vomqb2.cloudfront.net/da4b9237bacccdf19c0760cab7aec4a8359010b0/2018/11/22/julienv2.png" width="125" property="image"> </div> <h3 class="lb-h4"> <a href="https://aws.amazon.com/blogs/aws/author/julsimon/" title="Posts by Julien Simon" property="name">Julien Simon</a> </h3> <p property="description">As an Artificial Intelligence & Machine Learning Evangelist for EMEA, Julien focuses on helping developers and enterprises bring their ideas to life.</p> </div> </footer> <div class="js-mbox" data-mbox="en_blog_post_comments"></div> </article> </main> <div class="blog-sidebar lb-col lb-tiny-24 lb-mid-8"> <div class="awsm"> <div class="lb-box" style="padding-left:30px;"> <h3 id="Resources" class="lb-txt-none lb-h3 lb-title" style="margin-top:30px;"> Resources</h3> <div class="data-attr-wrapper lb-none-pad lb-none-v-margin lb-box" data-da-type="ha" data-da-channel="ha" data-da-language="en" data-da-placement="blog-sb-resources" data-da-campaign="acq_awsblogsb" data-da-content="news-resources" data-da-trk="blog_initial"> <ul class="lb-txt-none lb-none-v-margin lb-ul lb-list-style-none lb-li-none-v-margin lb-tiny-ul-block"> <li><a href="https://aws.amazon.com/getting-started?sc_ichannel=ha&sc_icampaign=acq_awsblogsb&sc_icontent=news-resources">Getting Started</a></li> <li><a href="https://aws.amazon.com/new?sc_ichannel=ha&sc_icampaign=acq_awsblogsb&sc_icontent=news-resources">What's New</a></li> <li><a href="https://aws.amazon.com/blogs?sc_ichannel=ha&sc_icampaign=acq_awsblogsb&sc_icontent=news-resources">Top Posts</a></li> <li><a href="https://aws.amazon.com/podcasts/aws-podcast?sc_ichannel=ha&sc_icampaign=acq_awsblogsb&sc_icontent=news-resources">Official AWS Podcast</a></li> <li><a href="https://aws.amazon.com/solutions/case-studies?sc_ichannel=ha&sc_icampaign=acq_awsblogsb&sc_icontent=news-resources">Case Studies</a></li> <li><a href="https://repost.aws/" title="https://repost.aws/" alt="https://repost.aws/">AWS re:Post</a></li> </ul> <div class="lb-grid lb-row lb-row-max-large lb-snap"> <div class="lb-col lb-tiny-24 lb-mid-8"> <hr class="lb-divider"> </div> <div class="lb-col lb-tiny-24 lb-mid-8"> </div> <div class="lb-col lb-tiny-24 lb-mid-8"> </div> </div> </div> <h3 id="Follow" class="lb-txt-none lb-h3 lb-title"> Follow</h3> <div class="data-attr-wrapper lb-none-pad lb-none-v-margin lb-box" data-da-type="ha" data-da-channel="ha" data-da-language="en" data-da-placement="blog-sb-social" data-da-campaign="acq_awsblogsb" data-da-content="news-social" data-da-trk="blog_initial"> <ul class="lb-txt-none lb-none-v-margin lb-ul lb-list-style-none lb-li-none-v-margin lb-tiny-ul-block"> <li><a href="https://twitter.com/awscloud"><i class="icon-twitter-square lb-before"></i> Twitter</a></li> <li><a href="https://www.facebook.com/amazonwebservices"><i class="icon-facebook-square lb-before"></i> Facebook</a></li> <li><a href="https://www.linkedin.com/company/amazon-web-services/"><i class="icon-linkedin-square lb-before"></i> LinkedIn</a></li> <li><a href="https://www.twitch.tv/aws"><i class="icon-twitch lb-before"></i> Twitch</a></li> <li><a href="https://aws.amazon.com/blogs/aws/feed/"><i class="icon-rss-square lb-before"></i> RSS Feed</a></li> <li><a href="https://pages.awscloud.com/communication-preferences?sc_ichannel=ha&sc_icampaign=acq_awsblogsb&sc_icontent=news-social"><i class="icon-envelope-square lb-before"></i> Email Updates</a></li> </ul> </div> </div> </div> <div class="js-mbox" data-mbox="en_blog_post_sidebar"></div> </div> </div> </div> <div class="awsm"> <footer id="aws-page-footer" class="m-page-footer" role="contentinfo"> <div class="data-attr-wrapper lb-none-v-margin lb-xb-grid-wrap" style="background-color:#141f2e;" data-da-type="so" data-da-so-type="viewport" data-da-so-language="en" data-da-so-category="monitoring" data-da-so-name="footer" data-da-so-version="a"> <div class="lb-xb-grid lb-row-max-large lb-snap lb-tiny-xb-1 lb-small-xb-3 lb-large-xb-5"> <div class="lb-xbcol"> <div class="data-attr-wrapper lb-small-hide lb-btn" data-da-type="so" data-da-so-type="viewport" data-da-so-language="en" data-da-so-category="monitoring" data-da-so-name="footer_buttons" data-da-so-url="all" data-da-so-version="footer_signin-mobile-default"> <a class="lb-btn-p-primary" href="https://console.aws.amazon.com/console/home?nc1=f_ct&src=footer-signin-mobile" role="button"> <span> Sign In to the Console</span> </a> </div> <h3 class="lb-txt-none lb-txt-white lb-tiny-v-margin lb-h3 lb-title"> Learn About AWS</h3> <ul class="lb-txt-white lb-ul lb-list-style-none lb-li-micro-v-margin lb-tiny-ul-block" style="margin-bottom:0px;"> <li><a href="https://aws.amazon.com/what-is-aws/?nc1=f_cc" target="_blank" rel="noopener noreferrer">What Is AWS?</a></li> <li><a href="https://aws.amazon.com/what-is-cloud-computing/?nc1=f_cc" target="_blank" rel="noopener noreferrer">What Is Cloud Computing?</a></li> <li><a href="https://aws.amazon.com/accessibility/?nc1=f_cc" target="_blank" rel="noopener noreferrer">AWS Accessibility</a></li> <li><a href="https://aws.amazon.com/diversity-inclusion/?nc1=f_cc" target="_blank" rel="noopener noreferrer">AWS Inclusion, Diversity & Equity</a></li> <li><a href="https://aws.amazon.com/devops/what-is-devops/?nc1=f_cc" target="_blank" rel="noopener noreferrer">What Is DevOps?</a></li> <li><a href="https://aws.amazon.com/containers/?nc1=f_cc" target="_blank" rel="noopener noreferrer">What Is a Container?</a></li> <li><a href="https://aws.amazon.com/what-is/data-lake/?nc1=f_cc" target="_blank" rel="noopener noreferrer">What Is a Data Lake?</a></li> <li><a href="https://aws.amazon.com/what-is/artificial-intelligence/?nc1=f_cc" target="_blank" rel="noopener noreferrer">What is Artificial Intelligence (AI)?</a></li> <li><a href="https://aws.amazon.com/what-is/generative-ai/?nc1=f_cc" target="_blank" rel="noopener noreferrer">What is Generative AI?</a></li> <li><a href="https://aws.amazon.com/what-is/machine-learning/?nc1=f_cc" target="_blank" rel="noopener noreferrer">What is Machine Learning (ML)?</a></li> <li><a href="https://aws.amazon.com/security/?nc1=f_cc" target="_blank" rel="noopener noreferrer">AWS Cloud Security</a></li> <li><a href="https://aws.amazon.com/new/?nc1=f_cc" target="_blank" rel="noopener noreferrer">What's New</a></li> <li><a href="https://aws.amazon.com/blogs/?nc1=f_cc" target="_blank" rel="noopener noreferrer">Blogs</a></li> <li><a href="https://press.aboutamazon.com/press-releases/aws" target="_blank" rel="noopener noreferrer" title="Press Releases" alt="Press Releases">Press Releases</a></li> </ul> </div> <div class="lb-xbcol"> <h3 class="lb-txt-none lb-txt-white lb-tiny-v-margin lb-h3 lb-title"> Resources for AWS</h3> <ul class="lb-txt-white lb-ul lb-list-style-none lb-li-micro-v-margin lb-tiny-ul-block" style="margin-bottom:0px;"> <li><a href="https://aws.amazon.com/getting-started/?nc1=f_cc" target="_blank" rel="noopener noreferrer">Getting Started</a></li> <li><a href="https://aws.amazon.com/training/?nc1=f_cc" target="_blank" rel="noopener noreferrer">Training and Certification</a></li> <li><a href="https://aws.amazon.com/solutions/?nc1=f_cc" target="_blank" rel="noopener noreferrer">AWS Solutions Library</a></li> <li><a href="https://aws.amazon.com/architecture/?nc1=f_cc" target="_blank" rel="noopener noreferrer">Architecture Center</a></li> <li><a href="https://aws.amazon.com/faqs/?nc1=f_dr" target="_blank" rel="noopener noreferrer">Product and Technical FAQs</a></li> <li><a href="https://aws.amazon.com/resources/analyst-reports/?nc1=f_cc" target="_blank" rel="noopener noreferrer">Analyst Reports</a></li> <li><a href="https://aws.amazon.com/partners/work-with-partners/?nc1=f_dr" target="_blank" rel="noopener noreferrer">AWS Partners</a></li> </ul> </div> <div class="lb-xbcol"> <h3 class="lb-txt-none lb-txt-white lb-tiny-v-margin lb-h3 lb-title"> Developers on AWS</h3> <ul class="lb-txt-white lb-ul lb-list-style-none lb-li-micro-v-margin lb-tiny-ul-block" style="margin-bottom:0px;"> <li><a href="https://aws.amazon.com/developer/?nc1=f_dr" target="_blank" rel="noopener noreferrer">Developer Center</a></li> <li><a href="https://aws.amazon.com/developer/tools/?nc1=f_dr" target="_blank" rel="noopener noreferrer">SDKs & Tools</a></li> <li><a href="https://aws.amazon.com/developer/language/net/?nc1=f_dr" target="_blank" rel="noopener noreferrer">.NET on AWS</a></li> <li><a href="https://aws.amazon.com/developer/language/python/?nc1=f_dr" target="_blank" rel="noopener noreferrer">Python on AWS</a></li> <li><a href="https://aws.amazon.com/developer/language/java/?nc1=f_dr" target="_blank" rel="noopener noreferrer">Java on AWS</a></li> <li><a href="https://aws.amazon.com/developer/language/php/?nc1=f_cc" target="_blank" rel="noopener noreferrer">PHP on AWS</a></li> <li><a href="https://aws.amazon.com/developer/language/javascript/?nc1=f_dr" target="_blank" rel="noopener noreferrer">JavaScript on AWS</a></li> </ul> </div> <div class="lb-xbcol"> <h3 class="lb-txt-none lb-txt-white lb-tiny-v-margin lb-h3 lb-title"> Help</h3> <ul class="lb-txt-white lb-ul lb-list-style-none lb-li-micro-v-margin lb-tiny-ul-block" style="margin-bottom:0px;"> <li><a href="https://aws.amazon.com/contact-us/?nc1=f_m" target="_blank" rel="noopener noreferrer">Contact Us</a></li> <li><a href="https://iq.aws.amazon.com/?utm=mkt.foot/?nc1=f_m" target="_blank" rel="noopener noreferrer">Get Expert Help</a></li> <li><a href="https://console.aws.amazon.com/support/home/?nc1=f_dr" target="_blank" rel="noopener noreferrer">File a Support Ticket</a></li> <li><a href="https://repost.aws/?nc1=f_dr" target="_blank" rel="noopener noreferrer">AWS re:Post</a></li> <li><a href="https://repost.aws/knowledge-center/?nc1=f_dr" target="_blank" rel="noopener noreferrer">Knowledge Center</a></li> <li><a href="https://aws.amazon.com/premiumsupport/?nc1=f_dr" target="_blank" rel="noopener noreferrer">AWS Support Overview</a></li> <li><a href="https://aws.amazon.com/legal/?nc1=f_cc" target="_blank" rel="noopener noreferrer">Legal</a></li> <li><a href="https://aws.amazon.com/careers/">AWS Careers</a></li> </ul> <div class="lb-mbox js-mbox" data-lb-comp="mbox" data-lb-comp-ignore="true" data-mbox="en_footer-v3_addl-help"> </div> </div> <div class="lb-xbcol"> <div class="lb-mbox js-mbox" data-lb-comp="mbox" data-lb-comp-ignore="true" data-mbox="en_footer-v3_cta"> <div class="data-attr-wrapper lb-tiny-hide lb-small-show lb-btn" data-da-type="so" data-da-so-type="viewport" data-da-so-language="en" data-da-so-category="monitoring" data-da-so-name="footer_buttons" data-da-so-url="all" data-da-so-version="footer_signup-default"> <a class="lb-btn-p-primary" href="https://portal.aws.amazon.com/gp/aws/developer/registration/index.html?nc1=f_ct&src=default" role="button"> <span> Create an AWS Account</span> </a> </div> </div> <div class="lb-xb-grid-wrap" style="padding-left:0px; margin-top:20px; margin-bottom:0px;"> <div class="lb-xb-grid lb-row-max-large lb-xb-equal-height lb-snap lb-gutter-collapse lb-vgutter-collapse lb-tiny-xb-4"> <div class="lb-xbcol"> <a class="lb-txt-none lb-txt-white lb-none-pad lb-txt" style="padding-left:0px; padding-right:5px;" href="https://twitter.com/awscloud" target="_blank" rel="noopener noreferrer" title="Twitter" alt="Twitter"> <i class="icon-twitter lb-before"></i></a> </div> <div class="lb-xbcol"> <a class="lb-txt-none lb-txt-white lb-none-pad lb-none-v-margin lb-txt" style="padding-right:5px;" href="https://www.facebook.com/amazonwebservices" target="_blank" rel="noopener noreferrer" title="Facebook" alt="Facebook"> <i class="icon-facebook lb-before"></i></a> </div> <div class="lb-xbcol"> <a class="lb-txt-none lb-txt-white lb-none-pad lb-txt" style="padding-right:5px;" href="https://www.linkedin.com/company/amazon-web-services/" target="_blank" rel="noopener noreferrer" title="Linkedin" alt="Linkedin"> <i class="icon-linkedin lb-before"></i></a> </div> <div class="lb-xbcol"> <a class="lb-txt-none lb-txt-white lb-none-pad lb-txt" style="padding-right:5px;" href="https://www.instagram.com/amazonwebservices/" target="_blank" rel="noopener noreferrer" title="Instagram" alt="Instagram"> <i class="icon-instagram lb-before"></i></a> </div> </div> </div> <div class="lb-xb-grid-wrap" style="padding-left:0px; margin-top:10px;"> <div class="lb-xb-grid lb-row-max-large lb-xb-equal-height lb-snap lb-gutter-collapse lb-vgutter-collapse lb-tiny-xb-4"> <div class="lb-xbcol"> <a class="lb-txt-none lb-txt-white lb-none-pad lb-txt" style="padding-right:5px;" href="https://www.twitch.tv/aws" target="_blank" rel="noopener noreferrer" title="Twitch" alt="Twitch"> <i class="icon-twitch lb-before"></i></a> </div> <div class="lb-xbcol"> <a class="lb-txt-none lb-txt-white lb-none-pad lb-txt" style="padding-right:5px;" href="https://www.youtube.com/user/AmazonWebServices/Cloud/" target="_blank" rel="noopener noreferrer" title="YouTube" alt="YouTube"> <i class="icon-youtube lb-before"></i></a> </div> <div class="lb-xbcol"> <a class="lb-txt-none lb-txt-white lb-none-pad lb-txt" style="padding-right:5px;" href="https://aws.amazon.com/podcasts/" target="_blank" rel="noopener noreferrer" title="Podcast" alt="Podcast"> <i class="icon-podcast lb-before"></i></a> </div> <div class="lb-xbcol"> <a class="lb-txt-none lb-txt-white lb-none-pad lb-txt" style="padding-right:5px;" href="https://pages.awscloud.com/communication-preferences?trk=homepage" target="_blank" rel="noopener noreferrer" title="Email" alt="Email"> <i class="icon-envelope-o lb-before"></i></a> </div> </div> </div> <div class="lb-txt-normal lb-txt-white lb-txt-14 lb-rtxt" style="color:#eaeded; margin-top:0px;"> <div> Amazon is an Equal Opportunity Employer: <i> Minority / Women / Disability / Veteran / Gender Identity / Sexual Orientation / Age.</i> </div> </div> </div> </div> </div> <div class="lb-none-pad lb-none-v-margin lb-xb-grid-wrap" style="background-color:#141f2e;"> <div class="lb-xb-grid lb-row-max-large lb-snap lb-tiny-xb-1"> <div class="lb-xbcol"> <ul class="lb-txt-white lb-tiny-iblock lb-none-v-margin lb-ul lb-list-style-none lb-li-micro-v-margin lb-tiny-ul-iblock"> <li class="lb-txt-bold">Language</li> <li data-language="ar" lang="ar-SA" translate="no"><a href="https://aws.amazon.com/ar/?nc1=h_ls">عربي</a></li> <li data-language="id" lang="id-ID" translate="no"><a href="https://aws.amazon.com/id/?nc1=h_ls">Bahasa Indonesia</a></li> <li data-language="de" lang="de-DE" translate="no"><a href="https://aws.amazon.com/de/?nc1=h_ls">Deutsch</a></li> <li data-language="en" lang="en-US" translate="no"><a href="https://aws.amazon.com/?nc1=h_ls">English</a></li> <li data-language="es" lang="es-ES" translate="no"><a href="https://aws.amazon.com/es/?nc1=h_ls">Español</a></li> <li data-language="fr" lang="fr-FR" translate="no"><a href="https://aws.amazon.com/fr/?nc1=h_ls">Français</a></li> <li data-language="it" lang="it-IT" translate="no"><a href="https://aws.amazon.com/it/?nc1=h_ls">Italiano</a></li> <li data-language="pt" lang="pt-BR" translate="no"><a href="https://aws.amazon.com/pt/?nc1=h_ls">Português</a></li> <li data-language="vi" lang="vi-VN" translate="no"><a href="https://aws.amazon.com/vi/?nc1=f_ls">Tiếng Việt</a></li> <li data-language="tr" lang="tr-TR" translate="no"><a href="https://aws.amazon.com/tr/?nc1=h_ls">Türkçe</a></li> <li data-language="ru" lang="ru-RU" translate="no"><a href="https://aws.amazon.com/ru/?nc1=h_ls">Ρусский</a></li> <li data-language="th" lang="th-TH" translate="no"><a href="https://aws.amazon.com/th/?nc1=f_ls">ไทย</a></li> <li data-language="jp" lang="ja-JP" translate="no"><a href="https://aws.amazon.com/jp/?nc1=h_ls">日本語</a></li> <li data-language="ko" lang="ko-KR" translate="no"><a href="https://aws.amazon.com/ko/?nc1=h_ls">한국어</a></li> <li data-language="cn" lang="zh-CN" translate="no"><a href="https://aws.amazon.com/cn/?nc1=h_ls">中文 (简体)</a></li> <li data-language="tw" lang="zh-TW" translate="no"><a href="https://aws.amazon.com/tw/?nc1=h_ls">中文 (繁體)</a></li> </ul> </div> </div> </div> <div class="lb-none-pad lb-none-v-margin lb-xb-grid-wrap" style="background-color:#EAEDED; padding-top:5px;"> <div class="lb-xb-grid lb-row-max-large lb-snap lb-tiny-xb-1"> <div class="lb-xbcol"> <div class="lb-mbox js-mbox" data-lb-comp="mbox" data-lb-comp-ignore="true" data-mbox="en_footer-legal-links"> <ul class="lb-txt-squid lb-none-v-margin lb-ul lb-list-style-none lb-li-none-v-margin lb-tiny-ul-iblock"> <li><a href="https://aws.amazon.com/privacy/?nc1=f_pr">Privacy</a></li> <li>|</li> <li><a href="https://aws.amazon.com/accessibility/?nc1=f_acc">Accessibility</a></li> <li>|</li> <li><a href="https://aws.amazon.com/terms/?nc1=f_pr">Site Terms</a></li> <li>|</li> <li data-cookie-consent-modal="1"><a href="#"> Cookie Preferences </a></li> <li>|</li> <li>© 2024, Amazon Web Services, Inc. or its affiliates. All rights reserved.</li> </ul> </div> </div> </div> </div> </footer> </div> <div id="aws-page-end"></div> <div id="lb-page-end"></div> <script src="https://a0.awsstatic.com/da/js/1.0.50/aws-da.js" async></script> <script src="https://a0.awsstatic.com/aws-blog/1.0.83/js/vendor/prism.js" data-default-language="markup"></script> </body> </html>