Deploy a service using AWS CodeDeploy
This guide walks you through implementing a self-service action in Port that triggers an AWS CodeDeploy deployment targeting an EC2 instance. This functionality enables automated deployments directly from your developer portal.
Prerequisitesβ
- Complete the onboarding process.
- Access to an AWS account with permissions to manage S3, CodeDeploy and EC2.
- An existing AWS CodeDeploy application and deployment group.
- A GitHub repository containing your application code.
Implementationβ
We will use a practical example where a developer deploys a website to an EC2 instance using AWS CodeDeploy. The websiteβs source code is stored in a GitHub repository. As part of the deployment process, we will use a GitHub Actions workflow to:
- 
Package the website code into a ZIP file. 
- 
Upload the ZIP file to an S3 bucket. 
- 
Trigger an AWS CodeDeploy deployment that pulls the bundle from S3 and deploys it to an EC2 instance. 
To implement this use-case using a GitHub workflow, follow these steps:
Add GitHub secrets
In your GitHub repository, go to Settings > Secrets and add the following secrets:
- AWS_ACCESS_KEY_ID- AWS IAM user's access key.
- AWS_SECRET_ACCESS_KEY- AWS IAM user's secret access key.
- AWS_REGION_NAME- AWS region (e.g.,- us-east-1).
- S3_BUCKET_NAME- Name of the S3 bucket used by CodeDeploy.
Add GitHub workflowβ
Create the file .github/workflows/deploy-website.yaml in the .github/workflows folder of your repository.
We recommend creating a dedicated repository for the workflows that are used by Port actions.
GitHub Workflow (Click to expand)
name: Deploy Website with CodeDeploy
on:
  workflow_dispatch:
    inputs:
      applicationName:
        description: 'AWS CodeDeploy application name'
        required: true
        type: string
      deploymentGroup:
        description: 'AWS CodeDeploy deployment group name'
        required: true
        type: string
jobs:
  deploy:
    runs-on: ubuntu-latest
    env:
      AWS_REGION: ${{ secrets.AWS_REGION_NAME }}
      S3_BUCKET: ${{ secrets.S3_BUCKET_NAME }}
    steps:
      - name: Checkout source
        uses: actions/checkout@v4
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ env.AWS_REGION }}
      - name: Zip source code
        run: |
          zip -r website.zip index.html scripts appspec.yml
      - name: Upload to S3
        run: |
          TIMESTAMP=$(date +%s)
          S3_KEY=website-$TIMESTAMP.zip
          aws s3 cp website.zip s3://$S3_BUCKET/$S3_KEY
          echo "S3_KEY=$S3_KEY" >> $GITHUB_ENV
      - name: Deploy via CodeDeploy
        run: |
          aws deploy create-deployment \
            --application-name "${{ github.event.inputs.applicationName }}" \
            --deployment-group-name "${{ github.event.inputs.deploymentGroup }}" \
            --s3-location bucket=$S3_BUCKET,key=$S3_KEY,bundleType=zip \
            --file-exists-behavior OVERWRITE \
            --region $AWS_REGION
Set up self-service actionβ
We will then create a self-service action in Port to handle triggering AWS CodeDeploy:
- 
Head to the self-service page of your portal. 
- 
Click on the + New Actionbutton.
- 
Click on the {...} Edit JSONbutton.
- 
Copy and paste the following JSON configuration into the editor. Trigger AWS CodeDeploy (Click to expand)Modification RequiredMake sure to replace <GITHUB_ORG>and<GITHUB_REPO>with your GitHub organization and repository names respectively.{
 "identifier": "trigger_aws_code_deploy_app",
 "title": "Trigger AWS CodeDeploy Application",
 "icon": "AWS",
 "description": "A self service action to deploy a website to EC2 via AWS CodeDeploy",
 "trigger": {
 "type": "self-service",
 "operation": "CREATE",
 "userInputs": {
 "properties": {
 "applicationName": {
 "type": "string",
 "title": "Application Name",
 "description": "CodeDeploy application name"
 },
 "deploymentGroup": {
 "type": "string",
 "title": "CodeDeploy deployment group name"
 }
 },
 "required": [
 "applicationName",
 "deploymentGroup"
 ],
 "order": [
 "applicationName",
 "deploymentGroup"
 ]
 }
 },
 "invocationMethod": {
 "type": "GITHUB",
 "org": "<YOUR_GITHUB_ORG>",
 "repo": "<YOUR_GITHUB_REPO>",
 "workflow": "deploy-website.yaml",
 "workflowInputs": {
 "{{ spreadValue() }}": "{{ .inputs }}"
 },
 "reportWorkflowStatus": true
 },
 "requiredApproval": false
 }
- 
Click Save.
Now you should see the Trigger AWS CodeDeploy Application action in the self-service page. π
Let's test it!β
- 
Head to the self-service page of your portal. 
- 
Choose the Trigger AWS CodeDeploy Applicationaction.
- 
Enter the required information. 
- 
Click on Execute.
- 
Wait for deployment completion π