{"id":16803,"date":"2017-04-05T12:15:01","date_gmt":"2017-04-05T09:15:01","guid":{"rendered":"https:\/\/www.webcodegeeks.com\/?p=16803"},"modified":"2017-04-03T11:22:59","modified_gmt":"2017-04-03T08:22:59","slug":"aws-lambda-encrypted-environment-variables","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/","title":{"rendered":"AWS Lambda: Encrypted environment variables"},"content":{"rendered":"<p>Continuing on from my post showing how to create a <a href=\"http:\/\/www.markhneedham.com\/blog\/2017\/04\/02\/aws-lambda-programatically-create-a-python-hello-world-function\/\">\u2018Hello World\u2019 AWS lambda function<\/a> I wanted to pass encrypted environment variables to my function.<\/p>\n<p>The following function takes in both an encrypted and unencrypted variable and prints them out.<\/p>\n<p><strong>Don\u2019t print out encrypted variables in a real function, this is just so we can see the example working!<\/strong><\/p>\n<pre class=\"brush:py\">import boto3\r\nimport os\r\n\u00a0\r\nfrom base64 import b64decode\r\n\u00a0\r\ndef lambda_handler(event, context):\r\n    encrypted = os.environ['ENCRYPTED_VALUE']\r\n    decrypted = boto3.client('kms').decrypt(CiphertextBlob=b64decode(encrypted))['Plaintext']\r\n\u00a0\r\n    # Don't print out your decrypted value in a real function! This is just to show how it works.\r\n    print(\"Decrypted value:\", decrypted)\r\n\u00a0\r\n    plain_text = os.environ[\"PLAIN_TEXT_VALUE\"]\r\n    print(\"Plain text:\", plain_text)<\/pre>\n<p>Now we\u2019ll zip up our function into HelloWorldEncrypted.zip, ready to send to AWS.<\/p>\n<pre class=\"brush:bash\">zip HelloWorldEncrypted.zip HelloWorldEncrypted.py<\/pre>\n<p>Now it\u2019s time to upload our function to AWS and create the associated environment variables.<\/p>\n<p>If you\u2019re using a Python editor then you\u2019ll need to install boto3 locally to keep the editor happy but you don\u2019t need to include boto3 in the code you send to AWS Lambda \u2013 it comes pre-installed.<\/p>\n<p>Now we write the following code to automate the creation of our Lambda function:<\/p>\n<pre class=\"brush:py\">import boto3\r\nfrom base64 import b64encode\r\n\u00a0\r\nfn_name = \"HelloWorldEncrypted\"\r\nkms_key = \"arn:aws:kms:[aws-zone]:[your-aws-id]:key\/[your-kms-key-id]\"\r\nfn_role = 'arn:aws:iam::[your-aws-id]:role\/lambda_basic_execution'\r\n\u00a0\r\nlambda_client = boto3.client('lambda')\r\nkms_client = boto3.client('kms')\r\n\u00a0\r\nencrypt_me = \"abcdefg\"\r\nencrypted = b64encode(kms_client.encrypt(Plaintext=encrypt_me, KeyId=kms_key)[\"CiphertextBlob\"])\r\n\u00a0\r\nplain_text = 'hijklmno'\r\n\u00a0\r\nlambda_client.create_function(\r\n        FunctionName=fn_name,\r\n        Runtime='python2.7',\r\n        Role=fn_role,\r\n        Handler=\"{0}.lambda_handler\".format(fn_name),\r\n        Code={ 'ZipFile': open(\"{0}.zip\".format(fn_name), 'rb').read(),},\r\n        Environment={\r\n            'Variables': {\r\n                'ENCRYPTED_VALUE': encrypted,\r\n                'PLAIN_TEXT_VALUE': plain_text,\r\n            }\r\n        },\r\n        KMSKeyArn=kms_key\r\n)<\/pre>\n<p>The tricky bit for me here was figuring out that I needed to pass the value that I wanted to base 64 encode the output of the value encrypted by the KMS client. The KMS client relies on a KMS key that <a href=\"http:\/\/docs.aws.amazon.com\/cli\/latest\/reference\/kms\/create-key.html\">we need to setup<\/a>. We can see a list of all our KMS keys by running the following command:<\/p>\n<pre class=\"brush:bash\">$ aws kms list-keys<\/pre>\n<p>The format of these keys is <cite>arn:aws:kms:[zone]:[account-id]:key\/[key-id]<\/cite>.<\/p>\n<p>Now let\u2019s try executing our Lambda function from the AWS console:<\/p>\n<pre class=\"brush:bash\">$ python CreateHelloWorldEncrypted.py<\/pre>\n<p>Let\u2019s check it got created:<\/p>\n<pre class=\"brush:bash\">$ aws lambda list-functions --query \"Functions[*].FunctionName\"\r\n[\r\n    \"HelloWorldEncrypted\", \r\n]<\/pre>\n<p>And now let\u2019s execute the function:<\/p>\n<pre class=\"brush:bash; wrap-lines:false\">$ aws lambda invoke --function-name HelloWorldEncrypted --invocation-type RequestResponse --log-type Tail \/tmp\/out | jq \".LogResult\"\r\n\"U1RBUlQgUmVxdWVzdElkOiA5YmNlM2E1MC0xODMwLTExZTctYjFlNi1hZjQxZDYzMzYxZDkgVmVyc2lvbjogJExBVEVTVAooJ0RlY3J5cHRlZCB2YWx1ZTonLCAnYWJjZGVmZycpCignUGxhaW4gdGV4dDonLCAnaGlqa2xtbm8nKQpFTkQgUmVxdWVzdElkOiA5YmNlM2E1MC0xODMwLTExZTctYjFlNi1hZjQxZDYzMzYxZDkKUkVQT1JUIFJlcXVlc3RJZDogOWJjZTNhNTAtMTgzMC0xMWU3LWIxZTYtYWY0MWQ2MzM2MWQ5CUR1cmF0aW9uOiAzNjAuMDQgbXMJQmlsbGVkIER1cmF0aW9uOiA0MDAgbXMgCU1lbW9yeSBTaXplOiAxMjggTUIJTWF4IE1lbW9yeSBVc2VkOiAyNCBNQgkK\"<\/pre>\n<p>That\u2019s a bit hard to read, some decoding is needed:<\/p>\n<pre class=\"brush:bash; wrap-lines:false\">$ echo \"U1RBUlQgUmVxdWVzdElkOiA5YmNlM2E1MC0xODMwLTExZTctYjFlNi1hZjQxZDYzMzYxZDkgVmVyc2lvbjogJExBVEVTVAooJ0RlY3J5cHRlZCB2YWx1ZTonLCAnYWJjZGVmZycpCignUGxhaW4gdGV4dDonLCAnaGlqa2xtbm8nKQpFTkQgUmVxdWVzdElkOiA5YmNlM2E1MC0xODMwLTExZTctYjFlNi1hZjQxZDYzMzYxZDkKUkVQT1JUIFJlcXVlc3RJZDogOWJjZTNhNTAtMTgzMC0xMWU3LWIxZTYtYWY0MWQ2MzM2MWQ5CUR1cmF0aW9uOiAzNjAuMDQgbXMJQmlsbGVkIER1cmF0aW9uOiA0MDAgbXMgCU1lbW9yeSBTaXplOiAxMjggTUIJTWF4IE1lbW9yeSBVc2VkOiAyNCBNQgkK\" | base64 --decode\r\nSTART RequestId: 9bce3a50-1830-11e7-b1e6-af41d63361d9 Version: $LATEST\r\n('Decrypted value:', 'abcdefg')\r\n('Plain text:', 'hijklmno')\r\nEND RequestId: 9bce3a50-1830-11e7-b1e6-af41d63361d9\r\nREPORT RequestId: 9bce3a50-1830-11e7-b1e6-af41d63361d9\tDuration: 360.04 ms\tBilled Duration: 400 ms \tMemory Size: 128 MB\tMax Memory Used: 24 MB<\/pre>\n<p>And it worked, hoorah!<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/www.markhneedham.com\/blog\/2017\/04\/03\/aws-lambda-encrypted-environment-variables\/\">AWS Lambda: Encrypted environment variables<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/join-us\/wcg\/\">WCG partner<\/a> Mark Needham at the <a href=\"http:\/\/www.markhneedham.com\/blog\/\">Mark Needham Blog<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Continuing on from my post showing how to create a \u2018Hello World\u2019 AWS lambda function I wanted to pass encrypted environment variables to my function. The following function takes in both an encrypted and unencrypted variable and prints them out. Don\u2019t print out encrypted variables in a real function, this is just so we can &hellip;<\/p>\n","protected":false},"author":48,"featured_media":1651,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[53],"tags":[325],"class_list":["post-16803","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-amazon-aws"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>AWS Lambda: Encrypted environment variables - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"Continuing on from my post showing how to create a \u2018Hello World\u2019 AWS lambda function I wanted to pass encrypted environment variables to my function. The\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AWS Lambda: Encrypted environment variables - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"Continuing on from my post showing how to create a \u2018Hello World\u2019 AWS lambda function I wanted to pass encrypted environment variables to my function. The\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-05T09:15:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Mark Needham\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mark Needham\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/\"},\"author\":{\"name\":\"Mark Needham\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/848a54e2ee724e46069ce36c2e52e98e\"},\"headline\":\"AWS Lambda: Encrypted environment variables\",\"datePublished\":\"2017-04-05T09:15:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/\"},\"wordCount\":280,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"keywords\":[\"Amazon AWS\"],\"articleSection\":[\"Python\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/\",\"name\":\"AWS Lambda: Encrypted environment variables - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"datePublished\":\"2017-04-05T09:15:01+00:00\",\"description\":\"Continuing on from my post showing how to create a \u2018Hello World\u2019 AWS lambda function I wanted to pass encrypted environment variables to my function. The\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"AWS Lambda: Encrypted environment variables\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/848a54e2ee724e46069ce36c2e52e98e\",\"name\":\"Mark Needham\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5489baed26ce2d932bf951ecfb47afe80bec45d3648c23521d87c83b8f1c3ea9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5489baed26ce2d932bf951ecfb47afe80bec45d3648c23521d87c83b8f1c3ea9?s=96&d=mm&r=g\",\"caption\":\"Mark Needham\"},\"sameAs\":[\"http:\/\/www.markhneedham.com\/blog\/\"],\"url\":\"https:\/\/www.webcodegeeks.com\/author\/mark-needham\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"AWS Lambda: Encrypted environment variables - Web Code Geeks - 2026","description":"Continuing on from my post showing how to create a \u2018Hello World\u2019 AWS lambda function I wanted to pass encrypted environment variables to my function. The","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/","og_locale":"en_US","og_type":"article","og_title":"AWS Lambda: Encrypted environment variables - Web Code Geeks - 2026","og_description":"Continuing on from my post showing how to create a \u2018Hello World\u2019 AWS lambda function I wanted to pass encrypted environment variables to my function. The","og_url":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2017-04-05T09:15:01+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","type":"image\/jpeg"}],"author":"Mark Needham","twitter_card":"summary_large_image","twitter_creator":"@webcodegeeks","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Mark Needham","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/"},"author":{"name":"Mark Needham","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/848a54e2ee724e46069ce36c2e52e98e"},"headline":"AWS Lambda: Encrypted environment variables","datePublished":"2017-04-05T09:15:01+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/"},"wordCount":280,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","keywords":["Amazon AWS"],"articleSection":["Python"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/","url":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/","name":"AWS Lambda: Encrypted environment variables - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","datePublished":"2017-04-05T09:15:01+00:00","description":"Continuing on from my post showing how to create a \u2018Hello World\u2019 AWS lambda function I wanted to pass encrypted environment variables to my function. The","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/python\/aws-lambda-encrypted-environment-variables\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/www.webcodegeeks.com\/category\/python\/"},{"@type":"ListItem","position":3,"name":"AWS Lambda: Encrypted environment variables"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/848a54e2ee724e46069ce36c2e52e98e","name":"Mark Needham","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5489baed26ce2d932bf951ecfb47afe80bec45d3648c23521d87c83b8f1c3ea9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5489baed26ce2d932bf951ecfb47afe80bec45d3648c23521d87c83b8f1c3ea9?s=96&d=mm&r=g","caption":"Mark Needham"},"sameAs":["http:\/\/www.markhneedham.com\/blog\/"],"url":"https:\/\/www.webcodegeeks.com\/author\/mark-needham\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/16803","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=16803"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/16803\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/1651"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=16803"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=16803"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=16803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}