AWS CodeDeploy: Eine CI/CD-Pipeline für die Bereitstellung auf EC2 über GitHub einrichten
Manuelle Deployments sind mühsam, fehleranfällig und ineffizient. AWS CodeDeploy macht die Automatisierung von Deployments unkompliziert, steigert die Effizienz und minimiert Ausfallzeiten. In dieser Anleitung lernen Sie Schritt für Schritt, wie Sie eine robuste CI/CD-Pipeline einrichten, um Ihre Anwendungen direkt aus GitHub auf einer Amazon EC2-Instanz bereitzustellen.
Was Sie benötigen:
- AWS-Konto
- EC2-Instanz mit Amazon Linux
- GitHub-Repository mit Ihrer Anwendung
- AWS CLI auf Ihrem lokalen Rechner installiert
Schritt 1: Ihre EC2-Instanz vorbereiten
Verbinden Sie sich über SSH mit Ihrer EC2-Instanz:
ssh -i "your-key.pem" ec2-user@your-ec2-instance-public-ip
Installieren und starten Sie den CodeDeploy-Agent:
sudo yum update
sudo yum install ruby -y
sudo yum install wget -y
cd /home/ec2-user
wget https://aws-codedeploy-region.s3.region.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent status
Ersetzen Sie region durch Ihre AWS-Region, z. B. us-east-1.
Schritt 2: Eine IAM-Rolle für CodeDeploy erstellen
In der AWS-Konsole:
- Navigieren Sie zu IAM → Rollen → Rolle erstellen.
- Wählen Sie AWS-Service und dann CodeDeploy.
- Richtlinie anhängen: Wählen Sie AWSCodeDeployRole.
- Benennen Sie Ihre Rolle (z. B.
CodeDeployRole) und erstellen Sie sie.
Schritt 3: Die CodeDeploy-Anwendung einrichten
- Gehen Sie zu AWS CodeDeploy → Anwendungen → Anwendung erstellen.
- Geben Sie einen Anwendungsnamen ein.
- Wählen Sie die Compute-Plattform: EC2/On-premises.
Erstellen Sie eine Bereitstellungsgruppe:
- Name der Bereitstellungsgruppe (z. B.
Production) - Wählen Sie Ihre IAM-Rolle (
CodeDeployRole) - Wählen Sie EC2-Instanzen per Tag oder manuell
- Bereitstellungstyp: In-place
Schritt 4: Ihr GitHub-Repository vorbereiten
Erstellen Sie eine appspec.yml-Datei im Stammverzeichnis Ihres Repositories:
version: 0.0
os: linux
files:
- source: /
destination: /var/www/html
hooks:
AfterInstall:
- location: scripts/install_dependencies.sh
timeout: 300
runas: root
Erstellen Sie die notwendigen Skripte, z. B. scripts/install_dependencies.sh:
#!/bin/bash
sudo yum update -y
sudo yum install -y httpd
sudo service httpd start
sudo chkconfig httpd on
Stellen Sie sicher, dass Ihre Skripte ausführbar sind:
chmod +x scripts/*.sh
Committen und pushen Sie die Änderungen zu GitHub:
git add .
git commit -m "Added appspec.yml and deployment scripts"
git push origin main
Schritt 5: AWS CodeDeploy mit GitHub verbinden
- Wählen Sie in der CodeDeploy-Konsole Ihre Anwendung und Bereitstellungsgruppe.
- Klicken Sie auf Bereitstellung erstellen.
- Wählen Sie GitHub als Repository-Typ.
- Verbinden Sie sich mit GitHub und autorisieren Sie AWS.
- Wählen Sie Ihr Repository und den Commit-Branch (z. B.
main). - Klicken Sie auf Bereitstellen.
Schritt 6: CI/CD mit GitHub Actions automatisieren
Erstellen Sie .github/workflows/deploy.yml in Ihrem Repository:
name: AWS Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: AWS CodeDeploy
uses: aws-actions/aws-codedeploy@v1
with:
application-name: your-codedeploy-app-name
deployment-group-name: your-deployment-group
region: your-region
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
Hinterlegen Sie AWS-Zugangsdaten als GitHub-Secrets:
- Gehen Sie zu GitHub → Einstellungen → Secrets und Variablen → Aktionen → Neues Repository-Secret
- Fügen Sie
AWS_ACCESS_KEY_IDundAWS_SECRET_ACCESS_KEYhinzu.
Nun löst jeder Push zu main automatisch ein Deployment aus.
Schritt 7: Ihr Deployment verifizieren
Rufen Sie die öffentliche IP Ihrer EC2-Instanz im Browser auf:
http://your-ec2-instance-public-ip
Sie sollten Ihre erfolgreich bereitgestellte Anwendung sehen.
Fazit
Herzlichen Glückwunsch! Sie haben erfolgreich eine AWS CodeDeploy CI/CD-Pipeline eingerichtet, die mit GitHub integriert ist und Anwendungen automatisch auf EC2 bereitstellt. Diese Automatisierung optimiert Ihren Deployment-Prozess erheblich, reduziert Ausfallzeiten und vereinfacht Updates.