{"id":2734,"date":"2021-06-12T08:00:52","date_gmt":"2021-06-12T01:00:52","guid":{"rendered":"http:\/\/vticloud.io\/?p=2734"},"modified":"2021-09-20T10:02:17","modified_gmt":"2021-09-20T03:02:17","slug":"deploying-multi-region-s3-replication-with-01-command","status":"publish","type":"post","link":"https:\/\/vticloud.io\/en\/deploying-multi-region-s3-replication-with-01-command\/","title":{"rendered":"Deploying Multi-Region S3 Replication with 01 command"},"content":{"rendered":"<p><\/p>\n<p data-renderer-start-pos=\"1\">Amazon Simple Storage Service (also known as Amazon S3) is a well-known Amazon Web Services (AWS) service that customers can use to store data securely and reliably. Using Amazon S3, businesses will be able to build a low-cost, yet highly available storage solution. To deserve 11 numbers 9 (99.9999999999%) in terms of SLAs, Amazon S3 offers features available for replication to another region, which allows for easy automatic backups of various regions (Multi-region Replication).<\/p>\n<h2 id=\"T\u1ed5ng-Quan\" data-renderer-start-pos=\"523\">Overview\u00a0<\/h2>\n<p data-renderer-start-pos=\"534\">The article below references an AWS CDK (Cloud Development Kit) project using TypeScript. Using AWS CDK together with AWS CloudFormation StackSets, customers can deploy the following resources:<\/p>\n<ul class=\"ak-ul\" data-indent-level=\"1\">\n<li>\n<p data-renderer-start-pos=\"735\"><strong data-renderer-mark=\"true\">Amazon S3 Bucket<\/strong> on the primary region with <strong data-renderer-mark=\"true\">custom KMS key.<\/strong><\/p>\n<\/li>\n<li>\n<p data-renderer-start-pos=\"810\"><strong data-renderer-mark=\"true\">AWS CloudFormation StackSet<\/strong> replicates copies to different regions.<\/p>\n<\/li>\n<li>\n<p data-renderer-start-pos=\"891\"><strong data-renderer-mark=\"true\">AWS IAM Role<\/strong> with access to the primary region and copies.<\/p>\n<\/li>\n<\/ul>\n<p data-renderer-start-pos=\"960\">Interestingly, you can deploy these resources on the desired Regions, <em data-renderer-mark=\"true\"> <strong data-renderer-mark=\"true\">WITH ONLY 01 SINGLE COMMAND !!!<\/strong><\/em><\/p>\n<h2 id=\"C\u00e1c-b\u01b0\u1edbc-ti\u1ebfn-h\u00e0nh\" data-renderer-start-pos=\"1082\">Steps to proceed deploying Multi-Region S3 Replication<\/h2>\n<h3 data-renderer-start-pos=\"1082\">Step 1: Prerequisite<\/h3>\n<p data-renderer-start-pos=\"1102\">To use Self-managed StackSets, you first need to create two<a class=\"sc-giadOv hxfiBP\" title=\"https:\/\/docs.aws.amazon.com\/AWSCloudFormation\/latest\/UserGuide\/stacksets-prereqs-self-managed.html\" href=\"https:\/\/docs.aws.amazon.com\/AWSCloudFormation\/latest\/UserGuide\/stacksets-prereqs-self-managed.html\" data-renderer-mark=\"true\"> IAM roles.<\/a> You can create them manually using the AWS Management Console or use the official CloudFormation templates provided by AWS, click to download:<\/p>\n<ul class=\"ak-ul\" data-indent-level=\"1\">\n<li>\n<p data-renderer-start-pos=\"1382\"><span style=\"color: #800080;\"><a class=\"sc-jVODtj dpuzxH\" style=\"color: #800080;\" title=\"https:\/\/s3.amazonaws.com\/cloudformation-stackset-sample-templates-us-east-1\/AWSCloudFormationStackSetAdministrationRole.yml\" href=\"https:\/\/s3.amazonaws.com\/cloudformation-stackset-sample-templates-us-east-1\/AWSCloudFormationStackSetAdministrationRole.yml\" data-renderer-mark=\"true\">AWSCloudFormationStackSetAdministrationRole.yml<\/a><\/span><\/p>\n<\/li>\n<li>\n<p data-renderer-start-pos=\"1434\"><span style=\"color: #800080;\"><a class=\"sc-jVODtj dpuzxH\" style=\"color: #800080;\" title=\"https:\/\/s3.amazonaws.com\/cloudformation-stackset-sample-templates-us-east-1\/AWSCloudFormationStackSetExecutionRole.yml\" href=\"https:\/\/s3.amazonaws.com\/cloudformation-stackset-sample-templates-us-east-1\/AWSCloudFormationStackSetExecutionRole.yml\" data-renderer-mark=\"true\">AWSCloudFormationStackSetExecutionRole.yml<\/a><\/span><\/p>\n<\/li>\n<\/ul>\n<div class=\"rich-media-item mediaSingleView-content-wrap image-center sc-iujRgT gNgzIQ sc-bAeIUo ixHcIz\" data-layout=\"center\" data-node-type=\"mediaSingle\">\n<div class=\"sc-bMVAic ijdPKv\">\n<div class=\"sc-cHSUfg eUYNRS\" data-context-id=\"1453162515\" data-type=\"file\" data-node-type=\"media\" data-width=\"936\" data-height=\"540\" data-id=\"795800b6-bf10-4fef-8c28-25d2299c652a\" data-collection=\"contentId-1453162515\" data-file-name=\"iam roles for cloudformation.png\" data-file-size=\"299257\" data-file-mime-type=\"image\/png\">\n<div class=\"sc-iiUIRa FOsGu\" data-testid=\"media-card-view\">\n<div class=\"media-file-card-view sc-hgRTRy fOJLRp\" data-testid=\"media-file-card-view\" data-test-status=\"complete\" data-test-media-name=\"iam roles for cloudformation.png\" data-test-progress=\"1\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-2744\" src=\"http:\/\/vticloud.io\/wp-content\/uploads\/2021\/06\/iam-roles-for-cloudformation.png\" alt=\"iam roles for cloudformation\" width=\"1950\" height=\"1125\" srcset=\"https:\/\/vticloud.io\/wp-content\/uploads\/2021\/06\/iam-roles-for-cloudformation.png 1950w, https:\/\/vticloud.io\/wp-content\/uploads\/2021\/06\/iam-roles-for-cloudformation-300x173.png 300w, https:\/\/vticloud.io\/wp-content\/uploads\/2021\/06\/iam-roles-for-cloudformation-1024x591.png 1024w, https:\/\/vticloud.io\/wp-content\/uploads\/2021\/06\/iam-roles-for-cloudformation-768x443.png 768w, https:\/\/vticloud.io\/wp-content\/uploads\/2021\/06\/iam-roles-for-cloudformation-1536x886.png 1536w\" sizes=\"(max-width: 1950px) 100vw, 1950px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-renderer-start-pos=\"1483\">This project is taken from a Repository containing pre-packaged templates on Github, link <a class=\"sc-giadOv hxfiBP\" title=\"https:\/\/github.com\/sbstjn\/archive\" href=\"https:\/\/github.com\/sbstjn\/archive\" data-renderer-mark=\"true\">here.<\/a> Just adjust some parameters for CloudFormation Stack to be usable.<\/p>\n<pre data-pm-slice=\"1 1 []\"><code><span style=\"color: #800080;\">\/\/ Configured .\/aws\/index.ts\r\n\r\nconst option = {\r\n  env: {\r\n    region: 'ap-southeast-1'\r\n  },\r\n  replications: [\r\n    'ap-northeast-1',\r\n    'ap-southeast-2',\r\n    '...'\r\n  ]\r\n}<\/span><\/code><\/pre>\n<p data-renderer-start-pos=\"1833\">Then, run using the command below to deploy everything.<\/p>\n<div class=\"code-block sc-keVrkP iNwKEG\">\n<div class=\"css-3rfk1c\" data-code-block=\"\">\n<pre data-pm-slice=\"1 1 []\"><code><span style=\"color: #800080;\">npx cdk deploy<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<h3 id=\"B\u01b0\u1edbc-2:-S\u1eeda-th\u00f4ng-s\u1ed1-Primary-Region-v\u00e0-Data-Source\" data-renderer-start-pos=\"1905\">Step 2: Edit parameters of Primary Region and Data Source<\/h3>\n<p data-renderer-start-pos=\"1905\"><code><span class=\"code\" style=\"color: #800080;\" data-renderer-mark=\"true\">Changes to data inside amazon S3 buckets in primary regions are replicated to other AWS regions, for example here the main region VTI Cloud is making ap-southeast-1<\/span><\/code> (Singapore) and other regions <code><span class=\"code\" style=\"color: #800080;\" data-renderer-mark=\"true\">ap-northeast-1<\/span><\/code> (Tokyo) and <code><span class=\"code\" style=\"color: #800080;\" data-renderer-mark=\"true\">ap-southeast-2 <\/span><\/code>(Sydney).<\/p>\n<p data-renderer-start-pos=\"2239\">In primary region, you need <strong>A<\/strong><strong data-renderer-mark=\"true\">mazon S3 bucket <\/strong>with custom <strong data-renderer-mark=\"true\">KMS (Key Management System) key<\/strong> for encryption.<\/p>\n<p style=\"padding-left: 40px;\" data-renderer-start-pos=\"2343\">Learn more about AWS KMS here: <a class=\"sc-jVODtj dpuzxH\" title=\"https:\/\/aws.amazon.com\/kms\/\" href=\"https:\/\/aws.amazon.com\/kms\/\" data-renderer-mark=\"true\">https:\/\/aws.amazon.com\/kms\/<\/a>.<\/p>\n<div class=\"code-block sc-keVrkP iNwKEG\">\n<div class=\"css-13pcb96\" data-code-block=\"\">\n<pre data-pm-slice=\"1 1 []\"><code><span style=\"color: #800080;\">import * as s3 from '@aws-cdk\/aws-s3'\r\nimport * as kms from '@aws-cdk\/aws-kms'\r\n\r\nconst key = new kms.Key(this, 'Key')\r\nconst alias = key.addAlias('archive')\r\n\r\nconst bucket = new s3.Bucket(this, 'Bucket', {\r\n  bucketName: `${props.prefix}-archive`,\r\n  encryption: s3.BucketEncryption.KMS,\r\n  encryptionKey: alias,\r\n  blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,\r\n  bucketKeyEnabled: true,\r\n  versioned: true,\r\n  removalPolicy: cdk.RemovalPolicy.RETAIN\r\n})<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<p data-renderer-start-pos=\"2858\">To use S3 bucket replication, you need to create an IAM role with permission to access data in Amazon S3 and use kms key:<\/p>\n<div class=\"code-block sc-keVrkP iNwKEG\">\n<div class=\"css-13pcb96\" data-code-block=\"\">\n<p><code><\/code><\/p>\n<pre data-pm-slice=\"1 1 []\"><code><span style=\"color: #800080;\">import * as iam from '@aws-cdk\/aws-iam'\r\n\r\nconst role = new iam.Role(this, 'ReplicationRole', {\r\n  assumedBy: new iam.ServicePrincipal('s3.amazonaws.com'),\r\n  path: '\/service-role\/'\r\n});\r\n\r\n\r\nrole.addToPolicy(\r\n  new iam.PolicyStatement({\r\n    resources: [\r\n      bucket.bucketArn\r\n    ],\r\n    actions: [\r\n      's3:GetReplicationConfiguration',\r\n      's3:ListBucket'\r\n    ]\r\n  })\r\n);\r\n\r\nrole.addToPolicy(\r\n  new iam.PolicyStatement({\r\n    resources: [\r\n      bucket.arnForObjects('*')\r\n    ],\r\n    actions: [\r\n      's3:GetObjectVersion',\r\n      's3:GetObjectVersionAcl',\r\n      's3:GetObjectVersionForReplication',\r\n      's3:GetObjectVersionTagging'\r\n    ]\r\n  })\r\n);\r\n\r\nrole.addToPolicy(\r\n  new iam.PolicyStatement({\r\n    resources: [\r\n      key.keyArn\r\n    ],\r\n    actions: [\r\n      'kms:Decrypt'\r\n    ]\r\n  })\r\n);<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<p data-renderer-start-pos=\"3788\">After completing the above steps, the next step is to create an Amazon S3 bucket with a KMS key that can be used in any region you want to replicate, here VTI Cloud configures the KMS key in the region<code><span class=\"code\" style=\"color: #800080;\" data-renderer-mark=\"true\">ap-northeast-1<\/span><\/code> (Tokyo) and <code><span class=\"code\" data-renderer-mark=\"true\"><span style=\"color: #800080;\">ap-southeast-2<\/span> <\/span><\/code>(Sydney).<\/p>\n<h3 id=\"B\u01b0\u1edbc-3:-T\u1ea1o-CloudFormation-StackSet\" data-renderer-start-pos=\"4032\">Step 3: Creat CloudFormation StackSet for Multi-Region S3 Replication<\/h3>\n<p data-renderer-start-pos=\"4032\">To avoid having to create each CloudFormation Stack in each region you want to replicate amazon S3 bucket data, AWS CloudFormation StackSet is used to automate deployment from the region. Currently, AWS CDK only supports low-level access to CloudFormation StackSet resources:<\/p>\n<div class=\"code-block sc-keVrkP iNwKEG\">\n<div class=\"css-13pcb96\" data-code-block=\"\">\n<p>&nbsp;<\/p>\n<pre data-pm-slice=\"1 1 []\"><code><span style=\"color: #800080;\">import * as cdk from '@aws-cdk\/core'\r\n\r\nnew cdk.CfnStackSet(this, \"StackSet\", {\r\n  stackSetName: `${props.prefix}-archive-replication`,\r\n  permissionModel: \"SELF_MANAGED\",\r\n  parameters: [\r\n    {\r\n      parameterKey: 'Prefix',\r\n      parameterValue: props.prefix\r\n    },\r\n    {\r\n      parameterKey: 'ReplicationRole',\r\n      parameterValue: role.roleArn\r\n    }\r\n  ],\r\n  stackInstancesGroup: [\r\n    {\r\n      regions: props.replications,\r\n      deploymentTargets: {\r\n        accounts: [AccountId],\r\n      },\r\n    },\r\n  ],\r\n  templateBody:templateReplicationData,  #\u0111\u00e2y l\u00e0 template ch\u1ee9a Amazon S3 v\u00e0 KMS cho m\u1ecdi region\r\n});<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<p data-renderer-start-pos=\"4980\">The parameter<code><span class=\"code\" data-renderer-mark=\"true\"><span style=\"color: #800080;\">ReplicationRole<\/span><\/span><\/code> is required to grant access to KMS keys by region that IAM role uses to perform replication.<\/p>\n<div class=\"code-block sc-keVrkP iNwKEG\">\n<div class=\"css-13pcb96\" data-code-block=\"\">\n<pre data-pm-slice=\"1 1 []\"><code><span style=\"color: #800080;\">Parameters:\r\n  Prefix:\r\n    Type: String\r\n  ReplicationRole:\r\n    Type: String\r\n\r\nResources:\r\n  Key:\r\n    Type: AWS::KMS::Key\r\n    Properties:\r\n      KeyPolicy:\r\n        Version: 2012-10-17\r\n        Id: access-account\r\n        Statement:\r\n          - Sid: Enable IAM User Permissions\r\n            Effect: Allow\r\n            Principal:\r\n              AWS: !Sub arn:aws:iam::${AWS::AccountId}:root\r\n            Action: kms:*\r\n            Resource: '*'\r\n          - Sid: Replication\r\n            Effect: Allow\r\n            Principal:\r\n              AWS: !Ref ReplicationRole\r\n            Action:\r\n              - kms:Encrypt\r\n              - kms:ReEncrypt*\r\n              - kms:GenerateDataKey*\r\n              - kms:DescribeKey\r\n            Resource: '*'\r\n\r\n  KeyAlias:\r\n    Type: AWS::KMS::Alias\r\n    Properties:\r\n      AliasName: alias\/archive\/replication\r\n      TargetKeyId: !Ref Key\r\n\r\n  Bucket:\r\n    Type: AWS::S3::Bucket\r\n    DeletionPolicy: Retain\r\n    Properties:\r\n      BucketName: !Sub ${Prefix}-archive-replication-${AWS::Region}\r\n      AccessControl: Private\r\n      PublicAccessBlockConfiguration:\r\n        BlockPublicAcls: Yes\r\n        BlockPublicPolicy: Yes\r\n        IgnorePublicAcls: Yes\r\n        RestrictPublicBuckets: Yes\r\n      VersioningConfiguration:\r\n        Status: Enabled\r\n      BucketEncryption:\r\n        ServerSideEncryptionConfiguration:\r\n        - BucketKeyEnabled: Yes\r\n          ServerSideEncryptionByDefault:\r\n            SSEAlgorithm: aws:kms\r\n            KMSMasterKeyID: !Sub arn:aws:kms:${AWS::Region}:${AWS::AccountId}:${KeyAlias}<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<p data-renderer-start-pos=\"6627\">AWS resources in the region are replicated using their own name patterns to differentiate, VTI Cloud will example is <span style=\"color: #800080;\"><code><span class=\"code\" data-renderer-mark=\"true\">ap-northeast-1<\/span><\/code><\/span> in the following configuration:<\/p>\n<ul class=\"ak-ul\" data-indent-level=\"1\">\n<li>\n<p data-renderer-start-pos=\"6774\">KMS Key<br \/>\n<strong data-renderer-mark=\"true\">arn:aws:kms:ap-northeast-1:11223344:alias\/archive\/replication<\/strong><\/p>\n<\/li>\n<li>\n<p data-renderer-start-pos=\"6847\">S3 Bucket<br \/>\n<strong data-renderer-mark=\"true\">arn:aws:s3:::prefix-archive-replication-ap-northeast-1<\/strong><\/p>\n<\/li>\n<\/ul>\n<p data-renderer-start-pos=\"6915\">Using this name pattern, you can extend the IAM role used for region replication from the primary region:<\/p>\n<div class=\"code-block sc-keVrkP iNwKEG\">\n<div role=\"presentation\">\n<div><code><span style=\"color: #800080; font-family: Consolas, Monaco, monospace;\">role.addToPolicy(<\/span><\/code><\/div>\n<\/div>\n<div class=\"css-13pcb96\" data-code-block=\"\">\n<pre data-pm-slice=\"1 1 []\"><code><span style=\"color: #800080;\">  new iam.PolicyStatement({\r\n    resources: props.replications.map(\r\n      region =&gt; `arn:aws:kms:${region}:$(AccountId):alias\/archive\/replication`\r\n    ),\r\n    actions: [\r\n      'kms:Encrypt'\r\n    ]\r\n  })\r\n);\r\n\r\nrole.addToPolicy(\r\n  new iam.PolicyStatement({\r\n    resources: props.replications.map(\r\n      region =&gt; `arn:aws:s3:::${props.prefix}-archive-replication-${region}\/*`\r\n    ),\r\n    actions: [\r\n      's3:ReplicateDelete',\r\n      's3:ReplicateObject',\r\n      's3:ReplicateTags'\r\n    ]\r\n  })\r\n);\r\n\r\nrole.addToPolicy(\r\n  new iam.PolicyStatement({\r\n    resources: props.replications.map(\r\n      region =&gt; `arn:aws:s3:::${props.prefix}-archive-replication-${region}`\r\n    ),\r\n    actions: [\r\n      's3:List*',\r\n      's3:GetBucketVersioning',\r\n      's3:PutBucketVersioning'\r\n    ]\r\n  })\r\n);<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<h3 id=\"B\u01b0\u1edbc-4:-C\u1ea5u-h\u00ecnh-S3-Replication-Configuration\" data-renderer-start-pos=\"7816\">Step 4: Configure to deploy Multi-Region S3 Replication\u00a0<\/h3>\n<p data-renderer-start-pos=\"7816\">Set up S3 Replication Configuration at Amazon S3 bucket in the primary region. In this step, AWS CDK can still use low-level objects to configure replication:<\/p>\n<div class=\"code-block sc-keVrkP iNwKEG\">\n<div class=\"css-13pcb96\" data-code-block=\"\">\n<pre data-pm-slice=\"1 1 []\"><code><span style=\"color: #800080;\">const cfnBucket = bucket.node.defaultChild as s3.CfnBucket;\r\n\r\ncfnBucket.replicationConfiguration = {\r\n  role: role.roleArn,\r\n  rules: props.replications.map(\r\n    (region, index) =&gt; (\r\n      {\r\n        id: region,\r\n        destination: {\r\n          bucket: `arn:aws:s3:::${props.prefix}-archive-replication-${region}`,\r\n          encryptionConfiguration: {\r\n            replicaKmsKeyId: `arn:aws:kms:${region}:${AccountID}:alias\/archive\/replication`\r\n          }\r\n        },\r\n        priority: index,\r\n        deleteMarkerReplication: {\r\n          status: 'Enabled'\r\n        },\r\n        filter: {\r\n          prefix: ''\r\n        },\r\n        sourceSelectionCriteria: {\r\n          sseKmsEncryptedObjects: {\r\n            status: 'Enabled'\r\n          }\r\n        },\r\n        status: 'Enabled'\r\n      }\r\n    )\r\n  )\r\n}<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<h3 id=\"B\u01b0\u1edbc-5:-Tri\u1ec3n-khai\" data-renderer-start-pos=\"8830\">Step 5: Deploy<\/h3>\n<p data-renderer-start-pos=\"8830\">As said above, after running using the command below, everything will be implemented with this command:<\/p>\n<div class=\"code-block sc-keVrkP iNwKEG\">\n<div class=\"css-3rfk1c\" data-code-block=\"\"><code><span style=\"color: #800080;\">npx cdk deploy<\/span><\/code><\/div>\n<\/div>\n<h2 id=\"T\u1ed5ng-K\u1ebft\" data-renderer-start-pos=\"8947\">Conclusion<\/h2>\n<p data-renderer-start-pos=\"8957\">With only the AWS Cloud Development Kit, you can create the <strong data-renderer-mark=\"true\">AWS CloudFormation template.<\/strong><\/p>\n<p data-renderer-start-pos=\"9040\">From this template, you can create <strong data-renderer-mark=\"true\">the AWS CloudFormation<\/strong> <strong data-renderer-mark=\"true\">Stack.<\/strong> This stack will help you deploy services such as Amazon S3 bucket, AWS Identity &amp; Access Management role, an AWS Key Management Service key, and 01 <strong data-renderer-mark=\"true\">AWS CloudFormation StackSet.<\/strong><\/p>\n<p data-renderer-start-pos=\"9272\">AWS CloudFormation StackSet then<strong data-renderer-mark=\"true\"> uses the template above<\/strong> to create AWS <strong data-renderer-mark=\"true\">CloudFormation<\/strong> <strong data-renderer-mark=\"true\">Stack<\/strong> for different regions, and <strong data-renderer-mark=\"true\">this Stack <\/strong>continues to be used to create resources such as S3 bucket, IAM role, and KMS key, where Amazon S3 bucket features S3 Replication Configuration.<\/p>\n<h2>About<strong> VTI Cloud<\/strong><\/h2>\n<p><strong>VTI Cloud<\/strong>\u00a0is an\u00a0<span style=\"color: #ff8800;\"><a style=\"color: #ff8800;\" href=\"https:\/\/vticloud.io\/news_events\/vti-cloud-chinh-thuc-tro-thanh-advanced-consulting-partner-cua-aws\/\">Advanced Consulting Partner<\/a>\u00a0<\/span>of AWS Vietnam with a team of over 50+ AWS certified solution engineers. With the desire to support customers in the journey of digital transformation and migration to the AWS cloud, VTI Cloud is proud to be a pioneer in consulting solutions, developing software, and deploying AWS infrastructure to customers<strong>\u00a0in Vietnam<\/strong>\u00a0<strong>and Japan.<\/strong><\/p>\n<p>Building safe, high-performance, flexible, and cost-effective architectures for customers is\u00a0<strong>VTI Cloud\u2019s<\/strong> leading mission in enterprise technology mission.<\/p>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Amazon Simple Storage Service (also known as Amazon S3) is a well-known Amazon Web Services (AWS) service that customers can use to store data securely and reliably. Using Amazon S3, businesses will be able to build a low-cost, yet highly available storage solution. To deserve 11 numbers 9 (99.9999999999%) in terms of SLAs, Amazon S3 [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":2754,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[13],"tags":[51,127,113,117,142,141],"_links":{"self":[{"href":"https:\/\/vticloud.io\/en\/wp-json\/wp\/v2\/posts\/2734"}],"collection":[{"href":"https:\/\/vticloud.io\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vticloud.io\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vticloud.io\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/vticloud.io\/en\/wp-json\/wp\/v2\/comments?post=2734"}],"version-history":[{"count":1,"href":"https:\/\/vticloud.io\/en\/wp-json\/wp\/v2\/posts\/2734\/revisions"}],"predecessor-version":[{"id":3173,"href":"https:\/\/vticloud.io\/en\/wp-json\/wp\/v2\/posts\/2734\/revisions\/3173"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vticloud.io\/en\/wp-json\/wp\/v2\/media\/2754"}],"wp:attachment":[{"href":"https:\/\/vticloud.io\/en\/wp-json\/wp\/v2\/media?parent=2734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vticloud.io\/en\/wp-json\/wp\/v2\/categories?post=2734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vticloud.io\/en\/wp-json\/wp\/v2\/tags?post=2734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}