slogan3

Ontwerp een GitHub Actions Workflow voor Automatische Resource Scaling

description

Met deze prompt kan de gebruiker een geavanceerde GitHub Actions workflow ontwerpen die automatisch resources schaalt op basis van de behoeften van de CI/CD pipeline, waardoor de prestaties verbeteren en kosten efficiënter worden beheerd. Dit lost handmatige schaalproblemen op en biedt flexibiliteit voor verschillende omgevingen.

prompt

Help me een GitHub Actions workflow te ontwerpen die automatische scaling van resources ondersteunt tijdens CI/CD-processen. Projecttype: <voer je projecttype in, bijvoorbeeld Node.js, Python>. Schaalstrategie: <beschrijf de gewen ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een GitHub Actions workflow die automatische horizontale schaalvergroting ondersteunt op basis van CPU-belasting in AWS voor een Node.js-project. Deze workflow controleert de CPU-belasting en past automatisch het aantal EC2-instances aan via AWS API’s (bijvoorbeeld met behulp van AWS CLI of SDK). **Belangrijk:** Zorg dat je AWS credentials hebt geconfigureerd als secrets in je repository (bijvoorbeeld `AWS_ACCESS_KEY_ID` en `AWS_SECRET_ACCESS_KEY`) en dat je de juiste rechten hebt om EC2-instances te beheren. --- ```yaml name: CI met Auto-Scaling on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Installeer dependencies run: npm install - name: Installeer AWS CLI run: | curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install - name: Configureer AWS credentials env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_DEFAULT_REGION: us-east-1 # Pas dit aan naar je regio run: | aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY aws configure set default.region $AWS_DEFAULT_REGION - name: Meet CPU-belasting id: cpu_load run: | # Gebruik bijvoorbeeld 'mpstat' of 'top' om de CPU-belasting te meten # Hier een voorbeeld met top: CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}') echo "cpu_load=$CPU_USAGE" >> $GITHUB_OUTPUT - name: Bepaal schaalverandering id: scale_decision run: | CPU_THRESHOLD=70 # Lees de CPU-belasting cpu_load=${{ steps.cpu_load.outputs.cpu_load }} echo "Huidige CPU-belasting: $cpu_load%" # Bepaal het aantal instances DESIRED_CAPACITY=1 # standaard if (( $(echo "$cpu_load > $CPU_THRESHOLD" | bc -l) )); then # verhoog capaciteit DESIRED_CAPACITY=3 elif (( $(echo "$cpu_load < 30" | bc -l) )); then # verlaag capaciteit DESIRED_CAPACITY=1 fi echo "desired_capacity=$DESIRED_CAPACITY" >> $GITHUB_OUTPUT - name: Pas autoscaling aan env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} run: | # Voorbeeld: aanpassen van Auto Scaling Group (ASG) AUTO_SCALING_GROUP_NAME="jouw-asg-naam" desired_capacity=${{ steps.scale_decision.outputs.desired_capacity }} aws autoscaling update-auto-scaling-group \ --auto-scaling-group-name $AUTO_SCALING_GROUP_NAME \ --desired-capacity $desired_capacity echo "Schaal ingesteld op $desired_capacity instances." ``` --- **Uitleg:** - De workflow wordt geactiveerd bij iedere push naar `main`. - Het meet de CPU-belasting op de runner (in dit geval de GitHub-host OS – niet ideaal voor productie, maar illustratief). - Gebaseerd op de CPU-belasting wordt het gewenste aantal instances bepaald. - Daarna wordt de Auto Scaling Group (ASG) in AWS aangepast om het aantal instances te verhogen of verlagen. **Aanpassingen benodigd:** - Vervang `jouw-asg-naam` door de daadwerkelijke naam van je Auto Scaling Group. - Pas de regio aan in de AWS-configuratie. - Overweeg het gebruik van een meer betrouwbare manier om CPU-belasting te meten op je productie-omgeving. - Overweeg het toevoegen van wacht- of interval-logica voor meer gecontroleerd schalen. **Tip:** Voor een robuustere aanpak kun je een aparte service of Lambda gebruiken die periodiek de CPU-belasting meet en de ASG aanpast, in plaats van dit direct in CI/CD te doen.
provider: deepseek
model: deepseek-chat
Hier is een uitgebreide GitHub Actions workflow met automatische horizontale schaling op basis van CPU-belasting voor je Node.js project op AWS: ```yaml name: CI/CD met Auto-scaling on: [push] env: AWS_REGION: 'eu-west-1' ECS_CLUSTER: 'nodejs-cluster' ECS_SERVICE: 'nodejs-service' CPU_THRESHOLD: '70' jobs: build-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install dependencies run: npm install - name: Run tests run: npm test - name: Build application run: npm run build - 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 }} deploy-and-scale: needs: build-and-test runs-on: ubuntu-latest steps: - name: Checkout code 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: Build and push Docker image run: | docker build -t ${{ secrets.AWS_ECR_REPOSITORY }}:latest . aws ecr get-login-password --region ${{ env.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com docker push ${{ secrets.AWS_ECR_REPOSITORY }}:latest - name: Deploy to ECS run: | aws ecs update-service \ --cluster ${{ env.ECS_CLUSTER }} \ --service ${{ env.ECS_SERVICE }} \ --force-new-deployment - name: Configure Auto Scaling run: | # Configureer CloudWatch alarms voor CPU monitoring aws cloudwatch put-metric-alarm \ --alarm-name "HighCPUUtilization-${{ env.ECS_SERVICE }}" \ --alarm-description "Alarm bij hoge CPU belasting" \ --metric-name CPUUtilization \ --namespace AWS/ECS \ --statistic Average \ --period 300 \ --threshold ${{ env.CPU_THRESHOLD }} \ --comparison-operator GreaterThanThreshold \ --evaluation-periods 2 \ --alarm-actions ${{ secrets.AWS_SCALING_POLICY_ARN }} \ --dimensions Name=ClusterName,Value=${{ env.ECS_CLUSTER }} Name=ServiceName,Value=${{ env.ECS_SERVICE }} # Stel Application Auto Scaling in aws application-autoscaling register-scalable-target \ --service-namespace ecs \ --scalable-dimension ecs:service:DesiredCount \ --resource-id service/${{ env.ECS_CLUSTER }}/${{ env.ECS_SERVICE }} \ --min-capacity 1 \ --max-capacity 10 aws application-autoscaling put-scaling-policy \ --service-namespace ecs \ --scalable-dimension ecs:service:DesiredCount \ --resource-id service/${{ env.ECS_CLUSTER }}/${{ env.ECS_SERVICE }} \ --policy-name cpu-based-scaling \ --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration file://scaling-policy.json monitoring: needs: deploy-and-scale runs-on: ubuntu-latest steps: - 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: Monitor deployment status run: | echo "Monitoring deployment status..." aws ecs wait services-stable \ --cluster ${{ env.ECS_CLUSTER }} \ --services ${{ env.ECS_SERVICE }} echo "Deployment voltooid en service is stabiel" ``` **Benodigde bestanden:** 1. **Dockerfile** (in je project root): ```dockerfile FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 3000 CMD ["npm", "start"] ``` 2. **scaling-policy.json**: ```json { "TargetValue": 70.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "ECSServiceAverageCPUUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 300 } ``` **Vereiste GitHub Secrets:** - `AWS_ACCESS_KEY_ID` - `AWS_SECRET_ACCESS_KEY` - `AWS_ACCOUNT_ID` - `AWS_ECR_REPOSITORY` - `AWS_SCALING_POLICY_ARN` **AWS Infrastructure vereisten:** - ECS Cluster met Fargate - ECR Repository - Application Auto Scaling geconfigureerd - IAM Rollen met juiste permissions Deze workflow bouwt je applicatie, voert tests uit, deployt naar AWS ECS en configureert automatische horizontale schaling gebaseerd op CPU-utilisatie met een drempelwaarde van 70%.