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.
- Publish the .NET Application
- Zip the published .NET Application
- Set up the EB (Elastic Beanstalk) CLI
- 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
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
- How to Launch AWS Elastic beanstalk using Terraform thanks to SAGAR/SHANKY.
Repository
bervProject / tf-beanstalk-dotnet-6
Terraform Beanstalk .NET 6
Deployed Version
Thank you
Thank you for reading my short article. Feel free to give feedback in the comment section. Have a great day!
Top comments (3)
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?
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).
Thank you!
I will explore further on this.