slogan3

Maak een GitHub Actions-workflow voor het automatiseren van infrastructuur als code-implementaties

description

Door infrastructuurimplementaties te automatiseren, kun je consistentie waarborgen, handmatige fouten verminderen en het implementatieproces versnellen over meerdere omgevingen.

prompt

try_prompt

Help me een GitHub Actions-workflow ontwerpen die de implementatie van infrastructuur als code (IaC) automatiseert met tools zoals Terraform of CloudFormation. Projecttype: {{project_type}}. ... more
generate_helper
disclaimerOnPageApi image_legal_disclaimer...

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een GitHub Actions-workflow die de implementatie van infrastructuur als code (IaC) automatiseert met Terraform voor een webapplicatie, inclusief beheerderstoegang. Deze workflow voert de volgende stappen uit: het controleren van de code, het initialiseren van Terraform, plan maken, en toepassen (deploy). Daarnaast worden beveiligingsmaatregelen genomen voor beheerderstoegang, zoals het gebruik van secrets en geïsoleerde omgevingen. ```yaml name: Terraform Deployment on: push: branches: - main pull_request: branches: - main jobs: terraform: name: Infrastructure as Code Deployment runs-on: ubuntu-latest env: TF_VERSION: 1.5.0 TF_WORKSPACE: production steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Terraform uses: hashicorp/setup-terraform@v1 with: terraform_version: ${{ env.TF_VERSION }} - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: jouw-aws-regio - name: Initialize Terraform run: terraform init - name: Selecteer of maak workspace run: | terraform workspace select ${{ env.TF_WORKSPACE }} || terraform workspace new ${{ env.TF_WORKSPACE }} - name: Plan uitvoeren run: terraform plan -out=tfplan -input=false - name: Toepassen (deploy) if: github.ref == 'refs/heads/main' run: terraform apply -input=false -auto-approve tfplan - name: Invalidate cache (optioneel) if: github.ref != 'refs/heads/main' run: echo "PR of andere branch, geen deploy." ``` **Belangrijk:** - Bewaar je AWS (of andere cloud provider) toegangssleutels als secrets in je GitHub repository (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`). - Pas de regio en andere cloud-specifieke instellingen aan naar jouw omgeving. - Voor beheerderstoegang worden de secrets en rolrechten adequaat ingesteld in je cloudprovider. - Je kunt dit basisvoorbeeld uitbreiden met extra checks, notificaties, of staging-omgevingen. Wil je dat ik het verder aanpas op basis van je specifieke infrastructuur of workflows?
provider: deepseek
model: deepseek-chat
Hier is een complete GitHub Actions workflow voor het automatiseren van Terraform IaC-implementaties met beheerdersrechten: ```yaml name: 'Terraform IaC Deployment' on: push: branches: [ main, develop ] pull_request: branches: [ main ] env: TERRAFORM_VERSION: '1.5.0' AWS_REGION: 'eu-west-1' jobs: terraform: name: 'Terraform' runs-on: ubuntu-latest permissions: contents: read id-token: write # Vereist voor OIDC met AWS steps: - name: Checkout code uses: actions/checkout@v4 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/GitHubActionsRole aws-region: ${{ env.AWS_REGION }} role-session-name: GitHubActionsTerraform - name: Setup Terraform uses: hashicorp/setup-terraform@v3 with: terraform_version: ${{ env.TERRAFORM_VERSION }} - name: Terraform Format id: fmt run: terraform fmt -check -recursive - name: Terraform Init id: init run: terraform init - name: Terraform Validate id: validate run: terraform validate - name: Terraform Plan id: plan run: terraform plan -input=false -out=plan.tfplan env: TF_VAR_admin_access: true - name: Terraform Plan Status if: github.event_name == 'pull_request' run: | if terraform show -json plan.tfplan | jq -e '.planned_values.root_module.resources[] | select(.type == "aws_iam_role" and .values.name == "admin-role")' > /dev/null; then echo "⚠️ WAARSCHUWING: Beheerdersrechten worden geïmplementeerd" fi - name: Terraform Apply if: github.ref == 'refs/heads/main' && github.event_name == 'push' run: terraform apply -auto-approve -input=false plan.tfplan env: TF_VAR_admin_access: true security-scan: name: 'Security Scan' runs-on: ubuntu-latest needs: terraform steps: - name: Checkout code uses: actions/checkout@v4 - name: Run Terraform Security Scan uses: aquasecurity/tfsec@main with: args: --exclude-downloaded-modules - name: Checkov Security Scan uses: bridgecrewio/checkov-action@master with: directory: . framework: terraform ``` ## Vereiste GitHub Secrets: ```bash AWS_ACCOUNT_ID # Je AWS account ID ``` ## Vereiste IAM Role in AWS: ```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] } ``` ## Aanbevolen Terraform bestandsstructuur: ``` infrastructure/ ├── main.tf ├── variables.tf ├── outputs.tf ├── terraform.tfvars.example └── modules/ ├── networking/ ├── compute/ └── security/ ``` ## Belangrijke beveiligingsmaatregelen: 1. **Gebruik OIDC** in plaats van statische credentials 2. **Branch protection** op main branch 3. **Verplichte reviews** voor productie-implementaties 4. **Environment protection rules** in GitHub 5. **Terraform state versleuteling** en remote backend ## Terraform admin configuratie voorbeeld: ```hcl # variables.tf variable "admin_access" { description = "Schakel beheerdersrechten in" type = bool default = false } # main.tf resource "aws_iam_role" "admin_role" { count = var.admin_access ? 1 : 0 name = "terraform-admin-role" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = "sts:AssumeRole" Effect = "Allow" Principal = { Service = "ec2.amazonaws.com" } } ] }) managed_policy_arns = ["arn:aws:iam::aws:policy/AdministratorAccess"] } ``` Deze workflow biedt een veilige, geautomatiseerde IaC-implementatie met de vereiste beheerdersrechten en uitgebreide security scanning.