<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Scott Hsieh 🇹🇼</title>
    <description>The latest articles on DEV Community by Scott Hsieh 🇹🇼 (@fantastichsieh).</description>
    <link>https://dev.to/fantastichsieh</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F502790%2F5a9c2501-aa66-415a-8624-12100fb93113.jpg</url>
      <title>DEV Community: Scott Hsieh 🇹🇼</title>
      <link>https://dev.to/fantastichsieh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fantastichsieh"/>
    <language>en</language>
    <item>
      <title>How to migrate CDK v1 to CDK v2 in 10 minuets</title>
      <dc:creator>Scott Hsieh 🇹🇼</dc:creator>
      <pubDate>Fri, 10 Dec 2021 06:57:18 +0000</pubDate>
      <link>https://dev.to/aws-builders/how-to-migrate-cdk-v1-to-cdk-v2-in-10-minuets-6i6</link>
      <guid>https://dev.to/aws-builders/how-to-migrate-cdk-v1-to-cdk-v2-in-10-minuets-6i6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;The article was updated on May 17th, 2023 (Wed) for keeping update-to-date.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Content table
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Prologue&lt;/li&gt;
&lt;li&gt;
CDK Settings

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cdk.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;li&gt;peerDependencies&lt;/li&gt;
&lt;li&gt;devDependnecies&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

Modify Import

&lt;ul&gt;
&lt;li&gt;Stable&lt;/li&gt;
&lt;li&gt;Experimental modules&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Bootstrapping&lt;/li&gt;

&lt;li&gt;Conclusion&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Prologue
&lt;/h1&gt;

&lt;p&gt;The AWS Cloud Development Kit (AWS CDK) v2 is GA on Dec. 2nd, 2021 (Thur). You might have been using CDK v1, either Typescript, Javascript, Python, Java, or .NET, to create and manage your infrastructure for quite a while. Some crucial parts in CDK v2 are that every stable module is now integrated into a module called &lt;code&gt;aws-cdk-lib&lt;/code&gt; and the &lt;code&gt;Construct&lt;/code&gt; class is extracted into another library instead of &lt;code&gt;cdk.Construct&lt;/code&gt; by &lt;code&gt;import * as cdk from '@aws-cdk/core';&lt;/code&gt; in CDK v1. In the mean time, those packages which are still in experimental mode (status) will still be like individual modules that you used to import in CDK v1.&lt;br&gt;
In this post, I'll note the parts that I changed &lt;strong&gt;from an existing CDK application&lt;/strong&gt; based on v1 to CDK v2, including the application part and its test. This application is composed of 30 resources and was deployed via CDK v1 in the past. Now, it is deployed with CDK v2 into production and no issue found so far. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84q0bc40il4fbpfllwfb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84q0bc40il4fbpfllwfb.png" alt="My First Migration CDK Application from V1 to V2"&gt;&lt;/a&gt; &lt;em&gt;My First Migration CDK Application from V1 to V2&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  CDK settings
&lt;/h1&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;cdk.json&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"app"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx ts-node --prefer-ts-exts bin/aws-helper.ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"context"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/core:newStyleStackSynthesis"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/core:stackRelativeExports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-rds:lowercaseDbIdentifier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-lambda:recognizeVersionProps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;After&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"app"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx ts-node --prefer-ts-exts bin/aws-helper.ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"context"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/core:newStyleStackSynthesis"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/core:stackRelativeExports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-rds:lowercaseDbIdentifier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-lambda:recognizeVersionProps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Theoretically, you just need to remove all the feature flags put on &lt;code&gt;cdk.json&lt;/code&gt; in v1, and can check whether you need the new features listed on the &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html#migrating-v2-v1-upgrade-cdk-json" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt; via &lt;code&gt;cdk diff&lt;/code&gt;. For further detail, you could also go to the &lt;a href="https://github.com/aws/aws-cdk/blob/main/packages/%40aws-cdk/cx-api/FEATURE_FLAGS.md" rel="noopener noreferrer"&gt;Github documentation&lt;/a&gt; to take a look. As you could see, in my v1 &lt;code&gt;cdk.json&lt;/code&gt; of the application, none of the features is related to those new suggested in the v2 &lt;code&gt;cdk.json&lt;/code&gt;. Yet I love the concept of &lt;em&gt;YOU DON'T TURN YOUR BACK ON FAMILY&lt;/em&gt; from Vin Diesel, I just put all of them onto the v2 &lt;code&gt;cdk.json&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dependencies
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-events"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.96.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-events-targets"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.96.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-iam"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.96.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-lambda"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.96.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-lambda-python"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.96.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-stepfunctions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.105.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-stepfunctions-tasks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.105.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/core"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.96.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"esbuild"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^0.11.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source-map-support"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^0.5.16"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;After&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/aws-lambda-python-alpha"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.0.0-alpha.11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"aws-cdk-lib"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"constructs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^10.0.0"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Yes, that's it. In cdk v2, in general scenario, you only need &lt;code&gt;aws-cdk-lib&lt;/code&gt; and &lt;code&gt;constructs&lt;/code&gt;. Yet in my first migration application, I use &lt;code&gt;@aws-cdk/aws-lambda-python&lt;/code&gt; to build up my Python-based Lambda functions based on ARM. And this module is still in experimental mode as you could notice on the &lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-lambda-python-alpha-readme.html" rel="noopener noreferrer"&gt;v2 API references&lt;/a&gt;, therefore, you need to add it into the dependencies part of &lt;code&gt;package.json&lt;/code&gt;. AND you don't see it wrong, all experimental modules will be suffixed with &lt;code&gt;alpha&lt;/code&gt;, that's one of the conventions you need to adapt yourself to it. About what version you need to specify regarding experimental modules, go check it on &lt;a href="https://www.npmjs.com/package/@aws-cdk/aws-lambda-python-alpha" rel="noopener noreferrer"&gt;npm&lt;/a&gt;, my child, that's the quickest way I could sense so far. After you're highly familiar with how experimental versions are progressed, you farewell with looking up on &lt;a href="https://www.npmjs.com/" rel="noopener noreferrer"&gt;npm&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  peerDependencies
&lt;/h2&gt;

&lt;p&gt;I don't have any item in the &lt;code&gt;peerDependencies&lt;/code&gt; part of &lt;code&gt;package.json&lt;/code&gt;. And I added the following items into &lt;code&gt;package.json&lt;/code&gt; with cdk v2.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nl"&gt;"peerDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"aws-cdk-lib"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"constructs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^10.0.0"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  devDependnecies
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/assert"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.96.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@types/jest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^26.0.10"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@types/node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^10.17.27"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"aws-cdk"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.96.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"jest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^26.4.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ts-jest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^26.2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ts-node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^9.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"typescript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"~3.9.7"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;After&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@aws-cdk/assert"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@types/jest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^26.0.10"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@types/node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^10.17.27"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"aws-cdk-lib"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"constructs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^10.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"jest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^26.4.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ts-jest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^26.2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ts-node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^9.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"typescript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"~3.9.7"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Since in the CDK application, I have some tests about the application. The only part you need to mind is you upgrade the version of &lt;code&gt;@aws-cdk/assert&lt;/code&gt; and add &lt;code&gt;aws-cdk-lib&lt;/code&gt; and &lt;code&gt;constructs&lt;/code&gt;. You think there is another name for testing? No, no, no, you upgrade the version. By doing so, you don't need to change the testing where you've put quite hard effort and enter into the v2 world.&lt;/p&gt;

&lt;h1&gt;
  
  
  Modify Import
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Stable
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;import * as cdk from '@aws-cdk/core'&lt;/code&gt; =&amp;gt; &lt;code&gt;import {App, Fn, Tags} from 'aws-cdk-lib'&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;import targets = require('@aws-cdk/aws-events-targets')&lt;/code&gt; =&amp;gt; &lt;code&gt;import targets = require('aws-cdk-lib/aws-events-targets')&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;import * as iam from '@aws-cdk/aws-iam';&lt;/code&gt; =&amp;gt; &lt;code&gt;import { aws_iam as iam } from 'aws-cdk-lib';&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;import { Construct } from 'constructs';&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are three parts I gotta modify as you could see the list above. And about point 3, before &lt;a href="https://github.com/aws/aws-cdk/issues/17860" rel="noopener noreferrer"&gt;#issue17860&lt;/a&gt; is resolved, you just follow what I've done, otherwise, you may fail even executing &lt;code&gt;yarn build&lt;/code&gt;. In my CDK application, there are four &lt;code&gt;.ts&lt;/code&gt; files under the &lt;code&gt;lib&lt;/code&gt; directory, do you modify one by one? You might ask. My child, that is feasible yet you may start doubting why you have an infrastructure role and why you are here at the moment you're migrating. I usually count on VS Code for programming, both services and infrastructure. And you got take advantage of the &lt;code&gt;Replace All&lt;/code&gt; function in VS Cod., That will save your life, trust me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Experimental modules
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;import {PythonFunction} from '@aws-cdk/aws-lambda-python'&lt;/code&gt; =&amp;gt; &lt;code&gt;import {PythonFunction} from '@aws-cdk/aws-lambda-python-alpha&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it, just that easy.&lt;/p&gt;

&lt;h1&gt;
  
  
  Bootstrapping
&lt;/h1&gt;

&lt;p&gt;Conversion from CDK v1 to CDK v2 seems not too cumbersome as a heavy user of CDK v1. On the &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, it is suggested that you should not install CDK Toolkit v2 globally if you'll create both v1 and v2 projects. For new projects, I'm probably going to initialize them with CDK v2 yet for retaining risk to the lowest, I'll make v1 and v2 as different aliases.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# alias cdk1="npx aws-cdk@1.x" &lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;cdk&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"npx aws-cdk@2.x"&lt;/span&gt;
&lt;span class="nv"&gt;PROFILE_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ker_ker"&lt;/span&gt;
&lt;span class="nv"&gt;ACCOUNT_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;aws sts get-caller-identity &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'Account'&lt;/span&gt; &lt;span class="nt"&gt;--profile&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROFILE_NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; | &lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'\"'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;AWS_REGION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_REGION_BABY"&lt;/span&gt;

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;CDK_NEW_BOOTSTRAP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; cdk bootstrap &lt;span class="se"&gt;\&lt;/span&gt;
 &lt;span class="nt"&gt;--profile&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROFILE_NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
 &lt;span class="nt"&gt;--cloudformation-execution-policies&lt;/span&gt; arn:aws:iam::aws:policy/AdministratorAccess &lt;span class="se"&gt;\&lt;/span&gt;
 aws://&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ACCOUNT_ID&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;AWS_REGION&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In other projects, I use the &lt;a href="https://docs.aws.amazon.com/cdk/api/latest/docs/pipelines-readme.html" rel="noopener noreferrer"&gt;CDK pipelines&lt;/a&gt; module, therefore, I bootstrapped the environment for CDK v2 as the above. If you don't use the CDK pipelines module to execute automatic deployment for your infrastructure, your re-bootstrapping command will be simpler than mine. &lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;After done with re-bootstrapping, from testing, upgrading packages to deployment, all the CDK commands remain the same. And there's still one issue, i.e., we might only need 10 minutes to migrate a v1 application to v2, what if there are decades of complicated applications? How I wish I could migrate my whole v1 applications to v2 just with one click. That a utopian world I'll enter in my dream now. Other than that, have good time on your migration journey from CDK v1 to CDK v2.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5eydulklaajje0b05q8z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5eydulklaajje0b05q8z.png" alt="CDK V2 API Reference"&gt;&lt;/a&gt; &lt;em&gt;A Screenshot of CDK V2 API Reference&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cdk</category>
      <category>migration</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>Scott's Journey on Passing AWS DevOps Engineer Professional Certification</title>
      <dc:creator>Scott Hsieh 🇹🇼</dc:creator>
      <pubDate>Sun, 03 Oct 2021 04:03:54 +0000</pubDate>
      <link>https://dev.to/aws-builders/scott-s-journey-on-passing-aws-devops-engineer-professional-certification-2h79</link>
      <guid>https://dev.to/aws-builders/scott-s-journey-on-passing-aws-devops-engineer-professional-certification-2h79</guid>
      <description>&lt;p&gt;&lt;a href="https://www.credly.com/badges/77a4fe7a-00dc-4857-929b-d4ba016da532/public_url"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mppnecq39zqtnh3c1pi.png" alt="AWS DevOpe Engineer Professional" width="600" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Content Table
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Prologue&lt;/li&gt;
&lt;li&gt;Official Exame Guide &lt;/li&gt;
&lt;li&gt;
Tips for Real Exam

&lt;ul&gt;
&lt;li&gt;
Compute
&lt;/li&gt;
&lt;li&gt;
Networking &amp;amp; Content Delivery  &lt;/li&gt;
&lt;li&gt;
Developer Tools
&lt;/li&gt;
&lt;li&gt;
Storage
&lt;/li&gt;
&lt;li&gt;Log&lt;/li&gt;
&lt;li&gt;
High Availability, Fault Tolerance, and Disaster Recover
&lt;/li&gt;
&lt;li&gt;Others&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
Implementation Suggestions
&lt;/li&gt;
&lt;li&gt;
Conclusion
&lt;/li&gt;
&lt;li&gt;
References
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Prologue
&lt;/h1&gt;

&lt;p&gt;After passing the &lt;a href="https://www.credly.com/badges/8fdcfe2c-5f7e-4d08-a420-cd49764b332d/public_url"&gt;AWS DAS&lt;/a&gt; in February this year, I'd been fascinating about how to become a professional lazybones&lt;sup&gt;[3]&lt;/sup&gt; in spare time apart from building custom CDK constructs, sharing at the AWS Taiwan UG, internal sharing in my own company, and recording for an external session. All of sudden, I felt gotta keep moving on towards goals after studying the quintessence of lazybones for a while. So, the journey of pursuing the AWS DevOps Engineer Professional Certification began at that moment.&lt;br&gt;&lt;br&gt;
&lt;a href="https://i.giphy.com/media/mEUmeOiT9MCMo/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/mEUmeOiT9MCMo/giphy.gif" width="500" height="278"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  Official Exame Guide
&lt;/h1&gt;

&lt;p&gt;Like you will check how many mountain trails you gotta walk through for taking down the Taipai Grand Trail and what materials you need to collect so that you could get a legendary weapon Kudzu for your ranger in Guild War 2. To get the One Piece of the DOP, you have to evaulaute whether you've had quite some sense what specific enterprise scenarios (cases) are going to show up in this certification and what AWS services you could consider resolving the issues transpired in those cases. From the website, you could see:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Validation on candidates' ability&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement and manage continuous delivery systems and methodologies on AWS&lt;/li&gt;
&lt;li&gt;Implement and automate security controls, governance processes, and compliance validation&lt;/li&gt;
&lt;li&gt;Define and deploy monitoring, metrics, and logging systems on AWS&lt;/li&gt;
&lt;li&gt;Implement systems that are highly available, scalable, and self-healing on the AWS platform&lt;/li&gt;
&lt;li&gt;Design, manage, and maintain tools to automate operational processes
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Recommended knowledge and experience&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Experience developing code in at least one high-level programming language; building highly automated infrastructures; and administering operating systems&lt;/li&gt;
&lt;li&gt;Understanding of modern development and operations processes and methodologies&lt;/li&gt;
&lt;li&gt;Ability to implement and manage continuous delivery systems and methodologies on AWS&lt;/li&gt;
&lt;li&gt;Ability to implement and automate security controls, governance processes, and compliance validation&lt;/li&gt;
&lt;li&gt;Ability to define and deploy monitoring, metrics, and logging systems on AWS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the exam guide, we could see the content expounds more detail into 6 fields that this certification is going to test whether you can respond rapidly towards forementioned enterprise scenarios and understand what AWS services can fulfil the requirements in those cases.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+----------+----------------------------------------------------------+-----+
| Domain 1 | SDLC Automation                                          | 22% |
+----------+----------------------------------------------------------+-----+
| Domain 2 | Configuration Management and Infrastructure as Code      | 19% |
+----------+----------------------------------------------------------+-----+
| Domain 3 | Monitoring and Logging                                   | 15% |
+----------+----------------------------------------------------------+-----+
| Domain 4 | Policies and Standards Automation                        | 10% |
+----------+----------------------------------------------------------+-----+
| Domain 5 | Incident and Event Response                              | 18% |
+----------+----------------------------------------------------------+-----+
| Domain 6 | High Availability, Fault Tolerance, and Disaster Recover | 16% |
+----------+----------------------------------------------------------+-----+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;SDLC Automation&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Apply concepts required to automate a CI/CD pipeline&lt;/li&gt;
&lt;li&gt;Determine source control strategies and how to implement them&lt;/li&gt;
&lt;li&gt;Apply concepts required to automate and integrate testing&lt;/li&gt;
&lt;li&gt;Apply concepts required to build and manage artifacts securely&lt;/li&gt;
&lt;li&gt;Determine deployment/delivery strategies (e.g., A/B, Blue/green, Canary, Red/black) and how to
implement them using AWS services&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Configuration Management and Infrastructure as Code&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Determine deployment services based on deployment needs&lt;/li&gt;
&lt;li&gt;Determine application and infrastructure deployment models based on business needs&lt;/li&gt;
&lt;li&gt;Apply security concepts in the automation of resource provisioning&lt;/li&gt;
&lt;li&gt;Determine how to implement lifecycle hooks on a deployment&lt;/li&gt;
&lt;li&gt;Apply concepts required to manage systems using AWS configuration management tools and
services&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Monitoring and Logging&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Determine how to set up the aggregation, storage, and analysis of logs and metrics&lt;/li&gt;
&lt;li&gt;Apply concepts required to automate monitoring and event management of an environment&lt;/li&gt;
&lt;li&gt;Apply concepts required to audit, log, and monitor operating systems, infrastructures, and
applications&lt;/li&gt;
&lt;li&gt;Determine how to implement tagging and other metadata strategies&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Policies and Standards Automation&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Apply concepts required to enforce standards for logging, metrics, monitoring, testing, and security&lt;/li&gt;
&lt;li&gt;Determine how to optimize cost through automation&lt;/li&gt;
&lt;li&gt;Apply concepts required to implement governance strategies&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Incident and Event Response&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Troubleshoot issues and determine how to restore operations&lt;/li&gt;
&lt;li&gt;Determine how to automate event management and alerting&lt;/li&gt;
&lt;li&gt;Apply concepts required to implement automated healing&lt;/li&gt;
&lt;li&gt;Apply concepts required to set up event-driven automated actions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;High Availability, Fault Tolerance, and Disaster Recovery&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Determine appropriate use of multi-AZ versus multi-Region architectures&lt;/li&gt;
&lt;li&gt;Determine how to implement high availability, scalability, and fault tolerance&lt;/li&gt;
&lt;li&gt;Determine the right services based on business needs (e.g., RTO/RPO, cost)&lt;/li&gt;
&lt;li&gt;Determine how to design and automate disaster recovery strategies&lt;/li&gt;
&lt;li&gt;Evaluate a deployment for points of failure

&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Tips for Real Exam
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Compute
&lt;/h2&gt;

&lt;p&gt;Such as EC2, Elastic Beanstalk, Lambda, ECS, and Fargate, you need to grasp basic understanding of these services. By saying basic understanding, it doesn’t mean reading over related official documentations is enough, but at least you gotta equipped with operation experience of those services via the Web Console. Of course, if you work hard enough, deploying the services by CloudFormation (CFN will be used in the rest of the article) or the CDK can be beneficial both to smashing DOP and your own DevOps experience.  &lt;/p&gt;

&lt;p&gt;EC2 can be utilized to become an AP or API server; From scratch, you probably will grow your system gradually from a single functionality based on requirements. During the time, you might still log in the EC2 where your system, or function aggregation, resides via ssh with a key pair to manage the code snippets that support your system or service. Aside from ssh, is there a safer way to log in? Have you ever operated EC2 Instance Connect and Session Manager in AWS Systems Manager? To log in an EC2 server via two forementioned methods, do you know what steps you need to go through on authorization and configuration so that a user can log in via the services?&lt;/p&gt;

&lt;p&gt;As time passes, you might realize that during some specific time spans, requesting number to your service, or server, is large and your server cannot handle this copious amount of requesting. Do you know in this moment you could consider using Elastic Load Balancing and EC2 AUto Scaling to tackle this kind of issue? About launch templates (LT) and launch configuration (LC), can you explain the difference between the two and what scenarios they are suitable? Is there any connection between Auto Scaling Groups (ASG), and LT and LC? What are EC2 Auto Scaling lifecycle hooks? What states are included in the lifecycle hooks? What events, or states,  are followed after the scale-out and scale-in events? If traffic in the coming future cannot be predicted or depicted, among multiple scaling strategies of Auto Scaling, what option you can consider? After grasping all of the scaling strategies, what are their proper usage scenarios? What phenomena will make auto scaling start to work? Can I trigger auto scaling based on some condition? What conditions can I select? If auto scaling is at the scale-in state, before compute instances are going to be terminated, you want to snapshot the instances or create the AMIs, do you know in what state of the lifecycle hooks allows you to define the forementioned custom actions? Or what if there are running compute instances in an ASG, and for regulation purpose, the instances need to be attached the 2nd network interface for connecting to an independent subnet managed by other business unit, what you can do in the lifecycle hooks in order to achieve the requirements? &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz45fshm30p4u6y67vi41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz45fshm30p4u6y67vi41.png" alt="Alt Text" width="800" height="343"&gt;&lt;/a&gt; &lt;em&gt;Introducing Native Support for Predictive Scaling with Amazon EC2 Auto Scaling&lt;sup&gt;[41]&lt;/sup&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In terms of Elastic Load Balancing, can you name all of the load balancers&lt;sup&gt;[9]&lt;/sup&gt;? In what aspects there is the difference between Application Load Balancer (ALB) and Network Load Balancer (NLB)? In the OSI model, which kind of OSI level for load balancing do they support respectively? If load balancing is required to be integrated with Lambda, what load balancer should be chose?  &lt;/p&gt;

&lt;p&gt;Do you know what things Elastic Beanstalk as a service can do for you automatically? What are Elastic Beanstalk composed of?   Can environment be categorized? If there are multiple kinds of environments, what specific tasks they are especially good at? What is &lt;code&gt;.ebextensions&lt;/code&gt; for? What can it achieve? Can I modify hardware spec of compute instances via &lt;code&gt;.ebextensions&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlxlqwdhuarrr3swx11n.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlxlqwdhuarrr3swx11n.jpeg" alt="Alt Text" width="800" height="361"&gt;&lt;/a&gt; &lt;em&gt;Model serving in Java with AWS Elastic Beanstalk made easy with Deep Java Library&lt;sup&gt;[28]&lt;/sup&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With micro-service architecture becoming more popular and popular, after assimilating related concepts&lt;sup&gt;[18]&lt;/sup&gt;&lt;sup&gt;[27]&lt;/sup&gt;&lt;sup&gt;[43]&lt;/sup&gt;, its history&lt;sup&gt;[20]&lt;/sup&gt;, and what AWS services can assist you in building micro services&lt;sup&gt;[8]&lt;/sup&gt;, you'll enter the world of Lambda, ECS, and Fargate. How many phases are there in terms of AWS Lambda execution environment? What programming languages does it support natively, or directly? If a programming language that isn't supported by AWS is preferred to be executed, what method you could consider to achieve the goal? What are the least permissions for an AWS Lambda function to be executed? If integration with other AWS services via Lambda is required, what needs to be done as wishes? If a web server hosted on an EC2 instance with authentication functionality is intended to be migrated to Lambda as serverless service, what components might be changed compared to the original architecture?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4j8b4daaauf2nwqhi77u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4j8b4daaauf2nwqhi77u.png" alt="Alt Text" width="800" height="366"&gt;&lt;/a&gt; &lt;em&gt;How to get notified on specific Lambda function error patterns using CloudWatch&lt;sup&gt;[29]&lt;/sup&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;ECS is for containers, as a managed service, what components are there in ECS? Like task definition, auto scaling, container agent, etc., you're supposed to distinguish components of ECS. Just follow classic examples on the official documentations for hands-on experience, with explanation in the technical documentations and a fabulous late melt with Hokkaido milk. What is the relationship between ECS and ECR? Do they need each other to work, or they can be combined to work together? Is there any one between the services that can execute other task independently?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fustnyvut4ji0adyngyib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fustnyvut4ji0adyngyib.png" alt="Alt Text" width="800" height="396"&gt;&lt;/a&gt; &lt;em&gt;Figure in &lt;a href="https://aws.amazon.com/blogs/apn/how-steamhaus-used-aws-well-architected-to-improve-sperry-rails-artificial-intelligence-system/"&gt;How Steamhaus Used AWS Well-Architected to Improve Sperry Rail’s Artificial Intelligence System&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You still need to manage web servers by deploying your applications or services to ECS, there exists operation cost to some extent. Hence, AWS who captured the customers' need launched AWS Fargate. What differences there are between the ECS container service and AWS Fargate? Why the need of AWS Fargate is getting more and more? When you attempt to figure out carefully, you'll realize what elegant and efficient developing experience is.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27ltrqurq8n17h9kl1qw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27ltrqurq8n17h9kl1qw.png" alt="Alt Text" width="800" height="450"&gt;&lt;/a&gt; Figure in &lt;a href="https://aws.amazon.com/blogs/gametech/game-server-hosting-on-aws-fargate/"&gt;Game Server Hosting on AWS Fargate&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Networking &amp;amp; Content Delivery
&lt;/h2&gt;

&lt;p&gt;On the aspect of VPC, you'll also need some understanding, after all, the services mentioned so far are built upon VPC (except Amazon ECS Anywhere, Amazon EKS Anywhere, and AWS Outposts). Like what public subnets, private subnets, route tables, network ACL, and security group (SG) are. What are ENI, CIDR, Internet Gateway, NAT Gateway, and VPC endpoints, etc.? When grasping ENI at the beginning level, you could schedule some time to go deeply about what is the difference among ENI, ENA, and EFA&lt;sup&gt;[36]&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;About Route53, you're suggested to have sense on how many kinds of DNS records there are, such as A, AAAA, CNAME, Alias records, etc. You gotta at least read through the documentation of routing policies. Geolocation and geo-proximity are all connected to geolocation. What is their difference? What can be achieved via DNS failover? What options can be considered for DNS failover? &lt;/p&gt;

&lt;h2&gt;
  
  
  Developer Tools
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Deployment Models&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Now we are about to enter into the scope of deployment models. If you look carefully at Point 5 of the SDLC Automation in domain knowledge of the exam guide, you'll see blue/green, canary&lt;sup&gt;[11]&lt;/sup&gt;&lt;sup&gt;[38]&lt;/sup&gt;, and red/black deployment models. Regarding the blue/green deployment, I personally thought the 2015 speech given by Andy Mui and Vlad Vlasceanu will be a good start&lt;sup&gt;32&lt;/sup&gt;. Its content delivered concise and informative information on what possible combinations there are to run through the blue/green deployment on the aspect of EC2 and ECS. Aside from some super helpful comparison, strategies at data level were also suggested, such as when a blue/gree deployment is about to be progressed, if data schema is also going to be changed, what corresponding methods can be implemented?  &lt;/p&gt;

&lt;p&gt;The red/back deployment and blue/green deployment can be regarded as the same deployment model. You could spend some time figuring out their mindset in back and then focus on the blue/green deployment. After all, in &lt;a href="https://www.cncf.io/wp-content/uploads/2020/08/CNCF-Presentation-Template-K8s-Deployment.pdf"&gt;a presentation file titled &lt;em&gt;Deployment Strategies on Kubernetes&lt;/em&gt;&lt;/a&gt; in the CNCF also equals the blue/green deployment and red/black deployment.&lt;/p&gt;

&lt;p&gt;On the aspect of computing, you could see AWS offers numerous selections. How to progress the blue/green deployment for EC2? How about the blue/green deployment via CFN for ECS&lt;sup&gt;[39]&lt;/sup&gt;? How to execute a canary deployment for pure Lambda&lt;sup&gt;[33]&lt;/sup&gt;? If there is a serverless service combined with Lambda and Amazon API Gateway, a newer version to be deployed is required while visiting the original API should be allowed, what needs to be configured in procedure?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvnkb64e956dz61furtm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvnkb64e956dz61furtm.png" alt="Alt Text" width="592" height="436"&gt;&lt;/a&gt; &lt;em&gt;Blue/Green Deployments with Amazon Elastic Container Service&lt;sup&gt;[16]&lt;/sup&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CloudFormation and AWS Serverless Applicaiton Model&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You must manipulate CFN, by sorely viewing technical documentation, you might not be able to have quite solid grasp. In CFN, how do you refer to resources in nested stacks? When infrastructure becomes huge, is there any organizing practice that can be followed in terms of stack building? What are &lt;code&gt;cfn-init&lt;/code&gt;, &lt;code&gt;cfn-signal&lt;/code&gt;, &lt;code&gt;cfn-get-metadata&lt;/code&gt;, and &lt;code&gt;cfn-hup&lt;/code&gt; for? What resources support the &lt;code&gt;UpdatePolicy&lt;/code&gt; attribute? With &lt;code&gt;AWS::AutoScaling::AutoScalingGroup&lt;/code&gt;, what other more specific options are provided for managing ASG via CFN? Do you know that custom resources can invoke Lambda functions and AWS APIs? For example, &lt;a href="https://www.linkedin.com/pulse/cloudformation-lambda-backed-custom-resource-d%C3%ADaz-fern%C3%A1ndez/?articleId=6625782528299139073"&gt;making Lambda functions managed by CFN updatable, which are stored in a S3 bucket where versioning is open&lt;/a&gt;, &lt;a href="https://aws.amazon.com/tw/premiumsupport/knowledge-center/cloudformation-s3-notification-lambda/"&gt;configuring event notification to Lambda on an existing S3 bucket&lt;/a&gt; (right now, CDK already supports this scenario), &lt;a href="https://www.wellarchitectedlabs.com/well-architectedtool/300_labs/300_using_wat_with_cloudformation_and_custom_lambda/5_explore_wareview/"&gt;creating and updating AWS well-architected reviews&lt;/a&gt;,  &lt;a href="https://constructs.dev/packages/cdk-comprehend-s3olap/v/0.0.19?lang=typescript"&gt;making the ARN of a Lambda function deployed by &lt;code&gt;AWS::Serverless::Application&lt;/code&gt; visible to the following S3 Object Lambda deployment&lt;/a&gt;, etc. &lt;code&gt;WaitCondition&lt;/code&gt; in CFN can make signals without accessing the Internet&lt;sup&gt;[30]&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fukeo6ruukv5f9rdu2dff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fukeo6ruukv5f9rdu2dff.png" alt="Alt Text" width="700" height="273"&gt;&lt;/a&gt; &lt;em&gt;Best practices for organizing larger serverless applications&lt;sup&gt;12&lt;/sup&gt;&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CodeCommit, AWS CodeBuild, AWS CodeDeploy, and AWS CodePipeline&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Developers might agree with that git is a popular tool for version control and CodeCommit is a managed service of version control by AWS. To empower developers in a team to execute specific git commands towards a CodeCommit repository, what needs to be set related to permissions? If a Git repository is going to be migrated to CodeCommit, what steps are necessary? If an action in CodePipeline failed, what can be implemented to notify DevOps engineers or related developers? (Not through AWS Chatbot) In a CodePipeline pipeline combined with CodeBuild and CodeDeploy, if the insertion of code testing (function test, unit test, integration test, bra bra) is intended, what you can do to achieve the goal? In a CICD pipeline, what way is feasible to make applications conform to security regulations? How many kinds of events can be listened in CodePipeline? What servcies are used for listening? CodeDeploy can not only assist in deployment for AWS resources but also IDC machines. If we want to deploy to IDC machines via CodeDeploy, what are the prerequisites? How do you build a cross-account CD pipeline? If sensitive information will be accessed in a CICD pipeline, do you know that AWS Systems Manager Parameter Store and AWS Secrets Manager can be adopted pertaining to security concerns? &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x2htsdazhcuyr2d8udg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x2htsdazhcuyr2d8udg.png" alt="Alt Text" width="700" height="313"&gt;&lt;/a&gt; &lt;em&gt;Figure in &lt;a href="https://aws.amazon.com/tw/blogs/devops/ci-cd-on-amazon-eks-using-aws-codecommit-aws-codepipeline-aws-codebuild-and-fluxcd/"&gt;CI/CD on Amazon EKS using AWS CodeCommit, AWS CodePipeline, AWS CodeBuild, and FluxCD&lt;/a&gt;&lt;/em&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Storage
&lt;/h2&gt;

&lt;p&gt;How many storage classes are there in S3? What are the differences among these classes? In what circumstances, you should select Intelligent Tiering? And in what situation One-Zone IA will be more suitable? What configuration you need to deal with so that the storage level of objects will be deleted and transitioned according to some time unit? What is ACL? How many kinds of pre-defined S3 ACLs are there? What is the bucket policy of an S3 bucket for? What is the application possibility on S3 object tags&lt;sup&gt;[14]&lt;/sup&gt;?&lt;/p&gt;

&lt;p&gt;Amazon RDS and AWS DynamoDB as the solutions for RDBS and NoSQL respectively, what criteria you might consider when it comes to selecting storage place for your data? NoSQL doesn't mean that there is no relation among data, also, it is not an invention to replace RDBS. About this topic, I suggest you could refer to the one-hour speech&lt;sup&gt;21&lt;/sup&gt; given by Rick Houlihan as AWS NoSQL Principal Technologist, you'll have a wonderful trip there.  &lt;/p&gt;

&lt;p&gt;What is the functionality of Amazon Aurora Global Database? What are Amazon DynamoDB Global Tables for? Either Auora or DynamoDB, how to do the Multi-AZ and Multi-region backups? What are GSI and LSI? Regarding RDS, for improving read or write throughput, you probably will consider utilizing Amazon ElastiCache, either Memcached or Redis. To achieve the same result, do you know there is a thing called DAX&lt;sup&gt;23&lt;/sup&gt;? If you still have time, go check RCU and WCU. If data in DynamoDB is intended to archive to S3 based on some time frequency, what services can be integrated to achieve this&lt;sup&gt;[40]&lt;/sup&gt;?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mv9ouira08a8tl1eqf6.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mv9ouira08a8tl1eqf6.jpeg" alt="Alt Text" width="647" height="341"&gt;&lt;/a&gt; Figure in &lt;a href="https://aws.amazon.com/tw/blogs/database/how-to-increase-performance-while-reducing-costs-by-using-amazon-dynamodb-accelerator-dax-and-aws-lambda/"&gt;Use Amazon DynamoDB Accelerator (DAX) from AWS Lambda to increase performance while reducing costs&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Log
&lt;/h2&gt;

&lt;p&gt;What is the major difference between CloudTrail and CloudWatch? To reach real-time processing on CloudWatch logs, what you can do? Is there any difference between CloudWatch Events and EventBridge? For example, if you want to monitor cross-account launch failure on EC2 instances, what you should do? To record topic, timestamp, resource IP in SES to a log group in CloudWatch, what service can be adopted to achieve the goal? If analyzing log data is intended, is there any functionality in CloudWatch that can help me query? Is there any choice on storage location for logs?  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xsz47tbjealxlqcbb2b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xsz47tbjealxlqcbb2b.png" alt="Alt Text" width="800" height="597"&gt;&lt;/a&gt; Figure in &lt;a href="https://aws.amazon.com/tw/blogs/architecture/bbva-architecture-for-large-scale-macie-implementation/"&gt;BBVA: Architecture for Large-Scale Macie Implementation&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  High Availability, Fault Tolerance, and Disaster Recover
&lt;/h2&gt;

&lt;p&gt;With proper understanding on compute, networking, and storage services, you'll start to digest the concepts of high availability, failover, and disaster recovery (DR). About this field, I recommend &lt;em&gt;Reliability Pillar&lt;/em&gt; in the AWS Well-Architected series. It is a book which organizes the concepts pretty much well. At least you need to know how many levels are defined in terms of disaster recovery. What is the definitions of RTO and RPO? In the real world, the people you're discussing with might not understand what the backup &amp;amp; restore is or what the pilot light is. Yet, by talking with time unit, you still can roughly get what level the disaster recovery being discussed belongs to. &lt;/p&gt;

&lt;p&gt;About exam questions related to this field (DR), you will be in hell if you don't have solid grasp of the forementioned AWS services. You not only learn these services' functionalities, you gotta compare responding time on the aspects of backup and relaunch also. By going through this way, you'll be able to resonate in the content in &lt;em&gt;Reliability Pillar&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Take a brief example, There is a company which has infrastructure in three continents. The base is Europe, and Asia and the United States are extended areas. There are analysts in the three continents. They analyze log data via a web application. The data is stored in DynamoDB of Europe and ECS on Fargate with ALB and auto scaling serves their web application. Now, the analyst in Asia and the United States are complaining about slow response time and the speed of specific analysis is starting killing them. How can you modify the infrastructure architecture and then send the anaysts a sincere Bon-Jovi-have-a-nice-day smile?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qr3wixzm2ff9d3fvkdl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qr3wixzm2ff9d3fvkdl.png" alt="Alt Text" width="800" height="417"&gt;&lt;/a&gt; Figure in &lt;a href="https://aws.amazon.com/tw/blogs/architecture/implementing-multi-region-disaster-recovery-using-event-driven-architecture/"&gt;Implementing Multi-Region Disaster Recovery Using Event-Driven Architecture&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Others
&lt;/h2&gt;

&lt;p&gt;I suggest you also need some understanding on Amazon ES and AWS Storage Gateway, i.e., what are their functionalities? How the architectures look like? You have to grasp thoses to some extent. AWS OpsWorks can be used to manage instance configuration. What two automation services is it based on? What is the difference among AWS OpsWorks Stacks, AWS OpsWorks for Chef Automate, and AWS OpsWorks for Puppet Enterprise? AWS OpsWorks and AWS Systems Automation can both be taken to execute automation tasks. What is the difference? Amazon Inspector can be helpful on security. What is its difference to Amazon GuardDuty? Except vulnerability assessment on AWS resources according to assessment rules, is there anything else that AWS Inspector can do&lt;sup&gt;[19]&lt;/sup&gt;? What does AWS Trusted Advisor do? What is its difference to AWS Config? Apart from that AWS Config rules can work in a single account, if the enablement of AWS Config rules across multiple accounts is required, what needs to be done? If specific actions are intended to be executed automatically after targets are discovered by AWS Config rules, what can be adopted to reach this kind of automation? What is Tag Editor for? What we can do via AWS RAM?  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4wyvr2dvkcvtoq4pvk13.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4wyvr2dvkcvtoq4pvk13.png" alt="Alt Text" width="800" height="388"&gt;&lt;/a&gt; &lt;em&gt;Improve monitoring of AWS Systems Manager Agent&lt;sup&gt;[26]&lt;/sup&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff996wd1e9nosx7f5hiwd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff996wd1e9nosx7f5hiwd.png" alt="Alt Text" width="800" height="413"&gt;&lt;/a&gt; &lt;em&gt;How to visualize multi-account Amazon Inspector findings with Amazon Elasticsearch Service&lt;sup&gt;[37]&lt;/sup&gt;&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Implementation Suggestions
&lt;/h1&gt;

&lt;p&gt;If possible, please get hands-on experience on all the AWS services mentioned above at least via the Web Console. Either they are simple examples (some of them I won't say it's easy, I prefer to take the term of classic to describe) organized by the documentations of AWS services or films on Youtube that were published by passionate developers, all of them are options that you can run through. Like ECS, a beginner example or an auto-scaling example both can be found on the Internet. Furthermore, if time permits, attempt to craft some application examples via CFN or CDK. From the AWS official documentations to &lt;a href="https://github.com/aws-samples"&gt;AWS Samples&lt;/a&gt; to AWS blogs, they all provide CFN templates that you could deploy quickly. Just make your hands dirty, with description on the technical documentations, the ride can reach the final for sure. Lastly, if you still can squeeze somte time by accident, go manipulate CDK to build some applications based on miscellaneous scenarios with any one of the services mentioned above. Following the suggestions, I believe on the road of pursuing DOP, you'll feel safe.  &lt;/p&gt;

&lt;p&gt;As of me, looking to the past, I had experience on the CICD in the IDC and the CICDs with pure AWS solutions. I implemented the latter one with CFN and CDK. I also once built the construct of &lt;a href="https://constructs.dev/packages/cdk-databrew-cicd/v/0.1.36?lang=typescript"&gt;CICD combining AWS Glue DataBrew&lt;/a&gt;. About the compute services, once built them via CFN and CDK also. A project where the front-end and back-end are split. A project with pure back-end. A project for &lt;a href="https://github.com/pahud/cdk-cloudfront-plus"&gt;CloudFront extensions&lt;/a&gt;. For example, like DNS record type that points to an ALB, the application and renewal of ACM certifications, etc. When reading new articles in the AWS blogs, I'll try as much as possible to manipulate their mindset via CFN, if there exist, and then ponder possible variation based on them. It's not that as easy as you might feel when reading through this article, yet it's very similar to leveling up in an online game. From lvl 80 to lvl 81, you just need 36,065,092 exactly that much. It's inescapable.&lt;br&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;In the DOP exam, it's included numerous condensed real scenarios (brief and comprehensive) to test whether you can act properly by given limitations or conditions and tackle the issues. Via grasping the essence of the AWS services and figuring out the solutions built by other developers, you'll be eventually capable of resolving problems swiftly when facing various and diverse of them.  &lt;/p&gt;

&lt;p&gt;About the DOP exam, normally, latest features won't come to you. In computing, such as Lambda container, Amazon ECS Anywhere, Amazon EKS Anywhere, Instance Refresh of EC2 Auto Scaling. In networking, like Amazon Route 53 Resolver DNS Firewall&lt;sup&gt;[25]&lt;/sup&gt;; Or like CFN modules&lt;sup&gt;[17]&lt;/sup&gt; and CFN registry. DOP usually tests your horizontal level and some will be deep (detail); about the k8s knowledge, you might consider the CKA, CKAD, and CKS created by the CNCF.&lt;/p&gt;

&lt;p&gt;Concerning the SDLC automation, its implementation might differ&lt;sup&gt;[42]&lt;/sup&gt; because of industries, enterprise culture, and so on. What DOP tests you mostly focuses on horizontal level and the AWS services. Like unit test, integration test, and static analysis, you won't see in this exam. Regarding their detail, readers can consider joining the &lt;a href="https://www.facebook.com/groups/817976138289434"&gt;DevOps Taiwan&lt;/a&gt; group on Facebook. In addition to annual party, merely watching conversations among DevOps experts may already give you lessons learned. (Of course, not only the forementioned tests will be discussed, trust me, you have a bumper harvest by participating). &lt;/p&gt;

&lt;p&gt;In the end, wanna share I took the exam on the Pearson VUE platform. There will be a proctor who watches you during the exam (shy shy &amp;gt;////&amp;lt;). The available languages are English and Japanese. I chose the English exam and an English proctor, strongly suggest you should bring your personal laptop. Actually, in the guidance of the online exam, it is also suggested that it's better to bring your own laptop. I didn't capture the information and took the company laptop to welcome the exam. And what happened is the anti-virus software in the company laptop didn't give the green light to the VUE online program for exams.&lt;/p&gt;

&lt;p&gt;It took me around one hour to negotiate with the proctor to wait for my colleague (the unit who manages the anti-virus software) coming to take a look but to no avail, the proctor cancelled the exam, and rushed back to my living place to take my personal laptop. The most impressive thing is I purchased the exam at 10:26 AM and chose one which starts at 10:30 AM. (Different proctor in the first exam and second exam). I spent around 2 hours going through 75 questions and checked those which were tagged by me previously in the rest of time. In the last 3 minutes, nothing I could do anymore and submitted my exam. Eventually, I got the ONE PIECE of DOP.&lt;/p&gt;

&lt;p&gt;If anyone who is thinking about taking the exam intends to choose the online way, PLEASE use your personal laptop. Trust me, you'll thank me. If you prefer testing centers, you probably need to evaluate the COVID-19 pandemic situation. By this channel, you also lose the flexibility of going through the exam 4 minutes later right after purchasing. However, you might benefit from the availability of physical little white board. If you'd learned something on taking the DOP exam from this sharing, this article would fulfill its mission. Good luck, fellows!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Day 2 is stasis. Followed by irrelevance. Followed by excruciating, painful decline. Followed by death. And that is why it is always Day 1. — Jeff Bezos&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Contruct Hub, &lt;a href="https://constructs.dev/search?q=scott.hsieh&amp;amp;offset=0"&gt;https://constructs.dev/search?q=scott.hsieh&amp;amp;offset=0&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;AWS User Group Taiwan Online Meetup 2021-07, &lt;a href="https://youtu.be/HG8mQ32m970"&gt;https://youtu.be/HG8mQ32m970&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Genshin and the Revelation Online, along with watching bunches of K-dramas and western TV shows with Patrice. The last drama is Vocie 4.
&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Taipei Grand Trail, &lt;a href="https://gisweb.taipei.gov.tw/release/"&gt;https://gisweb.taipei.gov.tw/release/&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Kudzu, &lt;a href="https://wiki.guildwars2.com/wiki/Kudzu"&gt;https://wiki.guildwars2.com/wiki/Kudzu&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;AWS Certified DevOps Engineer — Professional, &lt;a href="https://aws.amazon.com/certification/certified-devops-engineer-professional/?nc1=h_ls"&gt;https://aws.amazon.com/tw/certification/certified-devops-engineer-professional/&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;DOP exame guide, &lt;a href="https://d1.awsstatic.com/training-and-certification/docs-devops-pro/AWS-Certified-DevOps-Engineer-Professional_Exam-Guide.pdf"&gt;https://d1.awsstatic.com/training-and-certification/docs-devops-pro/AWS-Certified-DevOps-Engineer-Professional_Exam-Guide.pdf&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Amazon Web Services, Inc. or its affiliates., 2017. &lt;em&gt;Running Containerized Microservices on AWS&lt;/em&gt;. [ebook] Available at: &lt;a href="https://d1.awsstatic.com/whitepapers/DevOps/running-containerized-microservices-on-aws.pdf"&gt;https://d1.awsstatic.com/whitepapers/DevOps/running-containerized-microservices-on-aws.pdf&lt;/a&gt; [Accessed 25 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Amazon Web Services, Inc. or its affiliates., 2021. &lt;em&gt;Elastic Load Balancing features&lt;/em&gt;. [online] Amazon Web Services, Inc. Available at: &lt;a href="https://aws.amazon.com/elasticloadbalancing/features/"&gt;https://aws.amazon.com/elasticloadbalancing/features/&lt;/a&gt; [Accessed 7 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Amazon Web Services, Inc. or its affiliates, 2021. &lt;em&gt;Error retries and exponential backoff in AWS&lt;/em&gt;. [online] Docs.aws.amazon.com. Available at: &lt;a href="https://docs.aws.amazon.com/general/latest/gr/api-retries.html"&gt;https://docs.aws.amazon.com/general/latest/gr/api-retries.html&lt;/a&gt; [Accessed 31 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Ball, D. and Fallahi, K., 2020. &lt;em&gt;AWS CodeDeploy now supports linear and canary deployments for Amazon ECS&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/tw/blogs/containers/aws-codedeploy-now-supports-linear-and-canary-deployments-for-amazon-ecs/"&gt;https://aws.amazon.com/tw/blogs/containers/aws-codedeploy-now-supports-linear-and-canary-deployments-for-amazon-ecs/&lt;/a&gt; [Accessed 8 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Beswick, J., 2020. &lt;em&gt;Best practices for organizing larger serverless applications&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/tw/blogs/compute/best-practices-for-organizing-larger-serverless-applications/"&gt;https://aws.amazon.com/tw/blogs/compute/best-practices-for-organizing-larger-serverless-applications/&lt;/a&gt; [Accessed 8 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Bingöl, S., 2020. &lt;em&gt;Exam Readiness : AWS DevOps Engineer Professional (DOP-C01)&lt;/em&gt;. [online] Medium. Available at: &lt;a href="https://medium.com/aws-certified-user-group-turkey/exam-readiness-aws-devops-engineer-professional-dop-c01-975e22b3f98a"&gt;https://medium.com/aws-certified-user-group-turkey/exam-readiness-aws-devops-engineer-professional-dop-c01-975e22b3f98a&lt;/a&gt; [Accessed 7 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Bhattacharya, S., Benjamin, G. and Natarajan, V., 2021. &lt;em&gt;Simplify your data lifecycle by using object tags with Amazon S3 Lifecycle&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/storage/simplify-your-data-lifecycle-by-using-object-tags-with-amazon-s3-lifecycle/"&gt;https://aws.amazon.com/blogs/storage/simplify-your-data-lifecycle-by-using-object-tags-with-amazon-s3-lifecycle/&lt;/a&gt; [Accessed 8 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Chapman, C., 2020. &lt;em&gt;Creating a secure DevOps pipeline for AWS Service Catalog&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/mt/creating-a-secure-devops-pipeline-for-aws-service-catalog/"&gt;https://aws.amazon.com/blogs/mt/creating-a-secure-devops-pipeline-for-aws-service-catalog/&lt;/a&gt; [Accessed 8 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Cowan, J., Sharma, A. and Dalbhanjan, P., 2017. &lt;em&gt;Blue/Green Deployments with Amazon Elastic Container Service&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/tw/blogs/compute/bluegreen-deployments-with-amazon-ecs/"&gt;https://aws.amazon.com/tw/blogs/compute/bluegreen-deployments-with-amazon-ecs/&lt;/a&gt; [Accessed 18 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;DeJong, K., 2020. &lt;em&gt;Introducing AWS CloudFormation modules&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/mt/introducing-aws-cloudformation-modules/"&gt;https://aws.amazon.com/blogs/mt/introducing-aws-cloudformation-modules/&lt;/a&gt; [Accessed 28 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Docker Inc., 2021. &lt;em&gt;Configure logging drivers&lt;/em&gt;. [online] Docker Documentation. Available at: &lt;a href="https://docs.docker.com/config/containers/logging/configure/"&gt;https://docs.docker.com/config/containers/logging/configure/&lt;/a&gt; [Accessed 31 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Dodge, C. and Quigg, S., 2018. &lt;em&gt;A simpler way to assess the network exposure of EC2 instances: AWS releases new network reachability assessments in Amazon Inspector&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/security/amazon-inspector-assess-network-exposure-ec2-instances-aws-network-reachability-assessments/"&gt;https://aws.amazon.com/blogs/security/amazon-inspector-assess-network-exposure-ec2-instances-aws-network-reachability-assessments/&lt;/a&gt; [Accessed 1 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Hochstein, L., Prytoegrian, Siqueira, D., Basgall, S., Smith, S., Harvey, A. and Berry, C., 2016. &lt;em&gt;Netflix/chaosmonkey: Chaos Monkey is a resiliency tool that helps applications tolerate random instance failures&lt;/em&gt;. [online] GitHub. Available at: &lt;a href="https://github.com/netflix/chaosmonkey"&gt;https://github.com/netflix/chaosmonkey&lt;/a&gt; [Accessed 31 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Houlihan, R., 2018. &lt;em&gt;Amazon DynamoDB Deep Dive: Advanced Design Patterns for DynamoDB (DAT401)&lt;/em&gt;. [video] Available at: &lt;a href="https://youtu.be/HaEPXoXVf2k"&gt;https://youtu.be/HaEPXoXVf2k&lt;/a&gt; [Accessed 8 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Jayendra’s Cloud Certification Blog. 2021. &lt;em&gt;AWS Certified DevOps Engineer — Professional (DOP-C01) Exam Learning Path&lt;/em&gt;. [online] Available at: &lt;a href="https://jayendrapatil.com/aws-certified-devops-engineer-professional-exam-learning-path/"&gt;https://jayendrapatil.com/aws-certified-devops-engineer-professional-exam-learning-path/&lt;/a&gt; [Accessed 24 May 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Idziorek, J., 2017. &lt;em&gt;Amazon DynamoDB Accelerator (DAX): A Read-Through/Write-Through Cache for DynamoDB&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/database/amazon-dynamodb-accelerator-dax-a-read-throughwrite-through-cache-for-dynamodb/"&gt;https://aws.amazon.com/blogs/database/amazon-dynamodb-accelerator-dax-a-read-throughwrite-through-cache-for-dynamodb/&lt;/a&gt; [Accessed 8 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Intellipaat, 2019. &lt;em&gt;Puppet Tutorial for Beginners | Puppet Tutorial | Intellipaat&lt;/em&gt;. [video] Available at: &lt;a href="https://www.youtube.com/watch?v=kHD4KQKKP5Y"&gt;https://www.youtube.com/watch?v=kHD4KQKKP5Y&lt;/a&gt; [Accessed 3 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Ismail, M. and Bentzen, M., 2021. &lt;em&gt;Secure your Amazon VPC DNS resolution with Amazon Route 53 Resolver DNS Firewall&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/networking-and-content-delivery/secure-your-amazon-vpc-dns-resolution-with-amazon-route-53-resolver-dns-firewall/"&gt;https://aws.amazon.com/blogs/networking-and-content-delivery/secure-your-amazon-vpc-dns-resolution-with-amazon-route-53-resolver-dns-firewall/&lt;/a&gt; [Accessed 7 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Lempka, R., 2021. &lt;em&gt;Improve monitoring of AWS Systems Manager Agent&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/mt/improve-monitoring-of-aws-systems-manager-agent/"&gt;https://aws.amazon.com/blogs/mt/improve-monitoring-of-aws-systems-manager-agent/&lt;/a&gt; [Accessed 7 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Lewis, J. and Fowler, M., 2014. &lt;em&gt;Microservices&lt;/em&gt;. [online] martinfowler.com. Available at: &lt;a href="https://martinfowler.com/articles/microservices.html"&gt;https://martinfowler.com/articles/microservices.html&lt;/a&gt; [Accessed 31 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Liu, F., 2021. &lt;em&gt;Model serving in Java with AWS Elastic Beanstalk made easy with Deep Java Library&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/tw/blogs/machine-learning/model-serving-in-java-with-aws-elastic-beanstalk-made-easy-with-deep-java-library/"&gt;https://aws.amazon.com/tw/blogs/machine-learning/model-serving-in-java-with-aws-elastic-beanstalk-made-easy-with-deep-java-library/&lt;/a&gt; [Accessed 2 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Malhotra, S. and Mathur, R., 2020. &lt;em&gt;How to get notified on specific Lambda function error patterns using CloudWatch&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/mt/get-notified-specific-lambda-function-error-patterns-using-cloudwatch/"&gt;https://aws.amazon.com/blogs/mt/get-notified-specific-lambda-function-error-patterns-using-cloudwatch/&lt;/a&gt; [Accessed 9 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Meyer, C., 2018. &lt;em&gt;Signaling AWS CloudFormation WaitConditions using AWS PrivateLink&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/mt/signaling-aws-cloudformation-waitconditions-using-aws-privatelink/"&gt;https://aws.amazon.com/blogs/mt/signaling-aws-cloudformation-waitconditions-using-aws-privatelink/&lt;/a&gt; [Accessed 31 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Miguelez, B. and Chapman, C., 2020. &lt;em&gt;Standardizing CI/CD pipelines for .NET web applications with AWS Service Catalog&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/tw/blogs/devops/standardizing-cicd-pipelines-net-web-applications-aws-service-catalog/"&gt;https://aws.amazon.com/tw/blogs/devops/standardizing-cicd-pipelines-net-web-applications-aws-service-catalog/&lt;/a&gt; [Accessed 3 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Mui, A. and Vlasceanu, V., 2015. (DVO401) &lt;em&gt;Deep Dive into Blue/Green Deployments on AWS&lt;/em&gt;. [video] Available at: &lt;a href="https://youtu.be/aX54mhZbN58"&gt;https://youtu.be/aX54mhZbN58&lt;/a&gt; [Accessed 17 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Munns, C., 2017. &lt;em&gt;Implementing Canary Deployments of AWS Lambda Functions with Alias Traffic Shifting&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/tw/blogs/compute/implementing-canary-deployments-of-aws-lambda-functions-with-alias-traffic-shifting/"&gt;https://aws.amazon.com/tw/blogs/compute/implementing-canary-deployments-of-aws-lambda-functions-with-alias-traffic-shifting/&lt;/a&gt; [Accessed 5 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Peven, B., 2020. &lt;em&gt;Introducing Instance Refresh for EC2 Auto Scaling&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/compute/introducing-instance-refresh-for-ec2-auto-scaling/"&gt;https://aws.amazon.com/blogs/compute/introducing-instance-refresh-for-ec2-auto-scaling/&lt;/a&gt; [Accessed 31 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Rakesh Singh, 2021. &lt;em&gt;Blue/Green deployment with AWS Developer tools on Amazon EC2 using Amazon EFS to host application source code&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/devops/blue-green-deployment-with-aws-developer-tools-on-amazon-ec2-using-amazon-efs-to-host-application-source-code/"&gt;https://aws.amazon.com/blogs/devops/blue-green-deployment-with-aws-developer-tools-on-amazon-ec2-using-amazon-efs-to-host-application-source-code/&lt;/a&gt; [Accessed 7 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Rathore, A., 2020. &lt;em&gt;AWS Networking — ENI, ENA &amp;amp; EFA&lt;/em&gt;. [online] Medium. Available at: &lt;a href="https://medium.com/nerd-for-tech/aws-networking-eni-ena-efa-2db316fdbf85"&gt;https://medium.com/nerd-for-tech/aws-networking-eni-ena-efa-2db316fdbf85&lt;/a&gt; [Accessed 6 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Saha, M., 2020. &lt;em&gt;How to visualize multi-account Amazon Inspector findings with Amazon Elasticsearch Service&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/security/how-to-visualize-multi-account-amazon-inspector-findings-with-amazon-elasticsearch-service/"&gt;https://aws.amazon.com/blogs/security/how-to-visualize-multi-account-amazon-inspector-findings-with-amazon-elasticsearch-service/&lt;/a&gt; [Accessed 1 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Sato, D., 2014. &lt;em&gt;bliki: CanaryRelease&lt;/em&gt;. [online] martinfowler.com. Available at: &lt;a href="https://martinfowler.com/bliki/CanaryRelease.html"&gt;https://martinfowler.com/bliki/CanaryRelease.html&lt;/a&gt; [Accessed 31 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Sharma, A., Cowan, J., Sosiak, Y., Dalbhanjan, P. and Siri, J., 2017. &lt;em&gt;Reference architecture for doing blue green deployments on ECS&lt;/em&gt;. [online] GitHub. Available at: &lt;a href="https://github.com/aws-samples/ecs-blue-green-deployment"&gt;https://github.com/aws-samples/ecs-blue-green-deployment&lt;/a&gt; [Accessed 31 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Wagner, A., 2017. &lt;em&gt;Automatically Archive Items to S3 Using DynamoDB Time to Live (TTL) with AWS Lambda and Amazon Kinesis Firehose&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/tw/blogs/database/automatically-archive-items-to-s3-using-dynamodb-time-to-live-with-aws-lambda-and-amazon-kinesis-firehose/"&gt;https://aws.amazon.com/tw/blogs/database/automatically-archive-items-to-s3-using-dynamodb-time-to-live-with-aws-lambda-and-amazon-kinesis-firehose/&lt;/a&gt; [Accessed 8 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;White, E., Horsfield, S. and Sethi, A., 2021. &lt;em&gt;Introducing Native Support for Predictive Scaling with Amazon EC2 Auto Scaling&lt;/em&gt;. [online] Amazon Web Services. Available at: &lt;a href="https://aws.amazon.com/blogs/compute/introducing-native-support-for-predictive-scaling-with-amazon-ec2-auto-scaling/"&gt;https://aws.amazon.com/blogs/compute/introducing-native-support-for-predictive-scaling-with-amazon-ec2-auto-scaling/&lt;/a&gt; [Accessed 8 August 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Wikipedia, 2021. &lt;em&gt;Conway’s law&lt;/em&gt;. [online] En.wikipedia.org. Available at: &lt;a href="https://en.wikipedia.org/wiki/Conway's_law"&gt;https://en.wikipedia.org/wiki/Conway's_law&lt;/a&gt; [Accessed 31 July 2021].&lt;/li&gt;
&lt;li&gt;
&lt;a&gt;&lt;/a&gt;Wiggins, A., 2017. &lt;em&gt;The Twelve-Factor App&lt;/em&gt;. [online] 12factor.net. Available at: &lt;a href="https://12factor.net/"&gt;https://12factor.net/&lt;/a&gt; [Accessed 31 July 2021].&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>career</category>
      <category>certifications</category>
    </item>
    <item>
      <title>How to Become A Programming Polyglot by One-language Effort</title>
      <dc:creator>Scott Hsieh 🇹🇼</dc:creator>
      <pubDate>Mon, 17 May 2021 05:21:29 +0000</pubDate>
      <link>https://dev.to/aws-builders/how-to-become-a-programming-polyglot-by-one-language-effort-4blm</link>
      <guid>https://dev.to/aws-builders/how-to-become-a-programming-polyglot-by-one-language-effort-4blm</guid>
      <description>&lt;p&gt;example Github repo: &lt;a href="https://github.com/HsiehShuJeng/projen-simple"&gt;https://github.com/HsiehShuJeng/projen-simple&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj6vswm172b0pc86c0qub.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj6vswm172b0pc86c0qub.png" alt="Alt Text" title="Required Secrets by Github Actions in order to Publish Construct Library in Maven, PyPI, npm, and NuGet" width="800" height="476"&gt;&lt;/a&gt; &lt;em&gt;Required Secrets by Github Actions in order to Publish Construct Library in Maven, PyPI, npm, and NuGet&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/projen/projen"&gt;projen&lt;/a&gt; is a tool for developers to manage their project configurations via code. It currently supports, well, by the time I was writing this blog post, 15 genres of projects. The one I felt the most interested in is building AWS CDK construct libraries for popular programming languages. Behind the scene that you can generate out a construct library for the languages such as C#, Go, Java, Python, and Typescript through a single project managed by projen is due to the power of &lt;a href="https://github.com/aws/jsii"&gt;jsii&lt;/a&gt;.&lt;br&gt;
Simply put, you could regard jsii a technology that enables the AWS CDK to deliver polyglot libraries from a singe codebase. More simply, you could attempt to remember that by the jsii technology, you are empowered to write a library with one programming language such as Typescript and output the corresponding libraries in .NET, Go, Java, and Python.&lt;br&gt;
I’ve been writing the AWS CDK using Typescript for few months. I chose it because it’s the origin. Don’t you ever hear the voice in your heart: ‘It’s time to back to the Motherland’? And the Tomorrowland is awesome, too. You agree?&lt;br&gt;
Aight, back to the track. The AWS CDK has been assisting me in personal and company projects. Just way better than JSON and YAML. I have strong confidence I’ll be loyal to the CDK for sure instead of composing a CloudFormation template using yaml if there is no necessity.&lt;br&gt;
Few weeks ago, I was invited by an AWS Developer Advocate to participate in a project called &lt;a href="https://github.com/pahud/cdk-cloudfront-plus"&gt;cdk-cloudfront-plus&lt;/a&gt;, and the project is managed by projen. Truly impressed with the tool. And finally I got some time the last weekend to dig into the tool, projen, a little bit.  &lt;/p&gt;




&lt;h1&gt;
  
  
  Preparation
&lt;/h1&gt;

&lt;p&gt;During the survey, I found out a Github repo maintained by Sebastian Hesse is especially helpful though the part for Java (Maven) has been kinda outdated. My goal is to output a library with the all supported programming languages in jsii. My familiarity to those languages is Python, Java, Typescript, Go, and C#. Since I still haven’t grasped the mechanism between Javascript and Go via jsii and &lt;code&gt;GOPATH&lt;/code&gt;, i.e., haven’t figured out what naming and settings in the projen project can make the CI of Github Actions work therefore the Go package of the construct library. Considering time, I would just share the core part of how to output packages in 4 programming languages at the same time.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Initialize a &lt;code&gt;projen&lt;/code&gt; project
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npx projen new awscdk-construct
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;pj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'npx projen'&lt;/span&gt; // I moved it into ~/.bash_profile on my M1.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Figure out each projen command and arguments in &lt;code&gt;AwsCdkConstructLibrary&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Though Sebastian said it probably takes you around 30 minutes to get along with &lt;code&gt;projen&lt;/code&gt;, I actually spent few hours to make projen my friend. And publishing to &lt;strong&gt;Central Maven&lt;/strong&gt; occupies most of the time. Hope the following content might save some time for you on the way to become a programming polyglot.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Build a construct library
&lt;/h2&gt;

&lt;p&gt;I searched articles in the AWS Blog with the first key appeared in my mind at the moment. And got this: ‘&lt;a href="https://aws.amazon.com/tw/blogs/compute/introducing-amazon-api-gateway-service-integration-for-aws-step-functions/"&gt;&lt;em&gt;Introducing Amazon API Gateway service integration for AWS Step Functions&lt;/em&gt;&lt;/a&gt;’. I CDK-ified the first example combined with a state machine and an API Gateway Rest API and published it to 4 language repositories with &lt;code&gt;projen&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8nmztojrzvduqtwjz637.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8nmztojrzvduqtwjz637.png" alt="Alt Text" width="800" height="425"&gt;&lt;/a&gt; &lt;em&gt;State Machine Diagram Generated by CDK Example&lt;/em&gt;  &lt;/p&gt;




&lt;h1&gt;
  
  
  Publishing to supported language repositories
&lt;/h1&gt;

&lt;h2&gt;
  
  
  How to publish a package in &lt;code&gt;npm&lt;/code&gt;?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Arguments in the &lt;code&gt;.projenrc.js&lt;/code&gt; you need to give attention to
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;releaseBranches&lt;/code&gt;: branches which trigger a release.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;releaseToNpm&lt;/code&gt;: automatically release to npm when new versions are introduced.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;releaseWorkflow&lt;/code&gt;: define a GitHub workflow for releasing from “main” when new versions are bumped.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;releaseEveryCommit&lt;/code&gt;: automatically release new versions every commit to one of branches in releaseBranches.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AwsCdkConstructLibrary&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;
    &lt;span class="na"&gt;releaseToNpm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;releaseBranches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;releaseWorkflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;releaseEveryCommit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;
   &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  required information by Github Actions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;NPM_TOKEN&lt;/code&gt;: it is required by Github Actions to publish the &lt;code&gt;npm&lt;/code&gt; package.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After executing &lt;code&gt;npx projen&lt;/code&gt; (you could consider making it as an alias such as &lt;code&gt;pj&lt;/code&gt;), you’ll notice in the &lt;code&gt;release.yml&lt;/code&gt; under &lt;code&gt;.github/workflows&lt;/code&gt;&lt;br&gt;
that &lt;code&gt;NPM_TOKEN&lt;/code&gt; is required by Github Actions to publish the &lt;code&gt;npm&lt;/code&gt; package. If you’re just an &lt;code&gt;npm&lt;/code&gt; newbie as me, don’t panic! Be strong, be calm. The following steps are what you need to go through:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;create an &lt;code&gt;npm&lt;/code&gt; account (email validation is required)
&lt;/li&gt;
&lt;li&gt;create an access token on the web page of your npm account 
Choose the type of AUTOMATION when you’re about to create the access token. AUTOMATION! AUTOMATION! AUTOMATION TYPE! It’s important to be emphasized three times.
&lt;/li&gt;
&lt;li&gt;store the access token as &lt;a href="https://docs.github.com/en/actions/reference/encrypted-secrets"&gt;an Actions secret&lt;/a&gt; in your Github repository.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you go everything smoothly, you get an email whose content will be similar to the following picture. And you can find out published &lt;code&gt;npm&lt;/code&gt; packages at the npm pool as &lt;a href="https://www.npmjs.com/package/projen-statemachine-example"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu8bscpwjw50k22xwf817.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu8bscpwjw50k22xwf817.jpg" alt="Alt Text" width="800" height="877"&gt;&lt;/a&gt; &lt;em&gt;Email Message after Publishing an npm package via projen with success&lt;/em&gt;    &lt;/p&gt;

&lt;h2&gt;
  
  
  How to publish a package to &lt;strong&gt;PyPi&lt;/strong&gt;?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Arguments in &lt;code&gt;.projenrc.js&lt;/code&gt; you need to give attention to
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;publishToPypi&lt;/code&gt;
You gotta set a distribution name and a module name for the Python package.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;publishToPypi&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;    
    &lt;span class="nl"&gt;distName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;scotthsieh_projen_statemachine&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kr"&gt;module&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;scotthsieh_projen_statemachine&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Required information by Github Actions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;TWINE_USERNAME&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TWINE_PASSWORD&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you read the content related to publishing an &lt;code&gt;npm&lt;/code&gt; package above, you’ll be very clear that those environment variables are required by what service. With proper settings in the  &lt;code&gt;.projenrc.js&lt;/code&gt; , you’ll find an entry &lt;code&gt;release_pypi&lt;/code&gt; in the &lt;code&gt;release.yml&lt;/code&gt; under &lt;code&gt;.github/workflows&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;code&gt;TWINE_USERNAME&lt;/code&gt; and &lt;code&gt;TWINE_PASSWORD&lt;/code&gt; is your &lt;strong&gt;PyPi&lt;/strong&gt; account information. And your &lt;strong&gt;PyPi account needs to be verified&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;With a green check symbol given by &lt;strong&gt;Github Actions&lt;/strong&gt;, you can see your package (project) in your &lt;strong&gt;PyPI&lt;/strong&gt; account which means you could find out the Python package by the name you've declared in the projen project in the &lt;strong&gt;PyPI&lt;/strong&gt; pool.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwbmo19jrwds69gzpebj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwbmo19jrwds69gzpebj.png" alt="Alt Text" width="800" height="230"&gt;&lt;/a&gt; &lt;em&gt;Python Package in Your PyPI Account after a Successful CICD by Github Actions.&lt;/em&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  How to publish a package to &lt;strong&gt;Maven&lt;/strong&gt;?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Arguments in the .projenrc.js you need to give attention to
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;publishToMaven&lt;/code&gt;
You need to declare &lt;code&gt;groupId&lt;/code&gt;, &lt;code&gt;artifactId&lt;/code&gt;, and &lt;code&gt;package&lt;/code&gt; as you always do in managing a Java application project by Maven except version information in this construct library project based on projen. The default Maven endpoint in the &lt;code&gt;.projenrc.js&lt;/code&gt; is &lt;a href="https://oss.sonatype.org"&gt;https://oss.sonatype.org&lt;/a&gt;. Due to the policy executed by Sonatype, you need to tweak it as &lt;a href="https://s01.oss.sonatype.org"&gt;https://s01.oss.sonatype.org&lt;/a&gt; in the &lt;code&gt;.projenrc.js&lt;/code&gt; for those who create their Sonatype &lt;strong&gt;JIRA&lt;/strong&gt; accounts after February, 2021.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;publishToMaven&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;mavenGroupId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;io.github.hsiehshujeng&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;mavenArtifactId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;projen-inception&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;javaPackage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;io.github.hsiehshujeng.projen.inception&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;mavenEndpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://s01.oss.sonatype.org&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// check https://central.sonatype.org/publish/release/#login-into-ossrh&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Few more steps for Maven
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create an account for Maven central&lt;br&gt;&lt;br&gt;
You need to create an account for Maven central via &lt;strong&gt;OSSRH&lt;/strong&gt;. Two short films &lt;a href="https://central.sonatype.org/publish/publish-guide/"&gt;in the guide&lt;/a&gt; will be helpful. You could choose a domain as &lt;code&gt;groupId&lt;/code&gt; e.g. org.example, for the account, or your Github name as groupId , e.g. &lt;code&gt;io.github.${GITHUB_USERNAME}&lt;/code&gt;. (&lt;code&gt;com.github&lt;/code&gt; has no long been supported as a valid groupId since Apr. 1st, 2021 and the detail can be looked up here)  &lt;/p&gt;

&lt;p&gt;After you create a &lt;strong&gt;JIRA&lt;/strong&gt; issue in the Sonatype &lt;strong&gt;JIRA&lt;/strong&gt; tracking system, you’ll get response within sometime. Take me for example, it’s only a 4-minute waiting after I created the &lt;strong&gt;JIRA&lt;/strong&gt; issue. You only need to respond accordingly from their robotic response.&lt;br&gt;
Within this exploration for projen, my account for Maven is connected to the JIRA issue &lt;a href="https://issues.sonatype.org/browse/OSSRH-68981"&gt;OSSRH-68981&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a GPG key&lt;br&gt;&lt;br&gt;
How to generate the GPG key for my &lt;code&gt;projen&lt;/code&gt; project to produce the Java library? You could refer to ‘&lt;em&gt;How to create a GPG key&lt;/em&gt;?’ at the section of Maven in &lt;a href="https://github.com/cdklabs/jsii-release#maven"&gt;jsii-release&lt;/a&gt;. During the generating progress of the GPG key, you will be asked to enter a passphrase for the key. Please memorize the passphrase of the GPG key in any way like it’s your lifetime partner, promise me, since you’ll need it for an Actions secret and exporting the private key.&lt;br&gt;&lt;br&gt;
Some information you might find it useful.  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* consider executing `$ gpg --full-generate-key` and choose **RSA** with the length of 4,096.  
* you’ll need to paste the public key onto [https://keyserver.ubuntu.com/](https://keyserver.ubuntu.com/).  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;After executing &lt;code&gt;npx projen&lt;/code&gt; (you could consider making it as an alias such as &lt;code&gt;pj&lt;/code&gt;), you should find the entry named release_maven in the &lt;code&gt;release.yml&lt;/code&gt; under &lt;code&gt;.github/workflows&lt;/code&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Required information by Github Actions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;MAVEN_GPG_PRIVATE_KEY&lt;/code&gt;: execute &lt;code&gt;echo $(cat -e private.pem) | sed 's/\$/\\n\g' | sed 's/\$$//'&lt;/code&gt; then past the one-line content to this Actions secret.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MAVEN_GPG_PRIVATE_KEY_PASSPHRASE&lt;/code&gt;: the passphrase you entered during the generating progress of the GPG key.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MAVEN_USERNAME&lt;/code&gt;: the user name you take to log-in the Sonatype JIRA tracking system.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MAVEN_PASSWORD&lt;/code&gt;: the password you take to log-in the Sonatype JIRA tracking system.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MAVEN_STAGING_PROFILE_ID&lt;/code&gt;, an identity shown up on the URL of Staging Profile after logging in &lt;a href="https://s01.oss.sonatype.org/"&gt;https://s01.oss.sonatype.org/&lt;/a&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you go smoothly, you should be able to find the Java package similar to &lt;a href="https://s01.oss.sonatype.org/#nexus-search;quick~io.github.hsiehshujeng"&gt;this&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm85xg00ov0uxztufsmar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm85xg00ov0uxztufsmar.png" alt="Alt Text" width="800" height="265"&gt;&lt;/a&gt; &lt;em&gt;Java Package Searched with io.github.hsiehshujeng after a Successful CICD by Github Actions.&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;When the tunnel to the &lt;strong&gt;Central Maven&lt;/strong&gt; is open after you upload an artifact into the &lt;strong&gt;Nexus Repository Manager&lt;/strong&gt; with success, you should be able to search your published Java package at &lt;a href="https://search.maven.org"&gt;https://search.maven.org&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frftdvpf1qkax4uftyy39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frftdvpf1qkax4uftyy39.png" alt="Alt Text" width="800" height="193"&gt;&lt;/a&gt; &lt;em&gt;Search Result at Maven Central Repository Search&lt;/em&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  How to publish a package to Nuget?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Arguments in the .projenrc.js you need to give attention to
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;publishToNuget&lt;/code&gt;
Just follow the naming rules of NuGet packages.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;publishToNuget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;dotNetNamespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ScottHsieh.Examples&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;packageId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Projen.Inception&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By executing &lt;code&gt;npx projen&lt;/code&gt; with proper command (you could consider making it as an alias such as &lt;code&gt;pj&lt;/code&gt;), you are able to get the entry named &lt;code&gt;release_nuget&lt;/code&gt; in the &lt;code&gt;release.yml&lt;/code&gt; under &lt;code&gt;.github/workflows&lt;/code&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  required information by Github Actions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;NUGET_API_KEY&lt;/code&gt;: a token that enables your project to deploy a NuGet package
With a while after the CI in &lt;strong&gt;Github Actions&lt;/strong&gt; is over, you should get an email similar to the following picture and can search your &lt;strong&gt;NuGet&lt;/strong&gt; package as here in the &lt;strong&gt;NuGet&lt;/strong&gt; Gallery.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxngx5pag29pv2f5r4oy.jpg" alt="Alt Text" width="800" height="1071"&gt; &lt;em&gt;Received Email Message after Publishing a NuGet package via projen with success&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;If all things go done well, you should see the following diagram in your Github repository.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dgs66jq229qoamys23m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dgs66jq229qoamys23m.png" alt="Alt Text" width="800" height="413"&gt;&lt;/a&gt; &lt;em&gt;Packages Output to Supported Language Repositories with Success&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;By confirming the custom AWS construct has been published to the corresponding language pools, you could start deploying a stack with the construct through a programming language you prefer.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how to deploy with Typescript: refer to &lt;a href="https://github.com/HsiehShuJeng/projen-simple/tree/main/src/demo/typescript"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;how to deploy with Python: refer to &lt;a href="https://github.com/HsiehShuJeng/projen-simple/tree/main/src/demo/python"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;how to deploy with Java: refer to &lt;a href="https://github.com/HsiehShuJeng/projen-simple/tree/main/src/demo/java"&gt;here&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;how to deploy with Csharp: refer to &lt;a href="https://github.com/HsiehShuJeng/projen-simple/tree/main/src/demo/csharp"&gt;here&lt;/a&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqt0vu8y96mnxf0k27agk.png" alt="Alt Text" width="800" height="331"&gt; &lt;em&gt;A Glimpse of Successful Deployments via Different Programming Languages&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you wanna see the reality of this post by accident, please go to this &lt;a href="https://github.com/HsiehShuJeng/projen-simple"&gt;repo&lt;/a&gt; maintained by me. May the code be with you. See you next time. ^.&amp;lt;  &lt;/p&gt;




&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Ben-Israel, E., 2021. &lt;em&gt;PROJECT STRUCTURE&lt;/em&gt;. [online] Cdkworkshop.com. Available at: &lt;a href="https://cdkworkshop.com/40-dotnet/20-create-project/300-structure.html"&gt;https://cdkworkshop.com/40-dotnet/20-create-project/300-structure.html&lt;/a&gt; [Accessed 18 May 2021].&lt;/li&gt;
&lt;li&gt;Bui-Palsulich, T., 2019. &lt;em&gt;Publishing Go Modules — The Go Blog&lt;/em&gt;. [online] Blog.golang.org. Available at: &lt;a href="https://blog.golang.org/publishing-go-modules"&gt;https://blog.golang.org/publishing-go-modules&lt;/a&gt; [Accessed 15 May 2021].
&lt;/li&gt;
&lt;li&gt;Central.sonatype.org. 2021. &lt;em&gt;Central Repository Changelog — The Central Repository Documentation&lt;/em&gt;. [online] Available at: &lt;a href="https://central.sonatype.org/changelog/#2021-04-01-comgithub-is-not-supported-anymore-as-a-valid-coordinate"&gt;https://central.sonatype.org/changelog/#2021-04-01-comgithub-is-not-supported-anymore-as-a-valid-coordinate&lt;/a&gt; [Accessed 15 May 2021].
&lt;/li&gt;
&lt;li&gt;Central.sonatype.org. 2021. &lt;em&gt;OSSRH Guide — The Central Repository Documentation&lt;/em&gt;. [online] Available at: &lt;a href="https://central.sonatype.org/publish/publish-guide/#deployment"&gt;https://central.sonatype.org/publish/publish-guide/#deployment&lt;/a&gt; [Accessed 15 May 2021].
&lt;/li&gt;
&lt;li&gt;Docs.github.com. 2021. &lt;em&gt;Encrypted secrets — GitHub Docs&lt;/em&gt;. [online] Available at: &lt;a href="https://docs.github.com/en/actions/reference/encrypted-secrets"&gt;https://docs.github.com/en/actions/reference/encrypted-secrets&lt;/a&gt; [Accessed 15 May 2021].
&lt;/li&gt;
&lt;li&gt;Docs.npmjs.com. 2021. &lt;em&gt;About access tokens | npm Docs&lt;/em&gt;. [online] Available at: &lt;a href="https://docs.npmjs.com/about-access-tokens"&gt;https://docs.npmjs.com/about-access-tokens&lt;/a&gt; [Accessed 15 May 2021].
&lt;/li&gt;
&lt;li&gt;Hesse, S., 2021. &lt;em&gt;Migrating a CDK Construct to projen and jsii&lt;/em&gt; . [online] Sebastian Hesse — Software Engineer. Available at: &lt;a href="https://www.sebastianhesse.de/2021/03/01/migrating-a-cdk-construct-to-projen-and-jsii/"&gt;https://www.sebastianhesse.de/2021/03/01/migrating-a-cdk-construct-to-projen-and-jsii/&lt;/a&gt; [Accessed 15 May 2021].
&lt;/li&gt;
&lt;li&gt;Jones, M., 2019. &lt;em&gt;Scoped API keys&lt;/em&gt;. [online] Docs.microsoft.com. Available at: &lt;a href="https://docs.microsoft.com/en-us/nuget/nuget-org/scoped-api-keys"&gt;https://docs.microsoft.com/en-us/nuget/nuget-org/scoped-api-keys&lt;/a&gt; [Accessed 16 May 2021].
&lt;/li&gt;
&lt;li&gt;Sonatype, Inc., 2021. &lt;em&gt;OSSRH Guide — The Central Repository Documentation&lt;/em&gt;. [online] Central.sonatype.org. Available at: &lt;a href="https://central.sonatype.org/publish/publish-guide/"&gt;https://central.sonatype.org/publish/publish-guide/&lt;/a&gt; [Accessed 15 May 2021].
&lt;/li&gt;
&lt;li&gt;The Apache Software Foundation, 2021. &lt;em&gt;Maven — Guide to uploading artifacts to the Central Repository&lt;/em&gt;. [online] Maven.apache.org. Available at: &lt;a href="https://maven.apache.org/repository/guide-central-repository-upload.html"&gt;https://maven.apache.org/repository/guide-central-repository-upload.html&lt;/a&gt; [Accessed 15 May 2021].
&lt;/li&gt;
&lt;li&gt;seeebiii, 2021. &lt;em&gt;Create and Publish CDK Constructs Using projen and jsii&lt;/em&gt;. [online] GitHub. Available at: &lt;a href="https://github.com/seeebiii/projen-test"&gt;https://github.com/seeebiii/projen-test&lt;/a&gt; [Accessed 15 May 2021].
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>iac</category>
      <category>projen</category>
      <category>cdk</category>
    </item>
  </channel>
</rss>
