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
...
tags
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.

