{"id":13605,"date":"2020-03-05T11:56:15","date_gmt":"2020-03-05T10:56:15","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/"},"modified":"2020-03-05T11:56:15","modified_gmt":"2020-03-05T10:56:15","slug":"restore-s3-object-with-awspowershell","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/","title":{"rendered":"Restore S3 Object with AWSPOWERSHELL"},"content":{"rendered":"<p>AWS S3 offers different <a href=\"https:\/\/aws.amazon.com\/s3\/storage-classes\/\" target=\"_blank\" rel=\"noopener noreferrer\">Storage Classes<\/a>, allowing to optimize cost among others.<br \/>\nFor instance, some classes are used for archiving purposes: <a href=\"https:\/\/aws.amazon.com\/glacier\/\" target=\"_blank\" rel=\"noopener noreferrer\">S3 Glacier and S3 Glacier Deep Archive<\/a>. It means the storage cost is the lowest you can obtain, but your data is not available immediately and the access cost is increased.<\/p>\n<p>In the case of S3 archive classes, retrieving the data is not cost-effective because this is clearly not what it is aimed for. This is for data you want to keep for some reasons (legal, insurance&#8230;), but you need very rare access on it.<br \/>\nDatabase backups are clearly one scenario where these storage classes are designed for.<\/p>\n<p>But what does happen if I need this data? How do I proceed? We will answer to these questions using <a href=\"https:\/\/www.powershellgallery.com\/packages\/AWSPowerShell\/4.0.4.0\" target=\"_blank\" rel=\"noopener noreferrer\">AWSPOWERSHELL<\/a> module.<br \/>\nOf course, <a href=\"https:\/\/aws.amazon.com\/cli\/\" target=\"_blank\" rel=\"noopener noreferrer\">AWS CLI<\/a> is another approach possible and well-documented. But, in my opinion, this is less reusable (integration in a custom module less convenient for instance) and less in the PowerShell &#8220;philosophy&#8221;.<\/p>\n<h3>I- Select your S3 object<\/h3>\n<p>First of all, you need to find the object you have to retrieve. To do so, several information are necessary:<\/p>\n<ul>\n<li>the bucket name where the object resides (mandatory)<\/li>\n<li>the key (optional): returns the object matching the exact key<\/li>\n<li>the key prefix (optional): returns all objects with a key starting with this prefix<\/li>\n<\/ul>\n<p>The cmdlet you need for this is called <a href=\"https:\/\/docs.aws.amazon.com\/powershell\/latest\/reference\/items\/Get-S3Object.html\" target=\"_blank\" rel=\"noopener noreferrer\">Get-S3Object<\/a>. Here are some examples of usage:<\/p>\n<pre class=\"brush: powershell; gutter: true; first-line: 1\"># Retrieve object from a specific key\nGet-S3Object -BucketName $BucketName -Key $Key\n\n# Retrieve objects from a key prefix\nGet-S3Object -BucketName $BucketName -KeyPrefix $KeyPrefix\n<\/pre>\n<p>It is not possible from this cmdlet to retrieve an object only with its name: you need to know the key or the beginning of the key (key prefix).<br \/>\nOf course, a research inside PowerShell is possible, but you will need to retrieve ALL objects in a bucket before doing the research&#8230; You are dependent on the number of objects in your bucket.<\/p>\n<p>Moreover, to retrieve information regarding restore status, you need to look into metadata with cmdlet <a href=\"https:\/\/docs.aws.amazon.com\/powershell\/latest\/reference\/items\/Get-S3ObjectMetadata.html\" rel=\"noopener noreferrer\" target=\"_blank\">Get-S3ObjectMetadata<\/a>.<\/p>\n<p>To make the research simple with the desired information, I created a custom function to accept the partial name of a S3 object as input and to personalize the output:<\/p>\n<pre class=\"brush: powershell; gutter: true; first-line: 1\">Function Get-dbiS3Object(){\n    param(\n        [Parameter(Mandatory=$true)]\n        [String]\n        $BucketName,\n        [String]\n        $Key,\n        [String]\n        $KeyPrefix = '',\n        [String]\n        $Name = ''\n    )\n\n    $Command = 'Get-S3Object -BucketName ' + '\"' + $BucketName + '\"';\n\n    If ($KeyPrefix){\n        $Command += ' -KeyPrefix ' + '\"' + $KeyPrefix + '\"';\n    }\n    If ($Key){\n        $Command += ' -Key' + '\"' + $Key + '\"';\n    }\n    If ($Name){\n        $Command += ' | Where-Object Key -Match ' + '\"' + $Name + '\"';\n    }\n\n    $Objects = Invoke-Expression $Command;\n\n\n    If ($Objects){\n        @($Objects) | ForEach-Object -Begin {`\n                        [System.Collections.ArrayList] $S3CustomObjects = @();}`\n                  -Process {`\n                           $Metadata = $_ | Get-S3ObjectMetadata;`\n                           $S3CustomObj = [PSCustomObject]@{`\n                                         BucketName = \"$($_.BucketName)\";`\n                                         StorageClass = \"$($_.StorageClass)\";`\n                                         LastModified = \"$($_.LastModified)\";`\n                                         SizeInB = \"$($_.Size)\";`\n                                         RestoreExpirationUtc = \"$($Metadata.RestoreExpiration)\";`\n                                         RestoreInProgress = \"$($Metadata.RestoreInProgress)\";`\n                                         ExpirationRule = \"$($Metadata.Expiration.RuleId)\";`\n                                         ExpiryDateUtc= \"$($Metadata.Expiration.ExpiryDateUtc)\";`\n                           };`\n                           $Null = $S3CustomObjects.Add($S3CustomObj);`\n                  };\n    }\n\n  return $S3CustomObjects;\n}\n<\/pre>\n<h3>2- Restore the S3 Object<\/h3>\n<p>Once you have selected your objects, you have to create a request to make your objects accessible. Indeed, in Glacier, your objects are not accessible until a request is performed: they are archived (like &#8220;frozen&#8221;).<br \/>\nFor Glacier, it exists 3 <a href=\"https:\/\/docs.aws.amazon.com\/amazonglacier\/latest\/dev\/downloading-an-archive-two-steps.html\" rel=\"noopener noreferrer\" target=\"_blank\">archive retrieval options<\/a>:<\/p>\n<ul>\n<li>Expedited: 1-5 minutes for the highest cost<\/li>\n<li>Standard: 3-5 hours for a lower cost<\/li>\n<li>Bulk: 5-12 hours for the lowest cost<\/li>\n<\/ul>\n<p>So after this request you will have to wait, depending on your archive retrieval options.<\/p>\n<p>This demand is performed with the cmdlet <a href=\"https:\/\/docs.aws.amazon.com\/powershell\/latest\/reference\/items\/Restore-S3Object.html\" rel=\"noopener noreferrer\" target=\"_blank\">Restore-S3Object<\/a>.<br \/>\nHere is an example of usage:<\/p>\n<pre class=\"brush: powershell; gutter: true; first-line: 1\"># CopyLifetimeInDays is the number of days the object remains accessible before it is frozen again\nRestore-S3Object -BucketName $element.BucketName -Key $element.Key -CopyLifetimeInDays $CopyLifetimeInDays -Tier $TierType\n<\/pre>\n<p>By using our previous custom cmdlet called Get-dbiS3Object, we can also build a new custom cmdlet to simplify the process:<\/p>\n<pre class=\"brush: powershell; gutter: true; first-line: 1\">Function Restore-dbiS3Object (){\n    param(\n        $CustomS3Objects,\n        [String]\n        $Key,\n        [String]\n        $KeyPrefix,\n        [String]\n        $BucketName,\n        [Amazon.S3.GlacierJobTier]\n        $Tier='Bulk',              # Default archive retrieval option if nothing specified\n        [int]\n        $CopyLifetimeInDays = 5    # Default number of days if nothing specified\n    )\n\n    If ($CustomS3Objects){\n        @($CustomS3Objects) | Foreach-Object -Process {`\n            If ( (-not ($_.RestoreExpirationUtc) -and (-not ($_.RestoreInProgress) -and ($_.StorageClass -eq 'Glacier') -and ($_.SizeInB -gt 0)))) {`\n                Restore-S3Object -BucketName $_.BucketName -Key $_.Key -CopyLifetimeInDays $CopyLifetimeInDays -Tier $TierType);`\n            }`\n        }\n    }\n    elseif ($Key -and $BucketName){\n        $Objects = Get-dbiS3Object -BucketName $BucketName -Key $Key;\n        Restore-dbiS3Object -CustomS3Objects $Objects;\n    }\n    elseif ($KeyPrefix -and $BucketName){\n        $Objects = Get-dbiS3Object -BucketName $BucketName -KeyPrefix $KeyPrefix;\n        Restore-dbiS3Object -CustomS3Objects $Objects;\n    }\n}\n<\/pre>\n<p>To check if the retrieval is finished and if the object is accessible for download, you can obtain this information with the cmdlet Get-dbiS3Object.<\/p>\n<p>Of course, these 2 custom functions are perfectible and could be customized differently. The goal of this blog is mostly to introduce the potential of this PowerShell module, and give examples of integration in a custom PowerShell module to make daily life easier \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>AWS S3 offers different Storage Classes, allowing to optimize cost among others. For instance, some classes are used for archiving purposes: S3 Glacier and S3 Glacier Deep Archive. It means the storage cost is the lowest you can obtain, but your data is not available immediately and the access cost is increased. In the case [&hellip;]<\/p>\n","protected":false},"author":14,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[955],"tags":[133,1854,272,51],"type_dbi":[],"class_list":["post-13605","post","type-post","status-publish","format-standard","hentry","category-cloud","tag-aws","tag-awspowershell","tag-powershell","tag-sql-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Restore S3 Object with AWSPOWERSHELL - dbi Blog<\/title>\n<meta name=\"description\" content=\"In this blog, we will see how to request programatically a restore for a S3 Glacier Object using AWSPOWERSHELL module, and also with custom cmdlets.\" \/>\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.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Restore S3 Object with AWSPOWERSHELL\" \/>\n<meta property=\"og:description\" content=\"In this blog, we will see how to request programatically a restore for a S3 Glacier Object using AWSPOWERSHELL module, and also with custom cmdlets.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-03-05T10:56:15+00:00\" \/>\n<meta name=\"author\" content=\"Nathan Courtine\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nathan Courtine\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/\"},\"author\":{\"name\":\"Nathan Courtine\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/38305b5ebdcdb4fb784fa31d760862d1\"},\"headline\":\"Restore S3 Object with AWSPOWERSHELL\",\"datePublished\":\"2020-03-05T10:56:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/\"},\"wordCount\":539,\"commentCount\":0,\"keywords\":[\"AWS\",\"AWSPOWERSHELL\",\"PowerShell\",\"SQL Server\"],\"articleSection\":[\"Cloud\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/\",\"name\":\"Restore S3 Object with AWSPOWERSHELL - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2020-03-05T10:56:15+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/38305b5ebdcdb4fb784fa31d760862d1\"},\"description\":\"In this blog, we will see how to request programatically a restore for a S3 Glacier Object using AWSPOWERSHELL module, and also with custom cmdlets.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Restore S3 Object with AWSPOWERSHELL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/38305b5ebdcdb4fb784fa31d760862d1\",\"name\":\"Nathan Courtine\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/0fcc6c91bbc35c976c9d470585e48ae5d500680f1f55de5bbc5f8373b8ebb02c?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0fcc6c91bbc35c976c9d470585e48ae5d500680f1f55de5bbc5f8373b8ebb02c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0fcc6c91bbc35c976c9d470585e48ae5d500680f1f55de5bbc5f8373b8ebb02c?s=96&d=mm&r=g\",\"caption\":\"Nathan Courtine\"},\"description\":\"Nathan Courtine has more than four years of experience in Microsoft solutions. He is specialized in SQL Server installation, migration, performance analysis, best practices, etc. Moreover, he has a background in Oracle Java and .NET software and web development. Nathan Courtine is Microsoft Certified in Administering SQL Server 2012 Databases. Nathan Courtine holds an Engineer\u2019s Degree in Computer Science from the ENSISA (Ecole Nationale Sup\u00e9rieure d'Ing\u00e9nieurs Sud Alsace) in Mulhouse (F). His branch-related experience covers Public Sector, Automotive, IT, Financial Services \/ Banking, etc.\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/nathan-courtine\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Restore S3 Object with AWSPOWERSHELL - dbi Blog","description":"In this blog, we will see how to request programatically a restore for a S3 Glacier Object using AWSPOWERSHELL module, and also with custom cmdlets.","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.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/","og_locale":"en_US","og_type":"article","og_title":"Restore S3 Object with AWSPOWERSHELL","og_description":"In this blog, we will see how to request programatically a restore for a S3 Glacier Object using AWSPOWERSHELL module, and also with custom cmdlets.","og_url":"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/","og_site_name":"dbi Blog","article_published_time":"2020-03-05T10:56:15+00:00","author":"Nathan Courtine","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Nathan Courtine","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/"},"author":{"name":"Nathan Courtine","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/38305b5ebdcdb4fb784fa31d760862d1"},"headline":"Restore S3 Object with AWSPOWERSHELL","datePublished":"2020-03-05T10:56:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/"},"wordCount":539,"commentCount":0,"keywords":["AWS","AWSPOWERSHELL","PowerShell","SQL Server"],"articleSection":["Cloud"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/","url":"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/","name":"Restore S3 Object with AWSPOWERSHELL - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2020-03-05T10:56:15+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/38305b5ebdcdb4fb784fa31d760862d1"},"description":"In this blog, we will see how to request programatically a restore for a S3 Glacier Object using AWSPOWERSHELL module, and also with custom cmdlets.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/restore-s3-object-with-awspowershell\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Restore S3 Object with AWSPOWERSHELL"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/38305b5ebdcdb4fb784fa31d760862d1","name":"Nathan Courtine","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/0fcc6c91bbc35c976c9d470585e48ae5d500680f1f55de5bbc5f8373b8ebb02c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/0fcc6c91bbc35c976c9d470585e48ae5d500680f1f55de5bbc5f8373b8ebb02c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0fcc6c91bbc35c976c9d470585e48ae5d500680f1f55de5bbc5f8373b8ebb02c?s=96&d=mm&r=g","caption":"Nathan Courtine"},"description":"Nathan Courtine has more than four years of experience in Microsoft solutions. He is specialized in SQL Server installation, migration, performance analysis, best practices, etc. Moreover, he has a background in Oracle Java and .NET software and web development. Nathan Courtine is Microsoft Certified in Administering SQL Server 2012 Databases. Nathan Courtine holds an Engineer\u2019s Degree in Computer Science from the ENSISA (Ecole Nationale Sup\u00e9rieure d'Ing\u00e9nieurs Sud Alsace) in Mulhouse (F). His branch-related experience covers Public Sector, Automotive, IT, Financial Services \/ Banking, etc.","url":"https:\/\/www.dbi-services.com\/blog\/author\/nathan-courtine\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/13605","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=13605"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/13605\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=13605"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=13605"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=13605"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=13605"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}