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 Action
button. -
Click on the
{...} Edit JSON
button. -
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 Application
action. -
Enter the required information.
-
Click on
Execute
. -
Wait for deployment completion π