Skip to main content

Check out Port for yourselfย 

Manage your EKS clusters

This guide demonstrates how to bring your AWS EKS management experience into Port. You will learn how to:

  • Ingest EKS cluster data into Port's software catalog using Port's AWS integration.
  • Set up self-service actions to manage EKS clusters (add tags and delete clusters).

Common use casesโ€‹

  • Monitor the status and configuration of all EKS clusters across accounts from a single view.
  • Manage cluster lifecycle operations through self-service actions.

Prerequisitesโ€‹

This guide assumes the following:

Dedicated Workflows Repository

We recommend creating a dedicated repository for the workflows that are used by Port actions.

Set up data modelโ€‹

When installing the AWS integration in Port, the AWS Account blueprint is created by default.
However, the EKS Cluster blueprint is not created automatically so we will need to create it manually.

Create the EKS cluster blueprintโ€‹

  1. Go to the Builder page of your portal.

  2. Click on + Blueprint.

  3. Click on the {...} button in the top right corner, and choose Edit JSON.

  4. Add this JSON schema:

    AWS EKS Cluster blueprint (Click to expand)
    {
    "identifier": "eks_cluster",
    "description": "This blueprint represents an AWS EKS cluster",
    "title": "EKS Cluster",
    "icon": "AWS",
    "schema": {
    "properties": {
    "version": {
    "type": "string",
    "title": "Version"
    },
    "roleArn": {
    "icon": "DefaultProperty",
    "type": "string",
    "title": "Role Arn"
    },
    "endpoint": {
    "type": "string",
    "title": "Endpoint",
    "format": "url"
    },
    "tags": {
    "items": {
    "type": "object"
    },
    "type": "array",
    "title": "Tags"
    },
    "arn": {
    "type": "string",
    "title": "Arn"
    }
    },
    "required": []
    },
    "mirrorProperties": {},
    "calculationProperties": {},
    "aggregationProperties": {},
    "relations": {
    "account": {
    "title": "Account",
    "target": "awsAccount",
    "required": false,
    "many": false
    }
    }
    }
  5. Click Save to create the blueprint.

Update the integration mappingโ€‹

  1. Go to the Data Sources page of your portal.

  2. Select the AWS integration.

  3. Add the following YAML block into the editor to ingest EKS clusters from your AWS account:

    AWS integration configuration (Click to expand)
    deleteDependentEntities: true
    createMissingRelatedEntities: true
    enableMergeEntity: true
    resources:
    - kind: AWS::Organizations::Account
    selector:
    query: 'true'
    port:
    entity:
    mappings:
    identifier: .Id
    title: .Name
    blueprint: '"awsAccount"'
    properties:
    arn: .Arn
    email: .Email
    status: .Status
    joined_method: .JoinedMethod
    joined_timestamp: .JoinedTimestamp | sub(" "; "T")
    - kind: AWS::EKS::Cluster
    selector:
    query: 'true'
    useGetResourceAPI: true
    port:
    entity:
    mappings:
    identifier: .Identifier
    title: .Properties.Name
    blueprint: '"eks_cluster"'
    properties:
    tags: .Properties.Tags
    roleArn: .Properties.RoleArn
    arn: .Properties.Arn
    version: .Properties.Version
    endpoint: .Properties.Endpoint
    relations:
    account: .__AccountId
  4. Click Save & Resync to apply the mapping.

Set up self-service actionsโ€‹

Now let us create self-service actions to manage your EKS clusters directly from Port using GitHub Actions. You will implement workflows to:

  1. Add tags to an EKS cluster.
  2. Delete an EKS cluster.

To implement these use-cases, follow the steps below:

Add GitHub secretsโ€‹

In your GitHub repository, go to Settings > Secrets and add the following secrets:

  • PORT_CLIENT_ID - Port Client ID learn more.
  • PORT_CLIENT_SECRET - Port Client Secret learn more.
  • AWS_ACCESS_KEY_ID - AWS IAM user's access key.
  • AWS_SECRET_ACCESS_KEY - AWS IAM user's secret access key.
  • AWS_REGION - AWS region (e.g., us-east-1).
Required permissions

The AWS IAM user must have the following permissions:

  • eks:TagResource - to add tags to EKS clusters
  • eks:DeleteCluster - to delete EKS clusters

Add tags to an EKS clusterโ€‹

Add GitHub workflow

Create the file .github/workflows/add-tags-to-eks.yaml in the .github/workflows folder of your repository.

Add tags to EKS GitHub workflow (Click to expand)
name: Add Tags to EKS Cluster

on:
workflow_dispatch:
inputs:
resource_tags:
required: true
description: 'Metadata that assists with categorization and organization.'
type: string
port_context:
required: true
description: 'Action and general context (blueprint, entity, run id, etc...)'
type: string

jobs:
tag-eks-cluster:
runs-on: ubuntu-latest
steps:
- name: Inform Port of workflow start
uses: port-labs/port-github-action@v1
with:
clientId: ${{ secrets.PORT_CLIENT_ID }}
clientSecret: ${{ secrets.PORT_CLIENT_SECRET }}
baseUrl: https://api.getport.io
operation: PATCH_RUN
runId: ${{fromJson(inputs.port_context).runId}}
logMessage: Configuring AWS credentials to add tags to EKS with domain ${{ fromJson(inputs.port_context).entity.title }}

- 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: ${{ secrets.AWS_REGION }}

- name: Add tags to EKS
run: aws eks tag-resource --resource-arn ${{ fromJson(inputs.port_context).entity.properties.arn }} --tags ${{ inputs.resource_tags }}

- name: Inform Port about EKS tag addition success
if: success()
uses: port-labs/port-github-action@v1
with:
clientId: ${{ secrets.PORT_CLIENT_ID }}
clientSecret: ${{ secrets.PORT_CLIENT_SECRET }}
baseUrl: https://api.getport.io
operation: PATCH_RUN
runId: ${{ fromJson(inputs.port_context).runId }}
status: 'SUCCESS'
logMessage: โœ… EKS resource with name ${{ fromJson(inputs.port_context).entity.title }} tagged successfully
summary: EKS tag addition completed successfully

- name: Inform Port about EKS tag addition failure
if: failure()
uses: port-labs/port-github-action@v1
with:
clientId: ${{ secrets.PORT_CLIENT_ID }}
clientSecret: ${{ secrets.PORT_CLIENT_SECRET }}
baseUrl: https://api.getport.io
operation: PATCH_RUN
runId: ${{ fromJson(inputs.port_context).runId }}
status: 'FAILURE'
logMessage: โŒ Failed to add tags to EKS with name ${{ fromJson(inputs.port_context).entity.title }}
summary: EKS tag addition failed

Create Port action

  1. Go to the Self-service page of your portal.

  2. Click on the + New Action button.

  3. Click on the {...} Edit JSON button.

  4. Copy and paste the following JSON configuration into the editor.

    Add tags to EKS action (Click to expand)
    Modification Required

    Make sure to replace <GITHUB_ORG> and <GITHUB_REPO> with your GitHub organization and repository names respectively.

    {
    "identifier": "add_tags_to_eks",
    "title": "Add Tags to Cluster",
    "icon": "AmazonEKS",
    "trigger": {
    "type": "self-service",
    "operation": "DAY-2",
    "userInputs": {
    "properties": {
    "resource_tags": {
    "type": "string",
    "title": "Resource Tags",
    "description": "The tag to add to the EKS resource following the pattern KeyName1=string,KeyName2=string",
    "default": "KeyName1=string,KeyName2=string"
    }
    },
    "required": [],
    "order": [
    "resource_tags"
    ]
    },
    "blueprintIdentifier": "eks_cluster"
    },
    "invocationMethod": {
    "type": "GITHUB",
    "org": "<GITHUB-ORG>",
    "repo": "<GITHUB-REPO>",
    "workflow": "add-tags-to-eks.yaml",
    "workflowInputs": {
    "{{ spreadValue() }}": "{{ .inputs }}",
    "port_context": {
    "runId": "{{ .run.id }}",
    "entity": "{{ .entity }}"
    }
    },
    "reportWorkflowStatus": true
    },
    "requiredApproval": false
    }
  5. Click Save.

Now you should see the Add Tags to EKS action in the self-service page. ๐ŸŽ‰

Delete an EKS clusterโ€‹

Add GitHub workflow

Create the file .github/workflows/delete-eks-cluster.yaml in the .github/workflows folder of your repository.

Delete EKS GitHub workflow (Click to expand)
name: Delete EKS Cluster

on:
workflow_dispatch:
inputs:
port_context:
required: true
description: 'Action and general context (blueprint, entity, run id, etc...)'
type: string

jobs:
delete-eks-cluster:
runs-on: ubuntu-latest
steps:
- name: Inform Port of workflow start
uses: port-labs/port-github-action@v1
with:
clientId: ${{ secrets.PORT_CLIENT_ID }}
clientSecret: ${{ secrets.PORT_CLIENT_SECRET }}
baseUrl: https://api.getport.io
operation: PATCH_RUN
runId: ${{fromJson(inputs.port_context).runId}}
logMessage: Configuring AWS credentials to delete EKS cluster with domain ${{ fromJson(inputs.port_context).entity.title }}

- 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: ${{ secrets.AWS_REGION }}

- name: Delete EKS cluster
run: aws eks delete-cluster --name ${{ fromJson(inputs.port_context).entity.title }}

- name: Inform Port about EKS cluster deletion success
if: success()
uses: port-labs/port-github-action@v1
with:
clientId: ${{ secrets.PORT_CLIENT_ID }}
clientSecret: ${{ secrets.PORT_CLIENT_SECRET }}
baseUrl: https://api.getport.io
operation: PATCH_RUN
runId: ${{ fromJson(inputs.port_context).runId }}
status: 'SUCCESS'
logMessage: โœ… EKS cluster with name ${{ fromJson(inputs.port_context).entity.title }} deleted successfully
summary: EKS cluster deletion completed successfully

- name: Inform Port about EKS cluster deletion failure
if: failure()
uses: port-labs/port-github-action@v1
with:
clientId: ${{ secrets.PORT_CLIENT_ID }}
clientSecret: ${{ secrets.PORT_CLIENT_SECRET }}
baseUrl: https://api.getport.io
operation: PATCH_RUN
runId: ${{ fromJson(inputs.port_context).runId }}
status: 'FAILURE'
logMessage: โŒ Failed to delete EKS cluster with name ${{ fromJson(inputs.port_context).entity.title }}
summary: EKS cluster deletion failed

Create Port action

  1. Go to the Self-service page of your portal.

  2. Click on the + New Action button.

  3. Click on the {...} Edit JSON button.

  4. Copy and paste the following JSON configuration into the editor.

    Delete EKS cluster action (Click to expand)
    Modification Required

    Make sure to replace <GITHUB_ORG> and <GITHUB_REPO> with your GitHub organization and repository names respectively.

    {
    "identifier": "delete_eks_cluster",
    "title": "Delete EKS Cluster",
    "icon": "AmazonEKS",
    "description": "Delete the Amazon EKS cluster control plane. If you have active services in your cluster that are associated with a load balancer, you must delete those services before deleting the cluster so that the load balancers are deleted properly.",
    "trigger": {
    "type": "self-service",
    "operation": "DELETE",
    "userInputs": {
    "properties": {},
    "required": [],
    "order": []
    },
    "blueprintIdentifier": "eks_cluster"
    },
    "invocationMethod": {
    "type": "GITHUB",
    "org": "<GITHUB-ORG>",
    "repo": "<GITHUB-REPO>",
    "workflow": "delete-eks-cluster.yaml",
    "workflowInputs": {
    "{{ spreadValue() }}": "{{ .inputs }}",
    "port_context": {
    "runId": "{{ .run.id }}",
    "blueprint": "{{ .action.blueprint }}",
    "entity": "{{ .entity }}"
    }
    },
    "reportWorkflowStatus": true
    },
    "requiredApproval": false
    }
  5. Click Save.

Now you should see the Delete EKS Cluster action in the self-service page. ๐ŸŽ‰