Provision with Terraform
This page explains how to provision infrastructure using Terraform with FluentCI.
HashiCorp Terraform is an infrastructure-as-code (IaC) tool that lets you provision and manage cloud infrastructure. Terraform provides plugins called providers that let you interact with cloud providers and other APIs.
Before you begin
The instructions on this page assume that you are familiar with Terraform
. In addition:
- Have your Terraform project ready.
- If you don't already have a project to provision with Terraform, you can create a default project by installing and initializing Terraform.
- Make sure you have a
main.tf
file in your project root directory.
Using the Terraform Plugin
You can use FluentCI to provision infrastructure using Terraform with the terraform plugin without installing Terraform CLI on your machine. FluentCI will handle everything for you.
The following commands can be used to provision infrastructure using Terraform:
fluentci run --wasm terraform init
fluentci run --wasm terraform plan
fluentci run --wasm terraform apply
CI/CD pipeline integrations
The following examples show how to integrate FluentCI with popular CI providers to provision infrastructure using Terraform:
- Github Actions
- GitLab CI
- Circle CI
- Azure Pipelines
- AWS CodePipeline
name: ci
on:
push:
branches:
- main
jobs:
tasks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Fluent CI
uses: fluentci-io/setup-fluentci@v5
- name: init
run: fluentci run --wasm terraform init
env:
GOOGLE_APPLICATION_CREDENTIALS: ./service-account.json
- name: validate
run: fluentci run --wasm terraform validate
env:
GOOGLE_APPLICATION_CREDENTIALS: ./service-account.json
- name: plan
run: fluentci run --wasm terraform plan
env:
GOOGLE_APPLICATION_CREDENTIALS: ./service-account.json
- name: apply
run: fluentci run --wasm terraform apply
env:
GOOGLE_APPLICATION_CREDENTIALS: ./service-account.json
.docker:
image: denoland/deno:debian-1.42.4
services:
- docker:${DOCKER_VERSION}-dind
variables:
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_VERIFY: "1"
DOCKER_TLS_CERTDIR: /certs
DOCKER_CERT_PATH: /certs/client
DOCKER_DRIVER: overlay2
DOCKER_VERSION: 20.10.16
GITLAB_ACCESS_TOKEN: $GITLAB_ACCESS_TOKEN
GOOGLE_APPLICATION_CREDENTIALS: ./service-account.json
.fluentci:
extends: .docker
before_script:
- apt-get update
- apt-get install -y curl tar gzip ca-certificates openssl git unzip libncursesw6
- deno install -A -r https://cli.fluentci.io -n fluentci
- fluentci --version
- curl -L https://dl.dagger.io/dagger/install.sh | DAGGER_VERSION=0.12.3 sh
- mv bin/dagger /usr/local/bin
- dagger version
init:
extends: .fluentci
script:
- fluentci run --wasm terraform init
validate:
extends: .fluentci
script:
- fluentci run --wasm terraform validate
plan:
extends: .fluentci
script:
- fluentci run --wasm terraform plan
apply:
extends: .fluentci
script:
- fluentci run --wasm terraform apply
version: 2.1
jobs:
job:
steps:
- checkout
- run: |
sudo apt-get update && sudo apt-get install -y curl unzip
curl -fsSL https://cli.fluentci.io | bash
fluentci --version
name: Setup FluentCI
- run: fluentci run --wasm terraform init
name: init
- run: fluentci run --wasm terraform validate
name: validate
- run: fluentci run --wasm terraform plan
name: plan
- run: fluentci run --wasm terraform apply
name: apply
machine:
image: ubuntu-2004:2023.07.1
workflows:
fluentci:
jobs:
- job
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- script: |
curl -fsSL https://cli.fluentci.io | bash
fluentci --version
echo "##vso[task.prependpath]${HOME}/.deno/bin
displayName: Setup FluentCI
- script: fluentci run --wasm terraform init
displayName: init
- script: fluentci run --wasm terraform validate
displayName: validate
- script: fluentci run --wasm terraform plan
displayName: plan
- script: fluentci run --wasm terraform apply
displayName: apply
version: 0.2
phases:
install:
commands:
- curl -fsSL https://cli.fluentci.io | bash
- fluentci --version
build:
commands:
- fluentci run --wasm terraform init
- fluentci run --wasm terraform validate
- fluentci run --wasm terraform plan
- fluentci run --wasm terraform apply
post_build:
commands:
- echo Build completed on `date`