<?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: Piyush Mattoo</title>
    <description>The latest articles on DEV Community by Piyush Mattoo (@gpmattoo).</description>
    <link>https://dev.to/gpmattoo</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%2F497776%2F8ec975a8-7a4c-49b0-a31a-8efce3a5cf02.jpeg</url>
      <title>DEV Community: Piyush Mattoo</title>
      <link>https://dev.to/gpmattoo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gpmattoo"/>
    <language>en</language>
    <item>
      <title>Ways to test SSL Certificates</title>
      <dc:creator>Piyush Mattoo</dc:creator>
      <pubDate>Thu, 14 Jul 2022 15:34:53 +0000</pubDate>
      <link>https://dev.to/gpmattoo/ways-to-test-ssl-certificates-39fc</link>
      <guid>https://dev.to/gpmattoo/ways-to-test-ssl-certificates-39fc</guid>
      <description>&lt;ul&gt;
&lt;li&gt;For Externally accessible websites only – Only works with a hostname, can’t use IP address
&lt;a href="https://www.ssllabs.com/ssltest/analyze.html"&gt;https://www.ssllabs.com/ssltest/analyze.html&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KDc28A5t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/im9lzzfvkzzsj3v7kvww.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KDc28A5t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/im9lzzfvkzzsj3v7kvww.jpg" alt="Image description" width="427" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For Internally and Externally accessible websites – Can use hostname or IP address
Sslyze command line tool - &lt;a href="https://github.com/nabla-c0d3/sslyze/releases"&gt;https://github.com/nabla-c0d3/sslyze/releases&lt;/a&gt;  - current version is 4.1.0&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Download sslyze-4.1.1-exe.zip and extract sslyze-4.1.0 folder to local drive&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open command prompt and change to the folder where sslyze-3.0.8 was extracted:&lt;br&gt;
o sslyze.exe --regular [hostname or IP address]&lt;br&gt;
o sslyze.exe --regular ep.firstam.com &lt;br&gt;
o sslyze.exe --regular 172.17.22.117&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VD-n3i8Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ou4wqy0krjr63i7ujbx4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VD-n3i8Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ou4wqy0krjr63i7ujbx4.jpg" alt="Image description" width="880" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ssl</category>
      <category>security</category>
    </item>
    <item>
      <title>Running Lambda powered by Arm Graviton2 processor</title>
      <dc:creator>Piyush Mattoo</dc:creator>
      <pubDate>Fri, 10 Jun 2022 03:52:19 +0000</pubDate>
      <link>https://dev.to/gpmattoo/running-lambda-powered-by-arm-graviton2-processor-396c</link>
      <guid>https://dev.to/gpmattoo/running-lambda-powered-by-arm-graviton2-processor-396c</guid>
      <description>&lt;p&gt;Running Lambda powered by Arm/Graviton2 vs x86_64&lt;br&gt;
AWS Lambda Functions Powered by AWS Graviton2 Processor – Run Your Functions on Arm and Get Up to 34% Better Price Performance&lt;/p&gt;

&lt;p&gt;Test case flow&lt;br&gt;
The following test case will be using a lambda to call a dynamoDb table&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fpo88qg3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xyl9317t869ogvxrteqx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fpo88qg3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xyl9317t869ogvxrteqx.png" alt="Image description" width="880" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The following test cases with different runtime environments&lt;br&gt;
For the warm state, it will be sending multiple requests for each lambda one by one (lambda concurrency is 1, all request go to the same lambda instance). And on the slides, you can see the duration of the last request.&lt;/p&gt;

&lt;p&gt;NodeJS: ARM is a bit fast&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VgONRuc---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/btsxq9xuk77lg10h91wz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VgONRuc---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/btsxq9xuk77lg10h91wz.png" alt="Image description" width="880" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DotNet: ARM is fast&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--25BcVcZK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dypbsgl70t241qkj5z6k.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--25BcVcZK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dypbsgl70t241qkj5z6k.PNG" alt="Image description" width="880" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python: ARM is faster&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KiB_H05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3znca8kg4g36606z5eif.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KiB_H05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3znca8kg4g36606z5eif.PNG" alt="Image description" width="880" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TeamConnect test case&lt;br&gt;
It is under the TeamConnect account utilizing Lambda, DynamoDB, and EventBridge resources.&lt;br&gt;
Also, it is versioning to be able to use multiple architecture in this case x86 and arm64&lt;/p&gt;

&lt;p&gt;Arm64&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v3zMsGp6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g81kwny4uofp7q1068do.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v3zMsGp6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g81kwny4uofp7q1068do.png" alt="Image description" width="880" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vs&lt;/p&gt;

&lt;p&gt;x86&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LMoBJ-vO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/57d0f04qt53mc6tikqxz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LMoBJ-vO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/57d0f04qt53mc6tikqxz.png" alt="Image description" width="880" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cost&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e9iJPghZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nv3f44ionjok8x7ifz2r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e9iJPghZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nv3f44ionjok8x7ifz2r.png" alt="Image description" width="505" height="719"&gt;&lt;/a&gt;&lt;br&gt;
Takeaway&lt;br&gt;
Arm-based systems and instances are available in public clouds such as AWS.&lt;br&gt;
The computational performance of AWS’s Arm EC2 instances is similar to that of the x86_64 instances.&lt;br&gt;
Considering that Arm instances are significantly cheaper, the cost effectiveness of Arm instances are better than x86_64 instances.&lt;br&gt;
Arm instances perform better with “close to metal” applications. We hypothesize that the operating systems have received more engineering efforts to optimize for Arm than high level application frameworks.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>FaaS vs Containerization model</title>
      <dc:creator>Piyush Mattoo</dc:creator>
      <pubDate>Tue, 11 May 2021 03:02:43 +0000</pubDate>
      <link>https://dev.to/gpmattoo/serverless-vs-containerization-model-56i3</link>
      <guid>https://dev.to/gpmattoo/serverless-vs-containerization-model-56i3</guid>
      <description>&lt;p&gt;Fargate gives us best of both the worlds (serverless as well as container) and it won’t restrict us as Lambda might. Lambda works well when run in asynchronous manner (event driven) say object was uploaded to S3 and some Lambda got triggered as a result. API Gateway integrated with Lambda for request/response model especially for runtime like dot-net (for cold-start) can be problematic for synchronous traffic like web APIs in case milliseconds matter.&lt;br&gt;
Lambda is not multi-threaded so say if Lambda service receives 10 requests then Lambda service will launch 10 Lambdas running our code (ASP.NET  entry point), some of those instances might not be warmed up or ready. That’s where (web traffic, request/response synchronous) Fargate shines as its serverless and it takes those 10 requests and run them on the same container so there is no overhead of launching the lambda container impacting performance.&lt;/p&gt;

&lt;p&gt;We do need to keep in mind that there is a learning curve for containers, perhaps ECS is less of a learning curve than EKS but operationally we need a team which knows Kubernetes well. When we run Kubernetes in EKS we are still talking about authentication with IAM and AWS's ELB, VPC and perhaps we integrate with S3, DynamoDB and at that point we are already committed to AWS. Hybrid cloud is good if we are running different applications on different cloud providers but not the same application such that at any given moment we can pick it up and drop it in Azure, Openshift OnPrem, GCP unless we build the application to the lowest common denominator of all the cloud providers and don’t take any advantage of any of the good things cloud providers have to provide. In other words if we just use block storage, http APIs and we ran our own databases on VMs we are fine but then we are not taking advantage of the cloud native features that any cloud provider might provide you. That’s typically not the case.&lt;br&gt;
Other consideration is Kubernetes operates in quarterly fashion for releases, only supports n-2 i.e. two revisions behind current version. For larger companies that doesn’t adapt to changes very well, we need to keep this in mind as there will be breaking changes as Kubernetes gains more maturity.&lt;br&gt;
Another consideration especially for bigger workloads (and enterprises who are frugal wrt IP's like FA) is the IP availability and the networking security model.&lt;br&gt;
Lambda can reuse the ENI for a given combination of security group +subnet and if we are looking to adhere to the principle of least privilege 100's of Lambdas could be reusing a security group which will make the security group become more permissive. Same thing for ECS in Fargate mode with one IP address per task. So for a workload needing 200 IP's per AZ that equates to 400 IP's per environment.&lt;br&gt;
EKS and ECS (with EC2 mode) is more streamlined in this regard as depending upon the networking model (say Calico, Kube-router, Romana, Weave-net for EKS) the pods are running with fake IPs which get NAT'ed back to fewer IP's on our network and we are relying on network policies based on matching pod labels to dictate inter-pod communication as opposed to security group(s)&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>aws</category>
      <category>containers</category>
    </item>
    <item>
      <title>AWS Database Migration Service: Limitations </title>
      <dc:creator>Piyush Mattoo</dc:creator>
      <pubDate>Sun, 11 Apr 2021 07:01:12 +0000</pubDate>
      <link>https://dev.to/gpmattoo/database-migration-service-b9n</link>
      <guid>https://dev.to/gpmattoo/database-migration-service-b9n</guid>
      <description>&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html"&gt;DMS&lt;/a&gt;, if used with SQL Server in a self-managed context (EC2 or on-prem), supports one-time and ongoing replication in two modes: via MS-Replication &amp;amp; MS-CDC. However if DMS is used in the context of RDS as a source, only MS-CDC is supported. DMS offers a range of Source/Targets and supports heterogeneous database engines and offers a fine-grained control on the replication process. The Schema Conversion Tool (SCT) can be utilized along with DMS for heterogeneous configuration setup, that helps with schema level changes with an in-built code editor and also produces various reports for migration readiness &amp;amp; planning.&lt;br&gt;
Source/Targets need to be added as end points in DMS and it uses logical replication process under the hood using either MS-Replication or MS-CDC. In a Hybrid setup or within AWS, DMS can be configured between on-prem and AWS with an on-going replication configuration using CDC and during the cutover, the DMS migration task can be stopped and the application will be able to connect to the database that is already in sync with the on-prem database avoiding typical delays of restoring Differential backups to bring the target database online etc.&lt;/p&gt;

&lt;p&gt;Below are some of the associated limitations when using SQL Server databases as the source for DMS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How large are our databases?&lt;/li&gt;
&lt;li&gt;How many tables do we have in each database?&lt;/li&gt;
&lt;li&gt;Do we have primary keys on all the existing tables? (This is highly recommended for DMS)&lt;/li&gt;
&lt;li&gt;Do we have any identity columns?&lt;/li&gt;
&lt;li&gt;Do we use truncate tables? How frequently?&lt;/li&gt;
&lt;li&gt;Do we have temporal tables?&lt;/li&gt;
&lt;li&gt;Do we have any column level encryption today?&lt;/li&gt;
&lt;li&gt;How often are DDL's executed?&lt;/li&gt;
&lt;li&gt;SELECT * INTO new_table FROM existing_table is not supported. Do we do that frequently?&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>dms</category>
      <category>rds</category>
      <category>cloudmigration</category>
    </item>
  </channel>
</rss>
