<?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: Jaira Encio</title>
    <description>The latest articles on DEV Community by Jaira Encio (@jairaencio).</description>
    <link>https://dev.to/jairaencio</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%2F647141%2F756e64d5-e6cc-4305-84a0-bbdf04cf8955.jpeg</url>
      <title>DEV Community: Jaira Encio</title>
      <link>https://dev.to/jairaencio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jairaencio"/>
    <language>en</language>
    <item>
      <title>AWS for QA Testing</title>
      <dc:creator>Jaira Encio</dc:creator>
      <pubDate>Thu, 03 Aug 2023 01:06:03 +0000</pubDate>
      <link>https://dev.to/awscommunity-asean/aws-for-qa-testing-59a6</link>
      <guid>https://dev.to/awscommunity-asean/aws-for-qa-testing-59a6</guid>
      <description>&lt;p&gt;Sharing the content of my topic during AWS Community Day Philippines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Topics
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Importance of Cloud for QA Testers&lt;/li&gt;
&lt;li&gt;AWS Services for Testing&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Importance of Cloud for QA Testers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Understand how cloud ecosystem works&lt;/li&gt;
&lt;li&gt;Gain knowledge on system design&lt;/li&gt;
&lt;li&gt;AWS Testing tools&lt;/li&gt;
&lt;/ul&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%2Fqbkleoqkkthba0yddhap.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%2Fqbkleoqkkthba0yddhap.png" alt="importanceforQA"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What are some AWS tools and services for QA testers?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AWS Device Farm - Mobile/Web testing tool&lt;/li&gt;
&lt;li&gt;Amazon Inspector - Security testing tool&lt;/li&gt;
&lt;li&gt;Automation with AWS Tools&lt;/li&gt;
&lt;/ul&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%2Fa1u1dknagozv2hgnfkt5.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%2Fa1u1dknagozv2hgnfkt5.png" alt="QAtools"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Device Farm - Mobile/Web testing tool
&lt;/h2&gt;

&lt;p&gt;Device Farm is an app testing service that you can use to test and interact with your Android, iOS, and web apps on real, physical phones and tablets that are hosted by Amazon Web Services (AWS).&lt;/p&gt;

&lt;p&gt;Test on real mobile devices using Automated Testing and Remote Access.&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%2Fm3rx559n5ld9p4xww2av.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%2Fm3rx559n5ld9p4xww2av.png" alt="devicefarm"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Automated Testing
&lt;/h3&gt;

&lt;p&gt;Testing can be automated. You can upload your application, which is an APK or IPA file, as well as any automated testing frameworks or scripts you may already have with you such as Appium, Kellabash, XC test, or others.&lt;/p&gt;

&lt;p&gt;But suppose you don't have any kind of automated scripts in place. Device Farm assists you in this situation by running its own quick tests or exploratory tests on your uploaded application.&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%2F2ud62cu115517pcejx0g.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%2F2ud62cu115517pcejx0g.png" alt="authdevicefarm"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Remote Access
&lt;/h3&gt;

&lt;p&gt;You can also use this specific option known as the remote access if you prefer a more manual method of testing on various devices within AWS.&lt;/p&gt;

&lt;p&gt;Remote access provides you with a remote access to devices (phones and tablets) for interactive testing. &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%2F2ufu8z3vk1sfo0i84025.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%2F2ufu8z3vk1sfo0i84025.png" alt="manualdevicefarm"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Desktop browsers
&lt;/h3&gt;

&lt;p&gt;AWS Device farm also has support for desktop browser testing. You can upload and run your Selenium tests on multiple desktop browsers hosted on AWS. &lt;br&gt;
For every browser the test is executed on, Device Farm generates video recordings and Selenium logs to help you quickly identify any issues with your web app.&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%2F6mb5z4cvbxcwmdbwi99s.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%2F6mb5z4cvbxcwmdbwi99s.png" alt="desktopbrowser"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Device farm pricing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pay for a particular device per minute&lt;/li&gt;
&lt;li&gt;Pay for a particular device for a whole month&lt;/li&gt;
&lt;li&gt;For desktop browsers, you pay for every instance minute you run&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon Inspector - Security testing tool
&lt;/h2&gt;

&lt;p&gt;Amazon Inspector is a vulnerability management service that continuously scans your AWS workloads for software vulnerabilities and unintended network exposure. &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%2Fv1mfp44x7wlfwoizarlv.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%2Fv1mfp44x7wlfwoizarlv.png" alt="inspector"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Security testing sample on EC2 Instance
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Prepare a production EC2 instance on which a network accessibility check is necessary.&lt;/li&gt;
&lt;li&gt;Open Port 21 and 22 to create a security concern. &lt;/li&gt;
&lt;li&gt;Use Amazon Inspector to do an examination and vulnerability check.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It is generally not advised to leave port 21 open on your production instance or instances because it is Used by FTP to allow file transfers.&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%2Fmxq975sgb77okepi1maj.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%2Fmxq975sgb77okepi1maj.png" alt="ec2inspector"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This EC2 instance acted as a target instance for assessment and it has found three findings; information, medium, and high. &lt;br&gt;
It's telling you that there is a network exposure and is reachable through the Internet. In case you want to take any action, then the recommendation is  that you need to go ahead and edit your security group to remove this particular access.&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%2F05my9ve7fhhwtndyj1fr.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%2F05my9ve7fhhwtndyj1fr.png" alt="ec2inspector2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Amazon Inspector provides a clear list of security and compliance findings assigned a priority by the severity level. Moreover, these findings can be analyzed directly or as part of comprehensive assessment records available via the API or AWS Inspector console. &lt;/p&gt;

&lt;h3&gt;
  
  
  Importance of Inspector
&lt;/h3&gt;

&lt;p&gt;Amazon Inspector security assessments  allows you to make &lt;strong&gt;security testing&lt;/strong&gt; more regular occurrence as part of the development and IT operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automation with AWS Tools
&lt;/h2&gt;

&lt;p&gt;QA engineers can use AWS services to automate and streamline their testing processes and ensure that their applications are ready for deployment.&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%2Fmai43rz2wil40nkg9y1m.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%2Fmai43rz2wil40nkg9y1m.png" alt="automationtest"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Services such as CodeBuild, CodePipeline, and many others can be used to create an automation testing tool.&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%2Fkopb656ukmo8ys9m6qgi.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%2Fkopb656ukmo8ys9m6qgi.png" alt="awstoolstest"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Automation testing samples with AWS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/devops/integrating-aws-device-farm-with-ci-cd-pipeline-to-run-cross-browser-selenium-tests/" rel="noopener noreferrer"&gt;Integrating AWS Device Farm with your CI/CD pipeline to run cross-browser Selenium tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/awscommunity-asean/setting-up-postman-api-testing-using-newman-cli-with-aws-codebuild-and-codepipeline-2oem"&gt;Automated API testing with Postman Collection using Newman CLI, AWS Codebuild, CodePipeline, &amp;amp; S3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/awscommunity-asean/creating-an-api-that-runs-selenium-via-aws-lambda-3ck3"&gt;Creating an API that runs Selenium via AWS Lambda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/awscommunity-asean/setting-up-selenium-cicd-using-codecommit-codebuild-codepipeline-1coa"&gt;Selenium CI/CD using AWS Codebuild and Codepipeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/awscommunity-asean/setup-selenium-docker-image-in-amazon-ecr-jg9"&gt;Selenium in Docker Container and Pushing Image in Amazon ECR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Any software development process must include testing. Quality assurance helps a company create products and services that meet the needs, expectations and requirements of customers. It yields high-quality product offerings that build trust and loyalty with customers.&lt;/p&gt;

</description>
      <category>awsforqatester</category>
      <category>awsfortesting</category>
      <category>aws</category>
      <category>qa</category>
    </item>
    <item>
      <title>Setting up Automated API testing with Postman Collection using Newman CLI, AWS Codebuild, CodePipeline, &amp; S3</title>
      <dc:creator>Jaira Encio</dc:creator>
      <pubDate>Sat, 12 Nov 2022 15:25:40 +0000</pubDate>
      <link>https://dev.to/awscommunity-asean/setting-up-postman-api-testing-using-newman-cli-with-aws-codebuild-and-codepipeline-2oem</link>
      <guid>https://dev.to/awscommunity-asean/setting-up-postman-api-testing-using-newman-cli-with-aws-codebuild-and-codepipeline-2oem</guid>
      <description>&lt;p&gt;In this post you will learn how to automate your own build of postman collections with aws codecommit, codepipeline, and codebuild.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Newman&lt;/strong&gt; is a command-line collection runner for Postman.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Postman&lt;/strong&gt; is an API platform for building and using APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CodeCommit&lt;/strong&gt; is a secure, highly scalable, managed source control service that hosts private Git repositories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CodeBuild&lt;/strong&gt; compiles your source code, runs unit tests, and produces artifacts that are ready to deploy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CodePipeline&lt;/strong&gt; is a continuous delivery service you can use to model, visualize, and automate the steps required to release your software.&lt;/p&gt;

&lt;h2&gt;
  
  
  File Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;── /CodeCommitRepo/         # root folder
  ├── /buildspec.yml        # source code for build commands
  └── /api.postman_collection.json # postman collection
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Export Postman Collection&lt;/li&gt;
&lt;li&gt;Create Buildspec.yml&lt;/li&gt;
&lt;li&gt;Create CodeCommit Repository and push files &lt;/li&gt;
&lt;li&gt;Create S3 bucket for output report&lt;/li&gt;
&lt;li&gt;Create a build project in AWS CodeBuild&lt;/li&gt;
&lt;li&gt;Create pipeline in CodePipeline and build all together&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1. Export Postman Collection
&lt;/h3&gt;

&lt;p&gt;Open your postman collection and select the more actions icon More actions icon next to the collection, then select Export.&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%2Fru6xwb5opg6bbiin6fww.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%2Fru6xwb5opg6bbiin6fww.png" alt="export postman1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select the format you'd like your collection to export as then select export to download your newly generated JSON file.&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%2Fuzs0hc50s4g0hy1mv3d6.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%2Fuzs0hc50s4g0hy1mv3d6.png" alt="export postman2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Create Buildspec.yml
&lt;/h3&gt;

&lt;p&gt;Copy the code below to &lt;code&gt;buildspec.yml&lt;/code&gt;. Make sure to place your file along with your exported postman collection.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.2&lt;/span&gt;

&lt;span class="na"&gt;phases&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;pre_build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;commands&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;npm install -g newman&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;npm install -g newman-reporter-html&lt;/span&gt;

  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;commands&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;newman run -r html,cli test_api.postman_collection.json --reporter-html-export report.html&lt;/span&gt;

&lt;span class="na"&gt;artifacts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;report.html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This installs &lt;strong&gt;newman&lt;/strong&gt; and &lt;strong&gt;newman-reporter-html&lt;/strong&gt; dependencies for our postman cli. After prebuild, this will run cli command to run and generate html report from our postman collection &lt;code&gt;newman run -r html,cli {name}.postman_collection.json --reporter-html-export report.html&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  3. Create CodeCommit Repository and push files
&lt;/h3&gt;

&lt;p&gt;Open the CodeCommit console at &lt;a href="https://console.aws.amazon.com/codesuite/codecommit/home" rel="noopener noreferrer"&gt;https://console.aws.amazon.com/codesuite/codecommit/home&lt;/a&gt; then click create repository&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%2Ft88d37kcyertx7bbbayq.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%2Ft88d37kcyertx7bbbayq.png" alt="Code Commit1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter Repository name and description (optional) then click create&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%2Fwdpdf44q5hlcscb1sinv.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%2Fwdpdf44q5hlcscb1sinv.png" alt="Code Commit2"&gt;&lt;/a&gt;&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%2Fs4eks85bw3zgzd7s5htj.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%2Fs4eks85bw3zgzd7s5htj.png" alt="Code Commit3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clone repository and push your buildspec and postman file. You can specify a certain branch but we will just be using master.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Create s3 bucket for report
&lt;/h3&gt;

&lt;p&gt;This will serve as the output folder for our generated html report.&lt;/p&gt;

&lt;p&gt;Open the S3 console at &lt;a href="https://console.aws.amazon.com/s3/" rel="noopener noreferrer"&gt;https://console.aws.amazon.com/s3/&lt;/a&gt; then click Create bucket&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%2F9omwb6uxe4aamjgls389.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%2F9omwb6uxe4aamjgls389.png" alt="s3 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter bucket name and click Create bucket&lt;br&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%2F8qblklwimvbcoc1xkwjr.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%2F8qblklwimvbcoc1xkwjr.png" alt="s3 2"&gt;&lt;/a&gt;&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%2Fks8iqewf7kqnytny6kbs.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%2Fks8iqewf7kqnytny6kbs.png" alt="s3 4"&gt;&lt;/a&gt;&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%2Fbwkbihuelmytsvivylsf.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%2Fbwkbihuelmytsvivylsf.png" alt="s3 5"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Create a build project in AWS CodeBuild
&lt;/h3&gt;

&lt;p&gt;Open the AWS CodeBuild console at &lt;a href="https://console.aws.amazon.com/codesuite/codebuild/home" rel="noopener noreferrer"&gt;https://console.aws.amazon.com/codesuite/codebuild/home&lt;/a&gt; then click Create project&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%2Fe8438pye7mqaeqv0wfjg.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%2Fe8438pye7mqaeqv0wfjg.png" alt="codebuild1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fill in the following sections. Once complete, choose Create build project at the bottom of the page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sections:&lt;/strong&gt;&lt;br&gt;
Project configuration - Name and description&lt;br&gt;
Source provider - AWS Codecommit, repo name&lt;br&gt;
Environment - Ubuntu, Standard, aws/codebuild/standard:6.0&lt;br&gt;
Buildspec&lt;br&gt;
Batch configuration&lt;br&gt;
Artifacts - s3, bucket name&lt;br&gt;
Logs&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%2Fmzdlgdf9z6vt5c11f6qp.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%2Fmzdlgdf9z6vt5c11f6qp.png" alt="codebuild2"&gt;&lt;/a&gt;&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%2F66qsrixtzvgpbmde2hs5.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%2F66qsrixtzvgpbmde2hs5.png" alt="codebuild source"&gt;&lt;/a&gt;&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%2Fyn1frw4tsce9r4p9hkz0.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%2Fyn1frw4tsce9r4p9hkz0.png" alt="codebuild environment"&gt;&lt;/a&gt;&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%2Ffuc9thol7rfdfdmyxktu.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%2Ffuc9thol7rfdfdmyxktu.png" alt="codebuild buildspec"&gt;&lt;/a&gt;&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%2Fx3mkapveqlq2fe48weqa.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%2Fx3mkapveqlq2fe48weqa.png" alt="codebuild artifacts"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Create pipeline in CodePipeline and build all together
&lt;/h3&gt;

&lt;p&gt;We will now combine our process by using AWS CodePipeline to pull our source code in CodeCommit, run build with AWS CodeBuild and output generated html in S3&lt;/p&gt;

&lt;p&gt;Open the CodePipeline console at &lt;a href="http://console.aws.amazon.com/codesuite/codepipeline/home" rel="noopener noreferrer"&gt;http://console.aws.amazon.com/codesuite/codepipeline/home&lt;/a&gt; and choose Create Pipeline&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%2F0dqiwco3aiz8enuqvff3.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%2F0dqiwco3aiz8enuqvff3.png" alt="code pipeline1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Step 1: Choose pipeline settings page; in Pipeline name, enter the name for your pipeline. &lt;/p&gt;

&lt;p&gt;Choose New service role to allow CodePipeline to create a new service role in IAM.&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%2F2uh1aou2dw2lq5wfkxqt.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%2F2uh1aou2dw2lq5wfkxqt.png" alt="code pipeline step1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Step 2: Add source stage page; in Source provider, select AWS CodeCommit, repo name, and branch name.&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%2Fwbophwf04j526z2oyv5o.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%2Fwbophwf04j526z2oyv5o.png" alt="code pipeline step2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Step 3: Add build stage page, select AWS Codebuild and project name&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%2F91qp104ft9wqqpurqebl.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%2F91qp104ft9wqqpurqebl.png" alt="code pipeline step3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Step 4: Add deploy stage page, Choose Skip deploy stage.&lt;/p&gt;

&lt;p&gt;On the Step 5: Review, Review all changes then click create pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Output
&lt;/h2&gt;

&lt;p&gt;You should see Succeeded status after running pipeline. The build log shows from prebuild ,running command, and generating output.&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%2Fzzq2eim8lpk76dcd6osv.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%2Fzzq2eim8lpk76dcd6osv.png" alt="run pipeline1"&gt;&lt;/a&gt;&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%2Fcx23hmk0osf4ko5ef8rp.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%2Fcx23hmk0osf4ko5ef8rp.png" alt="run pipeline2"&gt;&lt;/a&gt;&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%2Fy2ygg1dv6wb3tdzfoxkm.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%2Fy2ygg1dv6wb3tdzfoxkm.png" alt="run pipeline3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to your s3 bucket to view successful report&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%2F2e4doshcnhd9te4crfa6.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%2F2e4doshcnhd9te4crfa6.png" alt="s3 output1"&gt;&lt;/a&gt;&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%2Fxypgpj91cv2rr0v1t44u.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%2Fxypgpj91cv2rr0v1t44u.png" alt="s3 output2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To share this html report with others. You can use presigned URLs&lt;/p&gt;

&lt;h3&gt;
  
  
  To generate a presigned URL using the AWS Management Console
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In the Buckets list, choose the name of the bucket that contains the object that you want a presigned URL for.&lt;/li&gt;
&lt;li&gt;In the Objects list, select the object that you want to create a presigned URL for.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On the Actions menu, choose Share with a presigned URL.&lt;br&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%2Fl3d6u9y36h8e1msrot7y.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%2Fl3d6u9y36h8e1msrot7y.png" alt="presigned url1"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specify how long you want the presigned URL to be valid.&lt;br&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%2Fpvm01b10vzi2j8wzxv1r.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%2Fpvm01b10vzi2j8wzxv1r.png" alt="presigned url2"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose Create presigned URL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When a confirmation appears, the URL is automatically copied to your clipboard. You will see a button to copy the &lt;br&gt;
presigned URL if you need to copy it again.&lt;br&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%2Fgavyw5kvn6xc2o8jtdvk.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%2Fgavyw5kvn6xc2o8jtdvk.png" alt="presigned url3"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://learning.postman.com/docs/running-collections/using-newman-cli/installing-running-newman/" rel="noopener noreferrer"&gt;https://learning.postman.com/docs/running-collections/using-newman-cli/installing-running-newman/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/newman-reporter-html" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/newman-reporter-html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://unmesh.me/2017/06/10/api-testing-with-postman-collections-in-aws-codepipeline/" rel="noopener noreferrer"&gt;https://unmesh.me/2017/06/10/api-testing-with-postman-collections-in-aws-codepipeline/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>newman</category>
      <category>postman</category>
      <category>newmancli</category>
      <category>automation</category>
    </item>
    <item>
      <title>Setting up Email Notification for EC2 instance changes using Amazon SNS and Eventbridge</title>
      <dc:creator>Jaira Encio</dc:creator>
      <pubDate>Thu, 17 Mar 2022 10:57:40 +0000</pubDate>
      <link>https://dev.to/awscommunity-asean/setup-email-notification-for-ec2-instance-changes-using-amazon-sns-and-eventbridge-5bel</link>
      <guid>https://dev.to/awscommunity-asean/setup-email-notification-for-ec2-instance-changes-using-amazon-sns-and-eventbridge-5bel</guid>
      <description>&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt; To receive email notif everytime your EC2 instances changes its status. (Terminated, Stopped, etc)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Amazon SNS?&lt;/strong&gt;&lt;br&gt;
Amazon SNS enables you to send notifications directly to your customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Amazon EventBridge?&lt;/strong&gt;&lt;br&gt;
Amazon EventBridge is a serverless event bus that makes it easier to build event-driven applications at scale using events generated from your applications, integrated Software-as-a-Service (SaaS) applications, and AWS services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setup SNS topic&lt;/li&gt;
&lt;li&gt;Create email subscription on topic&lt;/li&gt;
&lt;li&gt;Setup EC2 Instance State-change Notification eventbridge rule&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Setting up SNS topic and email subscription
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Go to AWS SNS console, and then choose Topics from the navigation pane.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  2. Select Create topic.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mtr1PnQo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5v89zh5nvigzusbo2x6p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mtr1PnQo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5v89zh5nvigzusbo2x6p.png" alt="Create topic" width="880" height="619"&gt;&lt;/a&gt;&lt;br&gt;
For the type, I would be selecting Standard. Then just enter name and display name for your topic.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Click Create topic.
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  4. On the Subscriptions tab, click Create subscription.
&lt;/h3&gt;

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

&lt;p&gt;For Protocol, select Email.&lt;br&gt;
For Endpoint, enter the email address where you want to receive the notifications.&lt;/p&gt;

&lt;p&gt;If you want to change this to a SMS notif, you can simple select SMS for protocal then enter mobile number on endpoint where you want to receive notifications.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Click Create subscription.
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  6. Confirm email subscription sent to the email address you entered.
&lt;/h3&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OY4CVgS8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v9m6ktrq9blq01afh7tg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OY4CVgS8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v9m6ktrq9blq01afh7tg.png" alt="subscription confirmed" width="617" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Go to your topic then check email status.
&lt;/h3&gt;

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

&lt;p&gt;It should show that your email is now confirmed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up EC2 TerminateInstances eventbridge rule
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Open the EventBridge console, and then click Create Rule
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  2. Fill up details on define rule detail then click next
&lt;/h3&gt;

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

&lt;p&gt;Enter a Name and description for your rule. &lt;br&gt;
On rule type, select rule with an event pattern&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Fill up details on Build event pattern then click next
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LflG4DRm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/brd7ob0hvghiyo7v1f6k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LflG4DRm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/brd7ob0hvghiyo7v1f6k.png" alt="Image description" width="868" height="359"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wahTkQz1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/90r0twimygwb6n6zdwyj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wahTkQz1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/90r0twimygwb6n6zdwyj.png" alt="Image description" width="880" height="525"&gt;&lt;/a&gt;&lt;br&gt;
For Service provider, choose AWS.&lt;br&gt;
For Service name, choose EC2.&lt;br&gt;
For Event type, choose EC2 Instance State-change Notification.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Fill up select targets then click next
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1N0oXWcq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8xyt3oe311h9qki9bgu9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1N0oXWcq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8xyt3oe311h9qki9bgu9.png" alt="target" width="880" height="398"&gt;&lt;/a&gt;&lt;br&gt;
In Select targets, choose SNS topic from the Target dropdown list.&lt;br&gt;
For Topic, choose the topic name that you created earlier.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Click Create rule
&lt;/h3&gt;

&lt;p&gt;You can test this rule by terminating your instance. This rule generates an email notification every time an instance is terminated. You can select other states as well.&lt;/p&gt;

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

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

</description>
    </item>
    <item>
      <title>Setting up Selenium in Docker Container and Pushing Image in Amazon ECR</title>
      <dc:creator>Jaira Encio</dc:creator>
      <pubDate>Thu, 17 Feb 2022 07:06:03 +0000</pubDate>
      <link>https://dev.to/awscommunity-asean/setup-selenium-docker-image-in-amazon-ecr-jg9</link>
      <guid>https://dev.to/awscommunity-asean/setup-selenium-docker-image-in-amazon-ecr-jg9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;: Running headless mode selenium in Docker Container then pushing image in Amazon ECR.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Amazon ECR?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Amazon Elastic Container Registry (ECR)&lt;/strong&gt; is a fully managed Docker container registry that makes it easy to store, share, and deploy container images.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Docker container?&lt;/strong&gt;&lt;br&gt;
A &lt;strong&gt;Docker container image&lt;/strong&gt; is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  File Structure
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 shell
── /MyFolder/               # root folder
  ├── /main_test.py         # source code main test
  ├── /requirements.txt     # dependencies
  └── /Dockerfile           # docker commands


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;Copy the following inside &lt;code&gt;main_test.py&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 shell
import unittest
from selenium import webdriver
from time import sleep


class app_test_case(unittest.TestCase):


    def setUp(self):
        chromeOptions = webdriver.ChromeOptions()
        driver_path = '/usr/local/bin/chromedriver'
        chromeOptions.add_argument('--headless')
        chromeOptions.add_argument('--disable-gpu')
        chromeOptions.add_argument('--no-sandbox')


        self.driver = webdriver.Chrome(driver_path, chrome_options=chromeOptions)
        self.driver.implicitly_wait(30)
        self.driver.maximize_window()
        path = 'https://www.google.com/'
        self.base_url = path


    def test_i_d_e_script1(self):
        driver = self.driver
        driver.get(self.base_url)

        get_title = driver.title
        print(get_title, "  ", len(get_title))


    def tearDown(self):
        sleep(5)
        self.driver.quit()


if __name__ == "__main__":
    unittest.main()


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

&lt;/div&gt;

&lt;p&gt;Copy the following inside &lt;code&gt;requirements.txt&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 shell
selenium==3.12.0
ipython==7.0.1


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

&lt;/div&gt;

&lt;p&gt;Copy the following inside &lt;code&gt;Dockerfile&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 shell
FROM python:3


WORKDIR /srv


ADD . /srv
RUN apt-get -y update
RUN pip install --upgrade pip
RUN apt-get install zip -y
RUn apt-get install unzip -y


RUN pip install -r requirements.txt


# Install chromedriver
RUN wget -N https://chromedriver.storage.googleapis.com/72.0.3626.69/chromedriver_linux64.zip -P ~/
RUN unzip ~/chromedriver_linux64.zip -d ~/
RUN rm ~/chromedriver_linux64.zip
RUN mv -f ~/chromedriver /usr/local/bin/chromedriver
RUN chown root:root /usr/local/bin/chromedriver
RUN chmod 0755 /usr/local/bin/chromedriver


# Install chrome broswer
RUN curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo "deb http://dl.google.com/linux/chrome/deb/ stable main" &amp;gt;&amp;gt; /etc/apt/sources.list.d/google-chrome.list
RUN apt-get -y update
RUN apt-get -y install google-chrome-stable


CMD ["python", "main_test.py"]


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

&lt;/div&gt;

&lt;p&gt;Dockerfile is the one that builds a Docker image. The image contains all the dependencies our application needs, including Python itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build and Run New Docker Image
&lt;/h2&gt;

&lt;p&gt;Once Dockerfile and all required config files have been created, we can now build a new docker image&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 shell
$ docker build -t myapp .


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

&lt;/div&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%2F38vp2yipffg4axs56pwi.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%2F38vp2yipffg4axs56pwi.png" alt="builddocker"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check created image&lt;/p&gt;

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

$ docker images


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

&lt;/div&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%2Ffzac2cjbctln713im2sw.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%2Ffzac2cjbctln713im2sw.png" alt="dockerimage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run image&lt;/p&gt;

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

$ docker run myapp


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

&lt;/div&gt;

&lt;p&gt;Output should be like this:&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%2Fjjoioacbio8nbaet8cbs.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%2Fjjoioacbio8nbaet8cbs.png" alt="testoutput"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pushing Image in Amazon ECR
&lt;/h2&gt;

&lt;p&gt;Step 1. Authenticate your Docker client to the Amazon ECR registry to which you intend to push your image&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 shell
$ aws ecr get-login --region region --no-include-email


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

&lt;/div&gt;

&lt;p&gt;Step 2. Copy and paste the docker login command into a terminal to authenticate your Docker CLI to the registry.&lt;/p&gt;

&lt;p&gt;Step 3. Tag your image with the Amazon ECR registry, repository, and optional image tag name combination to use. The registry format is: &lt;code&gt;docker tag image_id aws_account_id.dkr.ecr.region.amazonaws.com/myapp&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 shell
$ docker tag image_id aws_account_id.dkr.ecr.region.amazonaws.com/myapp


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

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;(Note: You must first create a repository in ECR)&lt;/strong&gt;&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%2Fvmxzo3oieh5kszeddqcr.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%2Fvmxzo3oieh5kszeddqcr.png" alt="ecr new repo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 4. Push the image using the docker push command: The registry format is: &lt;code&gt;docker tag image_id aws_account_id.dkr.ecr.region.amazonaws.com/myapp&lt;/code&gt;&lt;/p&gt;

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

$ docker push aws_account_id.dkr.ecr.region.amazonaws.com/myapp


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/jaira-mae-encio-929a68176/" rel="noopener noreferrer"&gt;Jaira Encio Linkedin&lt;/a&gt;&lt;/p&gt;

</description>
      <category>selenium</category>
      <category>docker</category>
      <category>ecr</category>
      <category>automation</category>
    </item>
    <item>
      <title>Setting up Selenium CI/CD using AWS Codebuild and Codepipeline</title>
      <dc:creator>Jaira Encio</dc:creator>
      <pubDate>Thu, 13 Jan 2022 09:29:10 +0000</pubDate>
      <link>https://dev.to/awscommunity-asean/setting-up-selenium-cicd-using-codecommit-codebuild-codepipeline-1coa</link>
      <guid>https://dev.to/awscommunity-asean/setting-up-selenium-cicd-using-codecommit-codebuild-codepipeline-1coa</guid>
      <description>&lt;p&gt;In this post we will use CodeBuild and CodePipeline as a build environment for our selenium scripts located in CodeCommit repo. &lt;/p&gt;

&lt;p&gt;We will also be using selenium in headless mode so we can run our automated tests without a visible UI shell. &lt;/p&gt;

&lt;h2&gt;
  
  
  File Structure
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 shell
── /MyFolder/               # root folder
  ├── /app.py               # source code main test
  ├── /requirements.txt     # dependencies
  ├── /buildspec.yml        # build spec as part of the source code
  └── /install_driver.sh    # chromedriver and binary


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

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create source code files&lt;/li&gt;
&lt;li&gt;Create CodeCommit Repository and push files&lt;/li&gt;
&lt;li&gt;Create a build project in AWS CodeBuild&lt;/li&gt;
&lt;li&gt;Create pipeline in CodePipeline and build all together&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1. Create source code files
&lt;/h2&gt;

&lt;p&gt;We will be creating the ff:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;buildspec.yml&lt;/li&gt;
&lt;li&gt;requirements.txt&lt;/li&gt;
&lt;li&gt;install_driver.sh&lt;/li&gt;
&lt;li&gt;app.py&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Copy the following inside &lt;code&gt;install_driver.sh&lt;/code&gt;
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 sh
# Download and Install chromedriver
wget -N https://chromedriver.storage.googleapis.com/71.0.3578.80/chromedriver_linux64.zip -P ~/
unzip ~/chromedriver_linux64.zip -d ~/
rm ~/chromedriver_linux64.zip
sudo mv -f ~/chromedriver /usr/local/bin/chromedriver
sudo chown root:root /usr/local/bin/chromedriver
sudo chmod 0755 /usr/local/bin/chromedriver


# Install chrome broswer
curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" &amp;gt;&amp;gt; /etc/apt/sources.list.d/google-chrome.list
apt-get -y update
apt-get -y install google-chrome-stable


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Copy the following inside &lt;code&gt;requirements.txt&lt;/code&gt;
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 txt
selenium==3.12.0
ipython==7.0.1


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

&lt;/div&gt;

&lt;p&gt;Note: I recommend to use chromedriver version between 70 and 63. You can check diff versions in here &lt;a href="https://chromedriver.storage.googleapis.com/" rel="noopener noreferrer"&gt;https://chromedriver.storage.googleapis.com/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Copy the following inside &lt;code&gt;app.py&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;br&gt;
 python&lt;br&gt;
from selenium import webdriver&lt;br&gt;
import unittest&lt;br&gt;
from time import sleep

&lt;p&gt;class app_test_case(unittest.TestCase):&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def setUp(self):
    chromeOptions = webdriver.ChromeOptions()
    driver_path = '/usr/local/bin/chromedriver'
    chromeOptions.add_argument('--headless')
    chromeOptions.add_argument('--disable-gpu')
    chromeOptions.add_argument('--no-sandbox')


    self.driver = webdriver.Chrome(driver_path, chrome_options=chromeOptions)
    self.driver.implicitly_wait(30)
    self.driver.maximize_window()
    path = 'https://www.facebook.com/'
    self.base_url = path

def test_i_d_e_script1(self):
    driver = self.driver
    driver.get(self.base_url)

    get_title = driver.title
    print(get_title)


def tearDown(self):
    sleep(5)
    self.driver.quit()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;if &lt;strong&gt;name&lt;/strong&gt; == "&lt;strong&gt;main&lt;/strong&gt;":&lt;br&gt;
    unittest.main()&lt;/p&gt;

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

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Copy the following inside &lt;code&gt;buildspec.yml&lt;/code&gt;&lt;br&gt;
&lt;/h3&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;br&gt;
 yaml&lt;br&gt;
version: 0.2

&lt;p&gt;phases:&lt;br&gt;
  install:&lt;br&gt;
    commands:&lt;br&gt;
       - pip install -U -r requirements.txt&lt;br&gt;
       - sh install_driver.sh &lt;br&gt;
  build:&lt;br&gt;
    commands:&lt;br&gt;
       - python app.py&lt;/p&gt;

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

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  

&lt;ol&gt;
&lt;li&gt;Create CodeCommit Repository and push files
&lt;/li&gt;
&lt;/ol&gt;
&lt;/h2&gt;


&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open the CodeCommit console at &lt;a href="https://console.aws.amazon.com/codesuite/codecommit/home" rel="noopener noreferrer"&gt;https://console.aws.amazon.com/codesuite/codecommit/home&lt;/a&gt; then click create repository&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter Repository name and description (optional) then click create&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2Fmgbg6g6p0mhuic6avj20.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%2Fmgbg6g6p0mhuic6avj20.png" alt="code1"&gt;&lt;/a&gt;&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%2F2v4qovktk1r59yk2lrlf.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%2F2v4qovktk1r59yk2lrlf.png" alt="code2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clone repository and push all file requirements. You can specify a certain branch but we will just be using master.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Create a build project in AWS CodeBuild
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open the AWS CodeBuild console at &lt;a href="https://console.aws.amazon.com/codesuite/codebuild/home" rel="noopener noreferrer"&gt;https://console.aws.amazon.com/codesuite/codebuild/home&lt;/a&gt; then click Create project&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fill in the following sections. Once complete, choose Create build project at the bottom of the page.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sections:&lt;br&gt;
Project configuration - Name and description&lt;br&gt;
Source provider - AWS Codecommit, repo name&lt;br&gt;
Environment - Ubuntu, Standard, aws/codebuild/standard:6.0&lt;br&gt;
Buildspec&lt;br&gt;
Batch configuration&lt;br&gt;
Artifacts - none&lt;br&gt;
Logs&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%2Fzefhfo4991mys8m8sgvr.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%2Fzefhfo4991mys8m8sgvr.png" alt="build1"&gt;&lt;/a&gt;&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%2Flbtnmga29psi7qbmcy1y.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%2Flbtnmga29psi7qbmcy1y.png" alt="build2"&gt;&lt;/a&gt;&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%2Fdmmyop1adu8jb83zdmnc.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%2Fdmmyop1adu8jb83zdmnc.png" alt="build3"&gt;&lt;/a&gt;&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%2Fn6irzfvhfcgabk6vvf67.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%2Fn6irzfvhfcgabk6vvf67.png" alt="build4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Create pipeline in CodePipeline and build all together
&lt;/h2&gt;

&lt;p&gt;We will now combine our process by using AWS CodePipeline to automatically pull our source code in CodeCommit and run build with AWS CodeBuild.&lt;/p&gt;

&lt;p&gt;Open the CodePipeline console at &lt;a href="http://console.aws.amazon.com/codesuite/codepipeline/home" rel="noopener noreferrer"&gt;http://console.aws.amazon.com/codesuite/codepipeline/home&lt;/a&gt; and choose Create Pipeline&lt;/p&gt;

&lt;p&gt;On the Step 1: Choose pipeline settings page; in Pipeline name, enter the name for your pipeline.&lt;/p&gt;

&lt;p&gt;Choose New service role to allow CodePipeline to create a new service role in IAM.&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%2Fhx9sosip5t3qzbxeo92g.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%2Fhx9sosip5t3qzbxeo92g.png" alt="pipe1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Step 2: Add source stage page; in Source provider, select AWS CodeCommit, repo name, and branch name.&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%2Fy4olirb7mzbv5q2i1dsw.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%2Fy4olirb7mzbv5q2i1dsw.png" alt="pipe2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Step 3: Add build stage page, select AWS Codebuild and project name&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%2Fdz4kcvilizvv0icrv16s.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%2Fdz4kcvilizvv0icrv16s.png" alt="pipe3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Step 4: Add deploy stage page, Choose Skip deploy stage.&lt;/p&gt;

&lt;p&gt;On the Step 5: Review, Review all changes then click create pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Output
&lt;/h2&gt;

&lt;p&gt;You should see Succeeded status after running pipeline. The build log shows from prebuild ,running command, and generating output.&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%2Fncrgibhx0fsupbuiy64d.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%2Fncrgibhx0fsupbuiy64d.png" alt="output1"&gt;&lt;/a&gt;&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%2Fyzrlxbyflaxdih1psmx8.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%2Fyzrlxbyflaxdih1psmx8.png" alt="output2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/jaira-mae-encio-929a68176/" rel="noopener noreferrer"&gt;Jaira Encio Linkedin&lt;/a&gt;&lt;/p&gt;

</description>
      <category>selenium</category>
      <category>automation</category>
      <category>cicd</category>
      <category>testing</category>
    </item>
    <item>
      <title>Create and Deploy Python Django Application in AWS EC2 Instance under 5 mins</title>
      <dc:creator>Jaira Encio</dc:creator>
      <pubDate>Wed, 12 Jan 2022 10:19:31 +0000</pubDate>
      <link>https://dev.to/awscommunity-asean/create-and-deploy-python-django-application-in-aws-ec2-instance-4hbm</link>
      <guid>https://dev.to/awscommunity-asean/create-and-deploy-python-django-application-in-aws-ec2-instance-4hbm</guid>
      <description>&lt;p&gt;Hello guys! Here is a simple step by step on how to create and deploy your own Python Django Application in AWS EC2 Instance. The goal of this is to deploy your app in the fastest way possible&lt;/p&gt;

&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Create and Launch your own EC2 instance&lt;/li&gt;
&lt;li&gt;SSH on your EC2&lt;/li&gt;
&lt;li&gt;Deploy packages&lt;/li&gt;
&lt;li&gt;Run and Create App&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Creating EC2 Instance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Login your AWS account and open EC2 Console
&lt;/h3&gt;

&lt;h3&gt;
  
  
  2. Click Launch Instance
&lt;/h3&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%2F62xh92a5om3pl8v4albl.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%2F62xh92a5om3pl8v4albl.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Choose an Amazon Machine Image (AMI)
&lt;/h3&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%2F4ytera4zav25kowp6egy.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%2F4ytera4zav25kowp6egy.png" alt="Image description"&gt;&lt;/a&gt;&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%2Fypxu428pxz4wpjbj8tdf.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%2Fypxu428pxz4wpjbj8tdf.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this I would be selecting either Amazon Linux/Ubuntu (free tier eligible)&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Choose an Instance Type
&lt;/h3&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%2F5yo8bw3nanutz68gkosk.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%2F5yo8bw3nanutz68gkosk.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
For this I would be selecting t2.micro (free tier eligible)&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Skip and Proceed to Configure Security Groups
&lt;/h3&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%2F2uadf1g7jbxpkd5e97ug.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%2F2uadf1g7jbxpkd5e97ug.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&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%2Fwcd89wg16q0hq8c00iwz.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%2Fwcd89wg16q0hq8c00iwz.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can simply use default or configure your own security groups even later after launching your instance.  You must open HTTP port 80 if you wish to check that the Nginx is successfully set up while visiting index.html. &lt;strong&gt;Note:&lt;/strong&gt; You can add additional port for postgresql. this sample is just for default django. &lt;/p&gt;

&lt;h3&gt;
  
  
  6. Click Review and Launch
&lt;/h3&gt;

&lt;h3&gt;
  
  
  7. Review Instance Launch then click Launch
&lt;/h3&gt;

&lt;h3&gt;
  
  
  8. Create new key pair then download
&lt;/h3&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%2Fqvqn8vo5zih02pl9w22c.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%2Fqvqn8vo5zih02pl9w22c.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Save this file as you would be needing this later.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Click Launch Instance
&lt;/h3&gt;

&lt;h3&gt;
  
  
  10. Navigate to Instances then check status of running instance
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Connect to your Instance via SSH
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. SSH on your EC2 instance
&lt;/h3&gt;

&lt;p&gt;In your terminal type the ff: &lt;code&gt;% ssh -i ~/Desktop/name_of_your_keypair.pem ec2-user@ipaddress&lt;/code&gt;&lt;br&gt;
Upon entering this, you will encounter a &lt;strong&gt;Warning unprotected file error&lt;/strong&gt;. With that you need to &lt;strong&gt;CHMOD&lt;/strong&gt; your pem file&lt;/p&gt;

&lt;h3&gt;
  
  
  2. CHMOD pem file
&lt;/h3&gt;

&lt;p&gt;On your terminal type the ff: &lt;code&gt;% chmod 400 ~/Desktop/umr-example-keypair.pem&lt;/code&gt; &lt;br&gt;
then retry connecting again via ssh and you should be able to connect to your ec2 instance now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Packages
&lt;/h2&gt;

&lt;p&gt;Since linux ami has its own python pre installed, I did not include it in my installations. I only added pip and django&lt;br&gt;
&lt;code&gt;sudo apt update&lt;br&gt;
sudo apt-get install python3-pip&lt;br&gt;
sudo pip3 install gunicorn&lt;br&gt;
sudo apt-get install supervisor&lt;br&gt;
sudo pip3 install django&lt;br&gt;
sudo yum install nginx&lt;br&gt;
&lt;/code&gt;&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%2Fys3nhhix4qoocziowmf2.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%2Fys3nhhix4qoocziowmf2.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start and check status of nginx
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl start nginx&lt;br&gt;
sudo systemctl status nginx&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can test this by copying the Public DNS(Ipv4) of your instance in the browser. See the index.html page of Nginx via public ip address ie &lt;a href="http://ipadress" rel="noopener noreferrer"&gt;http://ipadress&lt;/a&gt;...&lt;br&gt;
You should see default page for Nginx.&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%2Fh335jjv68w5kpatdgll5.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%2Fh335jjv68w5kpatdgll5.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create and Run python Django App
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create project
&lt;code&gt;% django-admin startproject mysite&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Creating project from and ec2 instance is really &lt;strong&gt;optional&lt;/strong&gt;, you can always &lt;strong&gt;push your app in a repo then clone&lt;/strong&gt; it inside&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Edit settings.py of your django app, set &lt;strong&gt;ALLOWED_HOSTS to = ["*"]&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to project and run app&lt;br&gt;
&lt;code&gt;% python3 manage.py runserver 0:8000&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy and paste the Public DNS(Ipv4):8000 of your instance in your browser&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2Fsyobqlshrk7cbo71cd72.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%2Fsyobqlshrk7cbo71cd72.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional: Configuration for a production ready App
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Configure and Integrate Gunicorn and Nginx
Configuring both takes a whole lot of steps. I would recommend this documentations related to that:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://pythoncircle.com/post/697/hosting-django-app-for-free-on-amazon-aws-ec2-with-gunicorn-and-nginx/" rel="noopener noreferrer"&gt;https://pythoncircle.com/post/697/hosting-django-app-for-free-on-amazon-aws-ec2-with-gunicorn-and-nginx/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.alibabacloud.com/blog/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04_594319" rel="noopener noreferrer"&gt;https://www.alibabacloud.com/blog/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04_594319&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/rmiyazaki6499/deploying-a-production-ready-django-app-on-aws-1pk3#installing-dependencies"&gt;https://dev.to/rmiyazaki6499/deploying-a-production-ready-django-app-on-aws-1pk3#installing-dependencies&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Creating an API that runs Selenium via AWS Lambda</title>
      <dc:creator>Jaira Encio</dc:creator>
      <pubDate>Fri, 11 Jun 2021 15:06:00 +0000</pubDate>
      <link>https://dev.to/awscommunity-asean/creating-an-api-that-runs-selenium-via-aws-lambda-3ck3</link>
      <guid>https://dev.to/awscommunity-asean/creating-an-api-that-runs-selenium-via-aws-lambda-3ck3</guid>
      <description>&lt;p&gt;Being an automation tester, my job is to automate everything. As I was running my test script via terminal I realised that I’m the only who can execute the scripts I made. What if someone wants to run it? like the Devs, Project Manager, etc. It would be a tedious task to clone my repo, install libraries, and run the script. So I decided that maybe I can store my test script inside a serverless machine and make it accessible via API request.&lt;/p&gt;

&lt;p&gt;I experimented with various AWS resources such as creating my own lambda function, checking features of API gateway, Codepipeline, etc. After several attempts, I was finally able to run my script inside. And then I just researched how to access my lambda via API.&lt;/p&gt;

&lt;p&gt;This will result in higher production and time savings. Engineers may focus on vital work because automated testing does not require human interaction. This is like a portable testing device that anyone could execute. With fast test execution, developers get testing reports in an instant, so whenever a failure occurs, they will react to it quickly. Test automation will make it easier to update programs quickly. As a result, automated testing leads to increased team responsiveness, improved user experience, and increased customer satisfaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create 2 Lambda layers that has selenium and chromedriver libraries&lt;/li&gt;
&lt;li&gt;Include created lambda layers in serverless.yml of lambda then deploy&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Creating Selenium Lambda Layer
&lt;/h1&gt;

&lt;p&gt;Place libraries in &lt;code&gt;python/lib/python3.6/site-packages/&lt;/code&gt; to include them in a layer.&lt;/p&gt;

&lt;p&gt;Download Selenium to layer directory&lt;/p&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;pip3.6 &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; selenium/python/lib/python3.6/site-packages &lt;span class="nv"&gt;selenium&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;3.8.0
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; selenium
&lt;span class="nv"&gt;$ &lt;/span&gt;zip &lt;span class="nt"&gt;-r&lt;/span&gt; python.zip python/


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

&lt;/div&gt;

&lt;p&gt;Once finished, Create lambda layer then upload zip file&lt;/p&gt;

&lt;p&gt;1. Go to AWS Console Lambda/Layers&lt;br&gt;
2. Click Create Layer&lt;br&gt;
3. Input the following in the layer configuration&lt;/p&gt;

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

Name: selenium
Description: Selenium layer
Upload zip file created: python.zip
Compatible runtimes: Python 3.6


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

&lt;/div&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%2Fmr9wh1spgyxib4qznm12.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%2Fmr9wh1spgyxib4qznm12.png" alt="selenium-layer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4. Click Create&lt;/p&gt;

&lt;p&gt;Note: You can user whatever version you prefer, you just need to select compatible runtime when uploading your package&lt;/p&gt;

&lt;h1&gt;
  
  
   Creating Chromedriver Lambda layer
&lt;/h1&gt;

&lt;p&gt;Download chrome driver&lt;/p&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;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; chromedriver
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; chromedriver
&lt;span class="nv"&gt;$ &lt;/span&gt;curl &lt;span class="nt"&gt;-SL&lt;/span&gt; https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip &amp;gt; chromedriver.zip
&lt;span class="nv"&gt;$ &lt;/span&gt;unzip chromedriver.zip
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;rm &lt;/span&gt;chromedriver.zip


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

&lt;/div&gt;

&lt;p&gt;Download chrome binary&lt;/p&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;curl &lt;span class="nt"&gt;-SL&lt;/span&gt; https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-41/stable-headless-chromium-amazonlinux-2017-03.zip &amp;gt; headless-chromium.zip
&lt;span class="nv"&gt;$ &lt;/span&gt;unzip headless-chromium.zip
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;rm &lt;/span&gt;headless-chromium.zip


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

&lt;/div&gt;

&lt;p&gt;Compress driver and binary&lt;/p&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;&lt;span class="nb"&gt;ls
&lt;/span&gt;chromedriver headless-chromium
&lt;span class="nv"&gt;$ &lt;/span&gt;zip &lt;span class="nt"&gt;-r&lt;/span&gt; chromedriver.zip chromedriver headless-chromium


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

&lt;/div&gt;

&lt;p&gt;Once finished, Create lambda layer then upload zip file&lt;/p&gt;

&lt;p&gt;1. Go to AWS Console Lambda/Layers&lt;br&gt;
2. Click Create Layer&lt;br&gt;
3. Input the following in the layer configuration&lt;/p&gt;

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

Name: chromedriver
Description: chrome driver and binary layer
Upload zip file created: chromedriver.zip
Compatible runtimes: Python 3.6


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

&lt;/div&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%2Fvfzv2ba6oa6lnf0m5akv.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%2Fvfzv2ba6oa6lnf0m5akv.png" alt="chrome-layer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4. Click Create&lt;/p&gt;

&lt;h1&gt;
  
  
   Creating Lambda Function
&lt;/h1&gt;

&lt;p&gt;To ensure that your function code has access to libraries included in layers, Lambda runtimes include paths in the '/opt' directory.&lt;/p&gt;

&lt;h3&gt;
  
  
   File Structure
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 shell
── /lambda/            # lambda function
  ├── /handler.py      # source code of lambda function 
  └── /serverless.yaml # serverless config


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

&lt;/div&gt;
&lt;h3&gt;
  
  
   Code
&lt;/h3&gt;

&lt;p&gt;Copy the code below to &lt;code&gt;/lambda/handler.py&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;selenium&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;webdriver&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;webdriver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chrome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Options&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Options&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;binary_location&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/opt/headless-chromium&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;--headless&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;--no-sandbox&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;--single-process&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;--disable-dev-shm-usage&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;driver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;webdriver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Chrome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/opt/chromedriver&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;chrome_options&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://www.google.com/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;quit&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;statusCode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Selenium Headless Chrome Initialized&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Copy the code below to &lt;code&gt;/lambda/serverless.yaml&lt;/code&gt;.&lt;/p&gt;

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

&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt;

&lt;span class="n"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;aws&lt;/span&gt;
  &lt;span class="n"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;python3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
  &lt;span class="n"&gt;region&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ap&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;southeast&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
  &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;900&lt;/span&gt;

&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;memorySize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;
    &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;
    &lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;
          &lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt;

    &lt;span class="n"&gt;layers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;arn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;ap&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;southeast&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:{}:&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;chromedriver&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;arn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;ap&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;southeast&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:{}:&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;

&lt;span class="n"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;Resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;ApiGatewayRestApi&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="n"&gt;Properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;BinaryMediaTypes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*/*&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


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

&lt;/div&gt;
&lt;h3&gt;
  
  
   Deploy Lambda Function
&lt;/h3&gt;

&lt;p&gt;Go to &lt;code&gt;/lambda&lt;/code&gt; directory&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$ sls deploy


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

&lt;/div&gt;
&lt;h3&gt;
  
  
   Output
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;Serverless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;Stack&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="n"&gt;finished&lt;/span&gt;&lt;span class="bp"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;Service&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;Information&lt;/span&gt;
&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt;
&lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;
&lt;span class="n"&gt;region&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;ap&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;southeast&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;
&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;span class="n"&gt;endpoints&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;GET&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ap&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;southeast&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.&lt;/span&gt;&lt;span class="n"&gt;amazonaws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;
&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;


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

&lt;/div&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%2Fngj9rtk6v7pq5cc30kl8.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%2Fngj9rtk6v7pq5cc30kl8.png" alt="output"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should get same response as below when accessing API&lt;/p&gt;

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

&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;statusCode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Selenium Headless Chrome Initialized&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;This deployment automatically creates cloudformation stack and s3 bucket.&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%2F0v0w5bozyava6wlm4mqb.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%2F0v0w5bozyava6wlm4mqb.png" alt="Cloudformation stack"&gt;&lt;/a&gt;&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%2Fgfw2wmco39nxge7x9gj8.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%2Fgfw2wmco39nxge7x9gj8.png" alt="S3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Deprecation note:
&lt;/h3&gt;

&lt;p&gt;Since python3.6 has been deprecated, you can try using the ff packages compatible with 3.9. note that if this exceeds lambda function zip file, you can try using docker image or uploading to s3 instead.&lt;/p&gt;

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

$ python3.9 -m pip install -t python/lib/python3.9/site-packages selenium==4.5.0
$ cd selenium
$ zip -r python.zip python/


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

&lt;/div&gt;

&lt;p&gt;Name: selenium&lt;br&gt;
Description: Selenium layer&lt;br&gt;
Upload zip file created: python.zip&lt;br&gt;
Compatible runtimes: Python 3.9&lt;/p&gt;

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

$ mkdir -p chromedriver
$ cd chromedriver
$ curl -SL https://chromedriver.storage.googleapis.com/107.0.5304.62/chromedriver_linux64.zip &amp;gt; chromedriver.zip
$ unzip chromedriver.zip
$ rm chromedriver.zip


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

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

$ curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-57/stable-headless-chromium-amazonlinux-2.zip &amp;gt; headless-chromium.zip
$ unzip headless-chromium.zip
$ rm headless-chromium.zip


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

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;References for new releases:&lt;/strong&gt;&lt;br&gt;
chromedriver release&lt;br&gt;
&lt;a href="https://chromedriver.chromium.org/downloads" rel="noopener noreferrer"&gt;https://chromedriver.chromium.org/downloads&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;serverless-chrome release&lt;br&gt;
&lt;a href="https://github.com/adieuadieu/serverless-chrome/releases" rel="noopener noreferrer"&gt;https://github.com/adieuadieu/serverless-chrome/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Checkout Achim's comment on how he used 3.9 using dockerimage&lt;br&gt;
&lt;a href="https://dev.to/achimgrolimund/comment/22d99"&gt;https://dev.to/achimgrolimund/comment/22d99&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/jaira-mae-encio-929a68176/" rel="noopener noreferrer"&gt;Jaira Encio Linkedin&lt;/a&gt;&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>lambda</category>
      <category>selenium</category>
    </item>
  </channel>
</rss>
