DEV Community

Cover image for Automatic Deployment .NET Web API to AWS Elastic Beanstalk using GitHub Action

Automatic Deployment .NET Web API to AWS Elastic Beanstalk using GitHub Action

Hello everyone!

I want to share how to automatically deploy .NET Web API to AWS Elastic Beanstalk. We will use GitHub Action as a deployment tool.

Please take a look at my strategy for the deployment process.

  1. Publish the .NET Application
  2. Zip the published .NET Application
  3. Set up the EB (Elastic Beanstalk) CLI
  4. Deploy with eb deploy --staged

Infrastructure Provisioning

Thanks to SAGAR/SHANKY for providing a great tutorial to provision AWS Elastic Beanstalk using Terraform. Please take a look into at their article. If you are curious my adoption, please take a look here.

If you are unsure how to use the Terraform, no worries. I would like to explain Terraform and AWS Elastic Beanstalk in the next article. You may provision AWS Elastic Beanstalk manually.

Setting up GitHub Action

As mentioned at the beginning of my strategy, you may need to find these detailed steps of the Pipeline. You may need to check in the repository.



name: Deploy .NET
on:
  push:
    branches:
    - main
jobs:
  build_deploy:
    name: Build & Deploy
    runs-on: ubuntu-latest
    steps:
    - name: Checkout source code
      uses: actions/checkout@v2
    - uses: actions/setup-dotnet@v3
      with:
        dotnet-version: '6.0.x'
    - name: Publish
      run: dotnet publish WebApi -o site
    - name: Generate deployment package
      run: cd site; zip -r ../deploy.zip . -x '*.git*'; cd ..
    - name: Upload .NET to artifact
      uses: actions/upload-artifact@v3
      with:
        name: dotnet-zip
        path: deploy.zip
    - name: Setup EB CLI
      run: |
        python --version
        pip --version
        pip install awsebcli --upgrade --user
        eb --version
    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v2 # More information on this action can be found below in the 'AWS Credentials' section
      with:
        role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
        role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }}
        aws-region: 'ap-southeast-1'
    - name: Deploy to EB
      run: eb deploy dotnet-env-dev --staged


Enter fullscreen mode Exit fullscreen mode

Additionally, I added a step of uploading to the artifact to archive the published result.


Room of improvement:

  • Using multiple stages/jobs
  • Setting tools using Docker container, provide the tools of Elastic Beanstalk CLI using Docker, and set that as the action.

References & Artifacts

Repository

GitHub logo bervProject / tf-beanstalk-dotnet-6

Terraform Beanstalk .NET 6

tf-beanstalk-dotnet-6

Terraform Beanstalk .NET 6

Adapt from here

Support Platform

Platforms

License

MIT






Deployed Version

Deployed Version

Thank you

Thank you for reading my short article. Feel free to give feedback in the comment section. Have a great day!

Thank you GIF

Top comments (3)

Collapse
 
onlinemsr profile image
Raja MSR

This is a very informative and useful post. I appreciate how you explained the steps to deploy a .NET Web API to AWS Elastic Beanstalk using GitHub Action. Thank you for sharing your knowledge and experience with the community.

When deploying code using GitHub Actions, where node details will be maintained?

Collapse
 
berviantoleo profile image
Bervianto Leo Pratama

Currently, I'm using a method similar to uploading the source code files in the AWS Console. The deployment process from the source code to the target (for example, EC2) will be handled by AWS Elastic Beanstalk.

The node details could be maintained by AWS Elastic Beanstalk.

CMIIW (Correct Me If I'm Wrong).

Collapse
 
onlinemsr profile image
Raja MSR

Thank you!

I will explore further on this.