# AWS Proton

*The tool Infra teams are dreaming about every two nights*

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/3200/1*4CmL6NHFJyEg6s82jeEFpw.png" width="1600" height="900" srcSet="https://miro.medium.com/max/552/1*4CmL6NHFJyEg6s82jeEFpw.png 276w, https://miro.medium.com/max/1104/1*4CmL6NHFJyEg6s82jeEFpw.png 552w, https://miro.medium.com/max/1280/1*4CmL6NHFJyEg6s82jeEFpw.png 640w, https://miro.medium.com/max/1456/1*4CmL6NHFJyEg6s82jeEFpw.png 728w, https://miro.medium.com/max/1632/1*4CmL6NHFJyEg6s82jeEFpw.png 816w, https://miro.medium.com/max/1808/1*4CmL6NHFJyEg6s82jeEFpw.png 904w, https://miro.medium.com/max/1984/1*4CmL6NHFJyEg6s82jeEFpw.png 992w, https://miro.medium.com/max/2000/1*4CmL6NHFJyEg6s82jeEFpw.png 1000w" sizes="1000px"/></noscript>

AWS recently announced a new service: AWS Proton.

As I love to have a look at the new features provided by the AWS re:Invent, I wrote this article summarizing my findings.

AWS Proton is a tool to help with infrastructure automation and code deployments.

But it is not another CodePipeline because the tool is more **designed for organizational purposes**.

This service makes it easy for infrastructure teams to centralize and standardize classic infrastructure patterns so that they can be available for developers to deploy their code.

And <span id="rmm"><span id="rmm">t</span></span>his why it should be seen as **an organizational tool**.

It support the technical design of your organization by providing a way to explicitly expose it to all teams building applications and products on top of this layer.

If you know AWS CI/CD environments, you will be happy to hear that Proton is for instance integrated with Code Pipeline and Cloudwatch.

Let’s see how we can quickly use AWS Proton to set up a lambda serverless environment.

## Connect to Github

*   Let’s go to the [Proton page](https://console.aws.amazon.com/proton/home)
*   On the menu on the right, we click on Source connection and create a GitHub connection.

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/1100/1*HD6jYeb-mDodzADJv7FhTA.png" width="550" height="148" srcSet="https://miro.medium.com/max/552/1*HD6jYeb-mDodzADJv7FhTA.png 276w, https://miro.medium.com/max/1100/1*HD6jYeb-mDodzADJv7FhTA.png 550w" sizes="550px"/></noscript>

## Set up for Proton

Here we will just create (or select) a role for Proton to use to deploy Cloudformation stacks.

*   We go back to the [AWS Proton page](https://console.aws.amazon.com/proton/home) and click on Account roles

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/900/1*9Y2u0xYiam21V0WgUeABJw.png" width="450" height="212" srcSet="https://miro.medium.com/max/552/1*9Y2u0xYiam21V0WgUeABJw.png 276w, https://miro.medium.com/max/900/1*9Y2u0xYiam21V0WgUeABJw.png 450w" sizes="450px"/></noscript>

*   Let’s create/update the role we will use to enable resource creation by Proton

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/4072/1*ODr1Z8xcXCFWhPYwTP9owQ.png" width="2036" height="1540" srcSet="https://miro.medium.com/max/552/1*ODr1Z8xcXCFWhPYwTP9owQ.png 276w, https://miro.medium.com/max/1104/1*ODr1Z8xcXCFWhPYwTP9owQ.png 552w, https://miro.medium.com/max/1280/1*ODr1Z8xcXCFWhPYwTP9owQ.png 640w, https://miro.medium.com/max/1400/1*ODr1Z8xcXCFWhPYwTP9owQ.png 700w" sizes="700px"/></noscript>

## Create proton environment template

*   Let’s navigate to [AWS Proton](https://console.aws.amazon.com/proton/home) page and click on “Get started”

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/5756/1*_skMWPjINHCeQ7bY9NfaWQ.png" width="2878" height="1408" srcSet="https://miro.medium.com/max/552/1*_skMWPjINHCeQ7bY9NfaWQ.png 276w, https://miro.medium.com/max/1104/1*_skMWPjINHCeQ7bY9NfaWQ.png 552w, https://miro.medium.com/max/1280/1*_skMWPjINHCeQ7bY9NfaWQ.png 640w, https://miro.medium.com/max/1400/1*_skMWPjINHCeQ7bY9NfaWQ.png 700w" sizes="700px"/></noscript>

*   We click on create environment template

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/4100/1*y_T7L-lka9WvAbo58lyQfA.png" width="2050" height="1498" srcSet="https://miro.medium.com/max/552/1*y_T7L-lka9WvAbo58lyQfA.png 276w, https://miro.medium.com/max/1104/1*y_T7L-lka9WvAbo58lyQfA.png 552w, https://miro.medium.com/max/1280/1*y_T7L-lka9WvAbo58lyQfA.png 640w, https://miro.medium.com/max/1400/1*y_T7L-lka9WvAbo58lyQfA.png 700w" sizes="700px"/></noscript>

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/5580/1*C2sAS9PzsSm0U1De5x0AWw.png" width="2790" height="1478" srcSet="https://miro.medium.com/max/552/1*C2sAS9PzsSm0U1De5x0AWw.png 276w, https://miro.medium.com/max/1104/1*C2sAS9PzsSm0U1De5x0AWw.png 552w, https://miro.medium.com/max/1280/1*C2sAS9PzsSm0U1De5x0AWw.png 640w, https://miro.medium.com/max/1400/1*C2sAS9PzsSm0U1De5x0AWw.png 700w" sizes="700px"/></noscript>

*   Here, we can choose to provide our own template but for this example, we will use the AWS lambda one.

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/4060/1*owSoQzN7lu7Xzpa9xEIxvw.png" width="2030" height="1508" srcSet="https://miro.medium.com/max/552/1*owSoQzN7lu7Xzpa9xEIxvw.png 276w, https://miro.medium.com/max/1104/1*owSoQzN7lu7Xzpa9xEIxvw.png 552w, https://miro.medium.com/max/1280/1*owSoQzN7lu7Xzpa9xEIxvw.png 640w, https://miro.medium.com/max/1400/1*owSoQzN7lu7Xzpa9xEIxvw.png 700w" sizes="700px"/></noscript>

*   Let’s fill all the information and hit create

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/5756/1*GdWwIRtXmXhG4x7N3fMTXA.png" width="2878" height="1504" srcSet="https://miro.medium.com/max/552/1*GdWwIRtXmXhG4x7N3fMTXA.png 276w, https://miro.medium.com/max/1104/1*GdWwIRtXmXhG4x7N3fMTXA.png 552w, https://miro.medium.com/max/1280/1*GdWwIRtXmXhG4x7N3fMTXA.png 640w, https://miro.medium.com/max/1400/1*GdWwIRtXmXhG4x7N3fMTXA.png 700w" sizes="700px"/></noscript>

That’s it, our environment template is created.

## Create and deploy an environment

Now, let’s create an environment from our environment template.

*   On [AWS Proton page](https://console.aws.amazon.com/proton/home), we are going to click on “Environments” and “Create environment”
*   We choose our previously created environment template

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/5740/1*6pW0nFOaxz-luhzZsVbP5A.png" width="2870" height="1270" srcSet="https://miro.medium.com/max/552/1*6pW0nFOaxz-luhzZsVbP5A.png 276w, https://miro.medium.com/max/1104/1*6pW0nFOaxz-luhzZsVbP5A.png 552w, https://miro.medium.com/max/1280/1*6pW0nFOaxz-luhzZsVbP5A.png 640w, https://miro.medium.com/max/1400/1*6pW0nFOaxz-luhzZsVbP5A.png 700w" sizes="700px"/></noscript>

*   Let’s fill the information as we want and provide the role we created at the beginning of the process

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/5692/1*jBzifMsgx0KRcSPYuOyk5g.png" width="2846" height="1460" srcSet="https://miro.medium.com/max/552/1*jBzifMsgx0KRcSPYuOyk5g.png 276w, https://miro.medium.com/max/1104/1*jBzifMsgx0KRcSPYuOyk5g.png 552w, https://miro.medium.com/max/1280/1*jBzifMsgx0KRcSPYuOyk5g.png 640w, https://miro.medium.com/max/1400/1*jBzifMsgx0KRcSPYuOyk5g.png 700w" sizes="700px"/></noscript>

*   Let’s fill the settings configured in the template

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/5728/1*1CmaK9-axmJAzMY--D7mfA.png" width="2864" height="796" srcSet="https://miro.medium.com/max/552/1*1CmaK9-axmJAzMY--D7mfA.png 276w, https://miro.medium.com/max/1104/1*1CmaK9-axmJAzMY--D7mfA.png 552w, https://miro.medium.com/max/1280/1*1CmaK9-axmJAzMY--D7mfA.png 640w, https://miro.medium.com/max/1400/1*1CmaK9-axmJAzMY--D7mfA.png 700w" sizes="700px"/></noscript>

*   We hit the “Create” button and wait for the creation to complete

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/5268/1*jCHxK-wHQkpFEReQNJ6I9A.png" width="2634" height="200" srcSet="https://miro.medium.com/max/552/1*jCHxK-wHQkpFEReQNJ6I9A.png 276w, https://miro.medium.com/max/1104/1*jCHxK-wHQkpFEReQNJ6I9A.png 552w, https://miro.medium.com/max/1280/1*jCHxK-wHQkpFEReQNJ6I9A.png 640w, https://miro.medium.com/max/1400/1*jCHxK-wHQkpFEReQNJ6I9A.png 700w" sizes="700px"/></noscript>

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/4112/1*2Yd75qit8wfioE8ja-foJg.png" width="2056" height="904" srcSet="https://miro.medium.com/max/552/1*2Yd75qit8wfioE8ja-foJg.png 276w, https://miro.medium.com/max/1104/1*2Yd75qit8wfioE8ja-foJg.png 552w, https://miro.medium.com/max/1280/1*2Yd75qit8wfioE8ja-foJg.png 640w, https://miro.medium.com/max/1400/1*2Yd75qit8wfioE8ja-foJg.png 700w" sizes="700px"/></noscript>

We will see a new CloudFormation stack provisioning a DynamoDB table.

## Create a service template

Let’s do the same process for the service part

*   Let’s go to Proton page and click “Service templates” and “Create service template”

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/5736/1*xLlx50EuNe006iPTqGpBeQ.png" width="2868" height="916" srcSet="https://miro.medium.com/max/552/1*xLlx50EuNe006iPTqGpBeQ.png 276w, https://miro.medium.com/max/1104/1*xLlx50EuNe006iPTqGpBeQ.png 552w, https://miro.medium.com/max/1280/1*xLlx50EuNe006iPTqGpBeQ.png 640w, https://miro.medium.com/max/1400/1*xLlx50EuNe006iPTqGpBeQ.png 700w" sizes="700px"/></noscript>

*   As for the environment, we will use the sample lambda template

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/4040/1*bCDC42p7c__J_t-Bzn88Pg.png" width="2020" height="1574" srcSet="https://miro.medium.com/max/552/1*bCDC42p7c__J_t-Bzn88Pg.png 276w, https://miro.medium.com/max/1104/1*bCDC42p7c__J_t-Bzn88Pg.png 552w, https://miro.medium.com/max/1280/1*bCDC42p7c__J_t-Bzn88Pg.png 640w, https://miro.medium.com/max/1400/1*bCDC42p7c__J_t-Bzn88Pg.png 700w" sizes="700px"/></noscript>

*   Let’s fill the information and choose the environment template we created in the previous steps

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/3820/1*b9YMdYea1eotjgw-FzBYUQ.png" width="1910" height="1490" srcSet="https://miro.medium.com/max/552/1*b9YMdYea1eotjgw-FzBYUQ.png 276w, https://miro.medium.com/max/1104/1*b9YMdYea1eotjgw-FzBYUQ.png 552w, https://miro.medium.com/max/1280/1*b9YMdYea1eotjgw-FzBYUQ.png 640w, https://miro.medium.com/max/1400/1*b9YMdYea1eotjgw-FzBYUQ.png 700w" sizes="700px"/></noscript>

*   And we click “Create”

Here we are with our service template

## Create the service

Now we are going to create a service and its service instance from the service template.

*   On the [AWS Proton page](https://console.aws.amazon.com/proton/home), we click on “Services” and “Create service”
*   We choose our template

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/4376/1*TElVjyYsSP1wPiG1I9h_SA.png" width="2188" height="934" srcSet="https://miro.medium.com/max/552/1*TElVjyYsSP1wPiG1I9h_SA.png 276w, https://miro.medium.com/max/1104/1*TElVjyYsSP1wPiG1I9h_SA.png 552w, https://miro.medium.com/max/1280/1*TElVjyYsSP1wPiG1I9h_SA.png 640w, https://miro.medium.com/max/1400/1*TElVjyYsSP1wPiG1I9h_SA.png 700w" sizes="700px"/></noscript>

*   And fill the information with the branch name and the GitHub repository

_You can find some code sample in_ [_this repository_](https://github.com/aws-samples/aws-proton-sample-templates)_._

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/5748/1*uKeuheeWAW7mPsL2WnZEdQ.png" width="2874" height="1440" srcSet="https://miro.medium.com/max/552/1*uKeuheeWAW7mPsL2WnZEdQ.png 276w, https://miro.medium.com/max/1104/1*uKeuheeWAW7mPsL2WnZEdQ.png 552w, https://miro.medium.com/max/1280/1*uKeuheeWAW7mPsL2WnZEdQ.png 640w, https://miro.medium.com/max/1400/1*uKeuheeWAW7mPsL2WnZEdQ.png 700w" sizes="700px"/></noscript>

<noscript><img alt="Image for post" class="fd eq em iw w" src="https://miro.medium.com/max/5140/1*GZDE2GDnl-Tv1FQIvZxriw.png" width="2570" height="1288" srcSet="https://miro.medium.com/max/552/1*GZDE2GDnl-Tv1FQIvZxriw.png 276w, https://miro.medium.com/max/1104/1*GZDE2GDnl-Tv1FQIvZxriw.png 552w, https://miro.medium.com/max/1280/1*GZDE2GDnl-Tv1FQIvZxriw.png 640w, https://miro.medium.com/max/1400/1*GZDE2GDnl-Tv1FQIvZxriw.png 700w" sizes="700px"/></noscript>

When the deployment is completed, we are able to reach our service using the provided url.

We can use this newly created Proton structure for our future deployments.

## Conclusion

We were able in a few minutes to set up an entire Proton process. And we have just touched how powerful it can be on a scaling and governance perspective.

Here are some AWS Proton major benefits:

*   Developers can deploy safely their applications without having to manage the deployment infrastructure and CI/CD
*   It works with containers and serverless stacks
*   Proton provides **consistent architecture across projects**
*   Easy **infrastructure-as-code** organization by design
*   **No additional charges**, you pay only the resources created by your templates

This article was just an introduction on the topic. I encourage you to experiment the tool and create your own templates to match your business use cases.

For an enlightened point of view of AWS Proton, I recommand the excellent article of [Forrest Brazeal](https://medium.com/u/b8d1e8a0e0d8?source=post_page-----1130c438450f--------------------------------) for [A Cloud Guru](https://medium.com/u/c73bfd51b440?source=post_page-----1130c438450f--------------------------------):

%[https://acloudguru.com/blog/engineering/aws-proton-is-conways-law-as-a-service]



**AWS is providing us with a new kind of tool that can help organizations on their daily struggle about quick response applications, innovation and process optimization. AWS Proton is still in its baby phase and will certainly be improved but this intriguing tool is already able to change the way we think about environment and pipeline management.**

_Feel free to reach me on_ [_Twitter (@FlolightC)_](https://twitter.com/FlolightC) _to tell me about your Proton use case or to ask me questions ! I’m always happy to discuss with you !_
