Multi user
- Lets create a simple terraform template to create vpc Refer Here for the changes
- Execute this from two different machines.
- Consider both of them are working for same purpose
- User 1:

- User 2:

- Execution Create two different resources, which is not desired

- As of now state is stored locally i.e. when user1 executes it is stored in user1 system and same for user2

- To solve this problem we need to store the state in some common place

- The location of state file in terraform is defined by backend.
Terraform Backends
- Backend defines where the state has to be stored
- Refer Here for offical docs and Refer Here for configuring backend
- There are two types of backends
- local-backend:
- This is default backend
- remote-backend
- local-backend:
- Refer Here for available backends
- As common state for terraform for multiple users will have concurrency problem, Terraform backends need locking and unlocking
- S3 bucket can be used as terraform backend, S3 buckend doesnot support locking, if you need locking add dynamo db details
Remote Backends with S3
- Refer Here for official docs
- Create an s3 bucket

- Create a dynamo DB table with any name and partition key
LockID

- Refer Here for the changes done to add s3 backend
- Perform init on both user machines

- Now lets user1 apply the changes

- Now while user1 is still applying let user 2 also apply

- Let user1 finish applying and create the resources

- Now let user2 try applying


- Exercise: Configure Azurerm backend Refer Here which has inbuilt locking facility
Next Steps
- Provisioning
- Immutable Infrastructure
