Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hashicorp/learn-terraform-import
Learn how to import existing configuration into Terraform
https://github.com/hashicorp/learn-terraform-import
hashicorp terraform tutorial
Last synced: 3 months ago
JSON representation
Learn how to import existing configuration into Terraform
- Host: GitHub
- URL: https://github.com/hashicorp/learn-terraform-import
- Owner: hashicorp
- License: mpl-2.0
- Created: 2020-05-14T21:15:50.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-05-03T19:48:05.000Z (8 months ago)
- Last Synced: 2024-09-28T12:42:14.912Z (3 months ago)
- Topics: hashicorp, terraform, tutorial
- Language: HCL
- Homepage: https://learn.hashicorp.com/tutorials/terraform/state-import
- Size: 39.1 KB
- Stars: 56
- Watchers: 259
- Forks: 51
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Learn Terraform Import
Learn how to import existing resources under Terraform's management.
Follow along with the [Learn Terraform Import tutorial](https://developer.hashicorp.com/terraform/tutorials/state/state-import).
### Install prerequisites
1. Terraform: https://www.terraform.io/downloads.html
1. Docker: https://docs.docker.com/get-docker/### Create a docker container
1. Run this docker command to create a container with the latest nginx image.
```shell
docker run --name hashicorp-learn --detach --publish 8080:80 nginx:latest
```1. Verify container is running by running `docker ps` or visiting `0.0.0.0:8080`
in your web browser.```shell
docker ps --filter "name=hashicorp-learn"
```### Import container resource
1. Initialize your workspace by running `terraform init`.
1. Add empty resource stub to `docker.tf` for the container.
```hcl
resource "docker_container" "web" { }
```1. Import the container into Terraform state.
```shell
terraform import docker_container.web $(docker inspect -f {{.ID}} hashicorp-learn)
```1. Now the container is in your terraform configuration's state.
```shell
terraform show
```1. Run `terraform plan`. Terraform shows errors for missing required arguments
(`image`, `name`).```shell
terraform plan
```1. Generate configuration and save it in `docker.tf`, replacing the empty
resource created earlier.```shell
terraform show -no-color > docker.tf
```1. Re-run `terraform plan`.
```shell
terraform plan
```1. Terraform will show warnings and errors about a deprecated attribute
(`links`), and several read-only attributes (`ip_address`, `network_data`,
`gateway`, `ip_prefix_length`, `id`). Remove these attributes from `docker.tf`.1. Re-run `terraform plan`.
```shell
terraform plan
```It should now execute successfully. The plan indicates that Terraform will
update in place to add the `attach`, `logs`, `must_run`, and `start`
attributes. Notice that the container resource will not be replaced.1. Apply the changes. Remember to confirm the run with a `yes`.
```shell
terraform apply
```1. There are now several attributes in `docker.tf` that are unnecessary because
they are the same as their default values. After removing these attributes,
`docker.tf` will look something like the following.```hcl
# docker_container.web:
resource "docker_container" "web" {
name = "hashicorp-learn"
image = "sha256:9beeba249f3ee158d3e495a6ac25c5667ae2de8a43ac2a8bfd2bf687a58c06c9"ports {
external = 8080
internal = 80
}
}
```1. Run `terraform plan` again to verify that removing these attributes did not
change the configuration.```shell
terraform plan
```### Verify that your infrastructure still works as expected
```shell
$ docker ps --filter "name=hashicorp-learn"
```You can revisit `0.0.0.0:8080` in your web browser to verify that it is
still up. Also note the "Status" - the container has been up and running
since it was created, so you know that it was not restarted when you
imported it into Terraform.### Create a Docker image resource
1. Retrieve the image's tag name by running the following command, replacing the
sha256 value shown with the one from `docker.tf`.```shell
docker image inspect sha256:602e111c06b6934013578ad80554a074049c59441d9bcd963cb4a7feccede7a -f {{.RepoTags}}
```1. Add the following configuration to your docker.tf file.
```hcl
resource "docker_image" "nginx" {
name = "nginx:latest"
}
```1. Run `terraform apply` to apply the changes. Remember to confirm the run with
a `yes`.```shell
terraform apply
```1. Now that Terraform has created a resource for the image, refer to it in
`docker.tf` like so:```hcl
resource "docker_container" "web" {
name = "hashicorp-learn"
image = docker_image.nginx.latest# File truncated...
```1. Verify that your configuration matches the current state.
```shell
terraform apply
```### Manage the container with Terraform
1. In your `docker.tf` file, change the container's external port from `8080` to
`8081`.```hcl
resource "docker_container" "web" {
name = "hashicorp-learn"
image = "sha256:602e111c06b6934013578ad80554a074049c59441d9bcd963cb4a7feccede7a5"ports {
external = 8081
internal = 80
}
}
```1. Apply the change. Remember to confirm the run with a `yes`.
```shell
terraform apply
```1. Verify that the new container works by running `docker ps` or visiting
`0.0.0.0:8081` in your web browser.```shell
docker ps --filter "name=hashicorp-learn"
```### Destroy resources
1. Run `terraform destroy` to destroy the container. Remember to confirm
destruction with a `yes`.```shell
terraform destroy
```1. Run `docker ps` to validate that the container was destroyed.
```shell
docker ps --filter "name=hashicorp-learn"
```