{"id":16000,"date":"2023-11-28T12:24:28","date_gmt":"2023-11-28T06:54:28","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=16000"},"modified":"2023-11-28T12:54:57","modified_gmt":"2023-11-28T07:24:57","slug":"amazon-ecr-container-images-across-accounts-or-regions","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2023\/11\/28\/amazon-ecr-container-images-across-accounts-or-regions\/","title":{"rendered":"Amazon ECR Container Images Across Accounts or Regions"},"content":{"rendered":"\n<p class=\"has-text-align-justify\">Want to implement an AWS Elastic Container Registry Replication practice in your DevOps solution? But don\u2019t know how to start and where to go. Folks, now you are on the right path.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">We&#8217;re pursuing this to safeguard our production resources in the ap-south-1 (Mumbai) region from potential disasters and connectivity issues. Ensuring resource distribution across other AWS regions is critical. Our microservices-driven applications rely on Docker images, including custom ones crucial for disaster recovery. AWS Container Registry offers a secure, efficient solution for storing and managing Docker images, simplifying image storage, and enabling seamless sharing across private or public environments.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">So, here you may wonder how we can replicate the same images from its registry to another AWS Account(cross-accounts) or in the same account in different regions(cross-region).<\/p>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-2 wp-block-group-is-layout-flex\">\n<p class=\"has-medium-font-size\"><strong>Pre-requisite:<\/strong>&nbsp;<\/p>\n\n\n\n<ol>\n<li>Need two AWS Accounts with admin access to Amazon ECR service and programmatic access for it(to pull\/push images). <\/li>\n\n\n\n<li>Login\/Signup:&nbsp; <a href=\"https:\/\/aws.amazon.com\/console\/\" target=\"_blank\" rel=\"noopener\">https:\/\/aws.amazon.com\/console\/<\/a><\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-1 wp-block-group-is-layout-flex\">\n<p class=\"has-text-align-left\"><em>Note: 1st AWS Account: Source account<\/em><\/p>\n\n\n\n<p class=\"has-text-align-left\">           <em>2nd AWS Account: Destination account<\/em><\/p>\n<\/div>\n<\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"441\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/11\/screenshot-2023-11-28-114516.png?w=800\" alt=\"\" class=\"wp-image-16481\" \/><figcaption class=\"wp-element-caption\">The architecture<\/figcaption><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">Enough theory part let&#8217;s take action for this, <\/p>\n\n\n\n<!--more-->\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-3 wp-block-group-is-layout-flex\">\n<p class=\"has-text-align-justify\">Login to 1st AWS Account: Source(select the respective region I have chosen here ap-south-1(Mumbai))&nbsp;<\/p>\n\n\n\n<p class=\"has-text-align-justify\">We have to create a replication rule. A Source account enables the Replication rule, as below:&nbsp;<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-4 wp-block-group-is-layout-flex\">\n<p>Action 1: Go to <strong>Amazon Elastic Container Registry<\/strong><\/p>\n\n\n\n<p>Action 2: Select <strong>Private Registry<\/strong> in the left pane and in that select <strong>Replication<\/strong><\/p>\n\n\n\n<p>Action 3: Click on the<strong> Add rule<\/strong>, and you will get 4 Steps.<\/p>\n\n\n\n<p>Action 4: Choose step 1: <strong>Destination types<\/strong> have two types:<\/p>\n\n\n\n<p>i) <strong>Cross-region replication<\/strong>: click on the <strong>first toggle<\/strong> button If you need ECR replication across regions within the same account that is Cross-region replication,<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"333\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/11\/screenshot-2023-11-28-114730.png?w=800\" alt=\"\" class=\"wp-image-16483\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">Click on Next for Step 2, and then you will get the cross-region replication step where you have to select your destination region names. You can mention multiple regions. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"486\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/11\/screenshot-2023-11-28-114910.png?w=800\" alt=\"\" class=\"wp-image-16485\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">Click on Next, in step 3,  As per your repository naming convention in your organization you can put a filter on it and if you don&#8217;t want to apply any filter then just simply put it blank as this is an optional step but this means like all repository will replicate to other regions of AWS. Click on next and review &amp; submit the rule.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"397\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/11\/screenshot-2023-11-28-115020.png?w=800\" alt=\"\" class=\"wp-image-16487\" \/><\/figure>\n\n\n\n<p>So till now, we have set up cross-region replications.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>ii) <strong>Cross-account replication<\/strong>: click on the <strong>second toggle<\/strong> button if you need ECR replication across different accounts that are Cross-account replication.) Click the next button.<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/gwhZ5eUixK4TbJXy4xy1ZPP7VGC1RXmUY0u77aC9r70mhuDJuIFUVVm6a_Xktp10AqtoO9edGEBQmzAXmT1iAC7EZFdZ6_C6ZsXRd13BeDbagotmXATqoK1gNLp-3_k6d72XNw9-6geVzFl7jibonDM\"><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-5 wp-block-group-is-layout-flex\">\n<p class=\"has-text-align-justify\">In Step 2: <strong>Cross-account replication<\/strong>, you have to put the destination account number and the region.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"454\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/11\/screenshot-2023-11-28-115309.png?w=800\" alt=\"\" class=\"wp-image-16489\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">Click on Next, and you may put the filter as the above step mentioned in cross-region replication. then Review and Submit.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Here we go, we have created the replication rule in the Source account.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"205\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/11\/screenshot-2023-11-28-115422.png?w=800\" alt=\"\" class=\"wp-image-16491\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-6 wp-block-group-is-layout-flex\">\n<p>iii) <strong>Cross-account &amp; Cross-region Replication:<\/strong> You can enable both toggles for cross-account with multiple regions in the destination account. The steps will be the same as discussed in the i), and ii) steps.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Action 5: Then, we have to create registry permissions in the Destination account to allow ECR repos images as below, <\/p>\n\n\n\n<p class=\"has-text-align-justify\">whereas, <\/p>\n\n\n\n<p class=\"has-text-align-justify\">1. principal of source account root(arn:aws:iam::&lt;source_account&gt;:root), <\/p>\n\n\n\n<p class=\"has-text-align-justify\">2. Taking action on &#8220;ecr:*&#8221; is the best practice that aws suggested, we can perform all actions from creating a repository to replicating images and many more.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">3. Take ecr resource of the source account like &#8220;arn:aws:ecr:ap-south-1:&lt;source_account&gt;:repository\/*&#8221;. All repositories can replicate to this destination account. see the below permission:<\/p>\n<\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"348\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/11\/screenshot-2023-11-28-115555.png?w=800\" alt=\"\" class=\"wp-image-16493\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">So let&#8217;s see the magic now, I have created one replication-testing repository in the source account. and will be pushing one sample image with the latest tag.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"202\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/11\/screenshot-2023-11-28-115718.png?w=800\" alt=\"\" class=\"wp-image-16496\" \/><figcaption class=\"wp-element-caption\"><em>Source Account ECR Repository manually created<\/em><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"211\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/11\/screenshot-2023-11-28-115858.png?w=800\" alt=\"\" class=\"wp-image-16498\" \/><figcaption class=\"wp-element-caption\"><em>Destination Account there is no ECR repository name called replication-testing<\/em><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"175\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/11\/screenshot-2023-11-28-120816.png?w=800\" alt=\"\" class=\"wp-image-16500\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"205\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/11\/screenshot-2023-11-28-120954.png?w=800\" alt=\"\" class=\"wp-image-16502\" \/><figcaption class=\"wp-element-caption\"><em>The ECR Repository \u201creplication-testing\u201d has the image with the latest tag<\/em><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"199\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/11\/screenshot-2023-11-28-121226.png?w=800\" alt=\"\" class=\"wp-image-16505\" \/><figcaption class=\"wp-element-caption\"><em>The ECR repository name replication-testing in the destination account syncs the image from the source to the destination account.<\/em><\/figcaption><\/figure>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-7 wp-block-group-is-layout-flex\">\n<p class=\"has-text-align-justify\">Folks, here you can see the newly created pushed images in the destination account and specified region. <\/p>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-justify\"><strong>Summarizing it:&nbsp;<\/strong><\/h3>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-10 wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-9 wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-8 wp-block-group-is-layout-flex\">\n<ol>\n<li>This is the best practice and strategy for disaster recovery plans, where once everything is set, in your hands all ECR repos will be there in the destination account.<\/li>\n\n\n\n<li>We don&#8217;t have to create any AWS private ECR repository in the destination account, it will be created automatically, once the replication rule and permission are applied.<\/li>\n\n\n\n<li>The only thing is that AWS still won&#8217;t support the feature of old image replication. Only newly pushed images can be replicated.<\/li>\n\n\n\n<li>Also, manifests of images can be replicated within the repos.<\/li>\n\n\n\n<li>If we wanted to delete the image from the source\/destination repository it would delete only from that repos. Don&#8217;t worry about other images residing in the destination\/source repository.<\/li>\n<\/ol>\n<\/div>\n\n\n\n<ol start=\"6\">\n<li>A replication configuration may contain up to 10 rules, with up to 25 unique destinations across all rules and 100 filters per each rule.<\/li>\n\n\n\n<li>Cost: Prices may vary for respective regions. Will pay only for what we have replicated images. Can apply life cycle policy. To delete older images with tags.<\/li>\n<\/ol>\n<\/div>\n\n\n\n<p>Example: If 1GB image size then the price for the ap-south-1(Mumbai) region would be,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <strong>&nbsp;1 GB per month x 0.10 USD = 0.10 USD<\/strong><\/p>\n<\/div>\n\n\n\n<p>That&#8217;s all from this blog, keep learning!!<\/p>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-11 wp-block-group-is-layout-flex\">\n<p><strong>References:<\/strong><\/p>\n\n\n\n<p> https:\/\/aws.amazon.com\/blogs\/containers\/using-amazon-ecr-replication-rules-to-optimize-your-application-delivery-process\/ https:\/\/aws.amazon.com\/blogs\/containers\/amazon-ecr-in-multi-account-and-multi-region-architectures\/ <\/p>\n\n\n\n<p>https:\/\/invenioit.com\/continuity\/disaster-recovery-statistics\/<\/p>\n\n\n\n<p>https:\/\/n2ws.com\/blog\/aws-cloud\/aws-cloud-data-protection-survey<\/p>\n<\/div>\n\n\n\n<p><strong>Blog Pundits: <a href=\"https:\/\/opstree.com\/blog\/\/author\/prakashjha9f558ddc78\/\"><strong>Prakash Jha<\/strong><\/a><a href=\"https:\/\/opstree.com\/blog\/\/author\/naveenverma023\/\"> <\/a>and <a rel=\"noreferrer noopener\" href=\"https:\/\/opstree.com\/blog\/\/author\/sandeep7c51ad81ba\/\" target=\"_blank\">Sandeep Rawat<\/a><\/strong><\/p>\n\n\n\n<p><strong>OpsTree is an End-to-End <a href=\"https:\/\/opstree.com\/services\/\" target=\"_blank\" rel=\"noreferrer noopener\">DevOps Solution<\/a> Provider.<\/strong><\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/opstree.com\/contact-us\/?utm_source=WordPress&amp;utm_medium=Blog&amp;utm_campaign=Amazon+ECR+Container+Images+Across+Accounts+or+Regions\" target=\"_blank\" rel=\"noreferrer noopener\">Contact Us<\/a><\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center\"><strong>Connect with Us<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-social-links aligncenter is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-1 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-twitter  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/twitter.com\/opstreedevops\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M22.23,5.924c-0.736,0.326-1.527,0.547-2.357,0.646c0.847-0.508,1.498-1.312,1.804-2.27 c-0.793,0.47-1.671,0.812-2.606,0.996C18.324,4.498,17.257,4,16.077,4c-2.266,0-4.103,1.837-4.103,4.103 c0,0.322,0.036,0.635,0.106,0.935C8.67,8.867,5.647,7.234,3.623,4.751C3.27,5.357,3.067,6.062,3.067,6.814 c0,1.424,0.724,2.679,1.825,3.415c-0.673-0.021-1.305-0.206-1.859-0.513c0,0.017,0,0.034,0,0.052c0,1.988,1.414,3.647,3.292,4.023 c-0.344,0.094-0.707,0.144-1.081,0.144c-0.264,0-0.521-0.026-0.772-0.074c0.522,1.63,2.038,2.816,3.833,2.85 c-1.404,1.1-3.174,1.756-5.096,1.756c-0.331,0-0.658-0.019-0.979-0.057c1.816,1.164,3.973,1.843,6.29,1.843 c7.547,0,11.675-6.252,11.675-11.675c0-0.178-0.004-0.355-0.012-0.531C20.985,7.47,21.68,6.747,22.23,5.924z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Twitter<\/span><\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Want to implement an AWS Elastic Container Registry Replication practice in your DevOps solution? But don\u2019t know how to start and where to go. Folks, now you are on the right path. We&#8217;re pursuing this to safeguard our production resources in the ap-south-1 (Mumbai) region from potential disasters and connectivity issues. Ensuring resource distribution across &hellip; <a href=\"https:\/\/opstree.com\/blog\/2023\/11\/28\/amazon-ecr-container-images-across-accounts-or-regions\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Amazon ECR Container Images Across Accounts or Regions&#8221;<\/span><\/a><\/p>\n","protected":false},"author":220022204,"featured_media":29900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[28070474],"tags":[44070,768739294,407692456,242358,768739308,676319247,4996032],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2025\/11\/DevSecOps-1.jpg","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-4a4","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/16000"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/220022204"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=16000"}],"version-history":[{"count":25,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/16000\/revisions"}],"predecessor-version":[{"id":16512,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/16000\/revisions\/16512"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29900"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=16000"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=16000"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=16000"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}