From 58a4ffc80553e1e486ca40315a3af5503215ad2f Mon Sep 17 00:00:00 2001 From: Kaito Date: Sat, 1 Jul 2023 19:55:53 +0400 Subject: [PATCH 1/5] add aws instance + defult vpc + custom security group --- .gitignore | 4 ++++ .terraform.lock.hcl | 26 ++++++++++++++++++++++++ Dockerfile | 23 +++++++++++++++++++++ docker-compose.yml | 19 ++++++++++++++++++ main.tf | 49 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 121 insertions(+) create mode 100644 .gitignore create mode 100644 .terraform.lock.hcl create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 main.tf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0543edb --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +**/.terraform +.vscode +ssh_keys +*.tfstate* \ No newline at end of file diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl new file mode 100644 index 0000000..8b78ef8 --- /dev/null +++ b/.terraform.lock.hcl @@ -0,0 +1,26 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.76.1" + constraints = "~> 3.38" + hashes = [ + "h1:5WSHHV9CgBvZ0rDDDxLnNHsjDfm4knb7ihJ2AIGB58A=", + "h1:nrYpq9ne3FNUmjekbc0ayKE7wNu7BaMpV7oSC+qjAC4=", + "zh:1cf933104a641ffdb64d71a76806f4df35d19101b47e0eb02c9c36bd64bfdd2d", + "zh:273afaf908775ade6c9d32462938e7739ee8b00a0de2ef3cdddc5bc115bb1d4f", + "zh:2bc24ae989e38f575de034083082c69b41c54b8df69d35728853257c400ce0f4", + "zh:53ba88dbdaf9f818d35001c3d519a787f457283d9341f562dc3d0af51fd9606e", + "zh:5cdac7afea68bbd89d3bdb345d99470226482eff41f375f220fe338d2e5808da", + "zh:63127808890ac4be6cff6554985510b15ac715df698d550a3e722722dc56523c", + "zh:97a1237791f15373743189b078a0e0f2fa4dd7d7474077423376cd186312dc55", + "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", + "zh:a4f625e97e5f25073c08080e4a619f959bc0149fc853a6b1b49ab41d58b59665", + "zh:b56cca54019237941f7614e8d2712586a6ab3092e8e9492c70f06563259171e9", + "zh:d4bc33bfd6ac78fb61e6d48a61c179907dfdbdf149b89fb97272c663989a7fcd", + "zh:e0089d73fa56d128c574601305634a774eebacf4a84babba71da10040cecf99a", + "zh:e957531f1d92a6474c9b02bd9200da91b99ba07a0ab761c8e3176400dd41721c", + "zh:eceb85818d57d8270db4df7564cf4ed51b5c650a361aaa017c42227158e1946b", + "zh:f565e5caa1b349ec404c6d03d01c68b02233f5485ed038d0aab810dd4023a880", + ] +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f675aaa --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM hashicorp/terraform:1.1.3 + +RUN apk update && apk upgrade +RUN apk add bash groff openssh git vim jq make curl + +RUN apk -v --update add \ + python3 \ + py3-pip \ + groff \ + less \ + mailcap \ + && \ + pip3 install --upgrade awscli s3cmd python-magic && \ + apk -v --purge del && \ + rm /var/cache/apk/* + +RUN mkdir -p /infra +WORKDIR /infra + +RUN echo 'alias t=terraform' > ~/.bashrc && \ + terraform -install-autocomplete + +ENTRYPOINT "bash" \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e87542d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,19 @@ +version: "3.7" + +x-aws-vault-environment: &aws-vault-environment + - AWS_VAULT + - AWS_DEFAULT_REGION + - AWS_REGION + - AWS_ACCESS_KEY_ID + - AWS_SECRET_ACCESS_KEY + - AWS_SESSION_TOKEN + - AWS_SECURITY_TOKEN + - AWS_SESSION_EXPIRATION + +services: + infra: + build: . + volumes: + - .:/infra + - ~/.ssh:/root/.ssh + environment: *aws-vault-environment \ No newline at end of file diff --git a/main.tf b/main.tf new file mode 100644 index 0000000..db89b0b --- /dev/null +++ b/main.tf @@ -0,0 +1,49 @@ +terraform { + required_version = ">= 0.15.3" + + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 3.38" + } + } +} + +provider "aws" { + profile = "default" + region = "us-east-1" +} + +locals { + # FEDORA-COREOS + instance_ami = "ami-09e2e5104f310ffb5" +} + +resource "aws_instance" "app_server" { + ami = local.instance_ami + instance_type = "t2.micro" + + tags = { + Name = "Study AppServer" + } + + vpc_security_group_ids = [ + module.ec2_sg.security_group_id + ] +} + +data "aws_vpc" "default" { + default = true +} + +module "ec2_sg" { + source = "terraform-aws-modules/security-group/aws" + + name = "ec2_sg" + description = "Security group for ec2_sg" + vpc_id = data.aws_vpc.default.id + + ingress_cidr_blocks = ["0.0.0.0/0"] + ingress_rules = ["http-80-tcp", "https-443-tcp", "all-icmp"] + egress_rules = ["all-all"] +} From 4fd5902c7eec865eba4d8bf0580dd9c0249cf302 Mon Sep 17 00:00:00 2001 From: Kaito Date: Sun, 2 Jul 2023 00:39:31 +0400 Subject: [PATCH 2/5] add ssh --- .terraform.lock.hcl | 12 ++++++++++++ config.tpl | 9 +++++++++ main.tf | 22 ++++++++++++++++++++-- 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 config.tpl diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl index 8b78ef8..98366e4 100644 --- a/.terraform.lock.hcl +++ b/.terraform.lock.hcl @@ -24,3 +24,15 @@ provider "registry.terraform.io/hashicorp/aws" { "zh:f565e5caa1b349ec404c6d03d01c68b02233f5485ed038d0aab810dd4023a880", ] } + +provider "registry.terraform.io/poseidon/ct" { + version = "0.8.0" + constraints = "0.8.0" + hashes = [ + "h1:lh82ZqChuYXkZF3vhGas86JoGYfzXDss1dBu+Y6pUn4=", + "zh:50cd14b2edf141f6f55eece7a3469d79f4bcb835c1a46fe750972b21a7111059", + "zh:62af7f256976bab1c077175af52c18087710f277aff156ea504bda57ff0f1c8e", + "zh:9ab73eaacfef1e81973a1b7d4054ccc23b87c6d12d874080b336a351a9a9ac71", + "zh:c3efc500fdf84f9ea121d92818ea03e2b8f30ed62e9acfceff5e20de17bb00ef", + ] +} diff --git a/config.tpl b/config.tpl new file mode 100644 index 0000000..a04a66d --- /dev/null +++ b/config.tpl @@ -0,0 +1,9 @@ +variant: fcos +version: 1.2.0 +passwd: + users: + - name: ${user} + ssh_authorized_keys: + - ${key} + groups: + - docker diff --git a/main.tf b/main.tf index db89b0b..79a66bc 100644 --- a/main.tf +++ b/main.tf @@ -6,6 +6,11 @@ terraform { source = "hashicorp/aws" version = "~> 3.38" } + + ct = { + source = "poseidon/ct" + version = "0.8.0" + } } } @@ -14,14 +19,19 @@ provider "aws" { region = "us-east-1" } +provider "ct" {} + locals { # FEDORA-COREOS - instance_ami = "ami-09e2e5104f310ffb5" + instance_ami = "ami-09e2e5104f310ffb5" + instance_user = "core" + instance_key_file = "ssh_keys/id_rsa_instance_key.pub" } resource "aws_instance" "app_server" { ami = local.instance_ami instance_type = "t2.micro" + user_data = data.ct_config.config.rendered tags = { Name = "Study AppServer" @@ -36,6 +46,14 @@ data "aws_vpc" "default" { default = true } +data "ct_config" "config" { + content = templatefile("config.tpl", { + user = local.instance_user + key = file(local.instance_key_file) + }) + strict = true +} + module "ec2_sg" { source = "terraform-aws-modules/security-group/aws" @@ -44,6 +62,6 @@ module "ec2_sg" { vpc_id = data.aws_vpc.default.id ingress_cidr_blocks = ["0.0.0.0/0"] - ingress_rules = ["http-80-tcp", "https-443-tcp", "all-icmp"] + ingress_rules = ["http-80-tcp", "https-443-tcp", "all-icmp", "ssh-tcp"] egress_rules = ["all-all"] } From fcd3b48be491956b589dfdef520c062529211227 Mon Sep 17 00:00:00 2001 From: Kaito Date: Sun, 2 Jul 2023 21:06:24 +0400 Subject: [PATCH 3/5] add docker --- .terraform.lock.hcl | 19 +++++++++++++++++++ main.tf | 27 +++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl index 98366e4..f6d1aec 100644 --- a/.terraform.lock.hcl +++ b/.terraform.lock.hcl @@ -25,6 +25,25 @@ provider "registry.terraform.io/hashicorp/aws" { ] } +provider "registry.terraform.io/kreuzwerker/docker" { + version = "2.11.0" + constraints = "2.11.0" + hashes = [ + "h1:2BuPcSQY9DSRhPufzrbiGyMW2NX1qqXkH1KfzrMUQmU=", + "zh:1b9d93385cc0329467725ce90affc76a361bc23384a7358431e6ee281ae323de", + "zh:21a327746cdad2abfc22df3d72eb9b36134bb7daeb72b2a52112adfd3a39555a", + "zh:31ed477f429686015271188b03e89bfc400b74eea9e83956ea4cc16018b561f3", + "zh:4302d65b5cbedbe42cf35094748058aea44f75dd7ec2b257330b5f60a2521def", + "zh:43f53e3e29070dfec0621915d0a5266c386f7416f6a719531b7c55924cefd280", + "zh:4bf7704bf46868edd834991f350aa6204c72397be1e1a784278391bb911e29f5", + "zh:503434ddf9c801aa9a9e47e76b6b5758dd4583a49f7ac373066430b37b3efcaf", + "zh:67410f9ed6503692121519b81e13cf5274ceadb5566bf2ec2dc0a6e43c700621", + "zh:c0fd724ed8da52375976c3595a2a6748bf28c07ec881ad7154e657ab5c38f25b", + "zh:cbe762d96c4ae61c42d8c02c047954b52a6567b214a0263345135baf249accd7", + "zh:d3a23b086199d4a2a63707f28c0da8b392d8d11281c6881d85a959e76626fb7e", + ] +} + provider "registry.terraform.io/poseidon/ct" { version = "0.8.0" constraints = "0.8.0" diff --git a/main.tf b/main.tf index 79a66bc..d6bd798 100644 --- a/main.tf +++ b/main.tf @@ -11,6 +11,11 @@ terraform { source = "poseidon/ct" version = "0.8.0" } + + docker = { + source = "kreuzwerker/docker" + version = "2.11.0" + } } } @@ -21,11 +26,17 @@ provider "aws" { provider "ct" {} + +provider "docker" { + host = "ssh://${local.instance_user}@${aws_instance.app_server.public_ip}:22" +} + locals { # FEDORA-COREOS instance_ami = "ami-09e2e5104f310ffb5" instance_user = "core" instance_key_file = "ssh_keys/id_rsa_instance_key.pub" + image = "kaitoendo/ping-pong:latest" } resource "aws_instance" "app_server" { @@ -42,6 +53,22 @@ resource "aws_instance" "app_server" { ] } +resource "docker_image" "app" { + name = local.image +} + +resource "docker_container" "app" { + image = docker_image.app.latest + name = "app" + env = [ + "PORT=4000", + ] + ports { + internal = "4000" + external = "80" + } +} + data "aws_vpc" "default" { default = true } From 05e82c2e4cb457f8a9b4876eba418136260054c9 Mon Sep 17 00:00:00 2001 From: Kaito Date: Sun, 2 Jul 2023 23:54:33 +0400 Subject: [PATCH 4/5] refactor structure --- main.tf | 103 +++------------------- modules/application/main.tf | 16 ++++ modules/application/variables.tf | 9 ++ modules/application/versions.tf | 16 ++++ config.tpl => modules/instance/config.tpl | 0 modules/instance/main.tf | 42 +++++++++ modules/instance/outputs.tf | 3 + modules/instance/variables.tf | 20 +++++ modules/instance/versions.tf | 10 +++ modules/networking/main.tf | 15 ++++ modules/networking/outputs.tf | 3 + outputs.tf | 3 + terraform.tfvars | 5 ++ variables.tf | 24 +++++ versions.tf | 15 ++++ 15 files changed, 194 insertions(+), 90 deletions(-) create mode 100644 modules/application/main.tf create mode 100644 modules/application/variables.tf create mode 100644 modules/application/versions.tf rename config.tpl => modules/instance/config.tpl (100%) create mode 100644 modules/instance/main.tf create mode 100644 modules/instance/outputs.tf create mode 100644 modules/instance/variables.tf create mode 100644 modules/instance/versions.tf create mode 100644 modules/networking/main.tf create mode 100644 modules/networking/outputs.tf create mode 100644 outputs.tf create mode 100644 terraform.tfvars create mode 100644 variables.tf create mode 100644 versions.tf diff --git a/main.tf b/main.tf index d6bd798..bc30a40 100644 --- a/main.tf +++ b/main.tf @@ -1,94 +1,17 @@ -terraform { - required_version = ">= 0.15.3" - - required_providers { - aws = { - source = "hashicorp/aws" - version = "~> 3.38" - } - - ct = { - source = "poseidon/ct" - version = "0.8.0" - } - - docker = { - source = "kreuzwerker/docker" - version = "2.11.0" - } - } -} - -provider "aws" { - profile = "default" - region = "us-east-1" -} - -provider "ct" {} - - -provider "docker" { - host = "ssh://${local.instance_user}@${aws_instance.app_server.public_ip}:22" -} - -locals { - # FEDORA-COREOS - instance_ami = "ami-09e2e5104f310ffb5" - instance_user = "core" - instance_key_file = "ssh_keys/id_rsa_instance_key.pub" - image = "kaitoendo/ping-pong:latest" -} - -resource "aws_instance" "app_server" { - ami = local.instance_ami - instance_type = "t2.micro" - user_data = data.ct_config.config.rendered - - tags = { - Name = "Study AppServer" - } - - vpc_security_group_ids = [ - module.ec2_sg.security_group_id - ] -} - -resource "docker_image" "app" { - name = local.image -} - -resource "docker_container" "app" { - image = docker_image.app.latest - name = "app" - env = [ - "PORT=4000", - ] - ports { - internal = "4000" - external = "80" - } -} - -data "aws_vpc" "default" { - default = true +module "application" { + source = "./modules/application" + host = "ssh://${var.instance_user}@${module.instance.public_ip}:22" + image = var.image } -data "ct_config" "config" { - content = templatefile("config.tpl", { - user = local.instance_user - key = file(local.instance_key_file) - }) - strict = true +module "instance" { + source = "./modules/instance" + instance_ami = var.instance_ami + user = var.instance_user + ssh_key = var.instance_key_file + ec2_sg_id = module.networking.ec2_sg_id } -module "ec2_sg" { - source = "terraform-aws-modules/security-group/aws" - - name = "ec2_sg" - description = "Security group for ec2_sg" - vpc_id = data.aws_vpc.default.id - - ingress_cidr_blocks = ["0.0.0.0/0"] - ingress_rules = ["http-80-tcp", "https-443-tcp", "all-icmp", "ssh-tcp"] - egress_rules = ["all-all"] -} +module "networking" { + source = "./modules/networking" +} \ No newline at end of file diff --git a/modules/application/main.tf b/modules/application/main.tf new file mode 100644 index 0000000..b45330e --- /dev/null +++ b/modules/application/main.tf @@ -0,0 +1,16 @@ +resource "docker_image" "app" { + name = var.image +} + +resource "docker_container" "app" { + image = docker_image.app.latest + name = "app" + restart = "unless-stopped" + env = [ + "PORT=4000", + ] + ports { + internal = "4000" + external = "80" + } +} \ No newline at end of file diff --git a/modules/application/variables.tf b/modules/application/variables.tf new file mode 100644 index 0000000..1f544f3 --- /dev/null +++ b/modules/application/variables.tf @@ -0,0 +1,9 @@ +variable "host" { + description = "instance host" + type = string +} + +variable "image" { + description = "dockerhub image" + type = string +} diff --git a/modules/application/versions.tf b/modules/application/versions.tf new file mode 100644 index 0000000..b77443e --- /dev/null +++ b/modules/application/versions.tf @@ -0,0 +1,16 @@ +terraform { + required_version = ">= 0.15.3" + + required_providers { + docker = { + source = "kreuzwerker/docker" + version = "2.11.0" + } + } +} + +provider "docker" { + host = var.host + + +} \ No newline at end of file diff --git a/config.tpl b/modules/instance/config.tpl similarity index 100% rename from config.tpl rename to modules/instance/config.tpl diff --git a/modules/instance/main.tf b/modules/instance/main.tf new file mode 100644 index 0000000..e810cce --- /dev/null +++ b/modules/instance/main.tf @@ -0,0 +1,42 @@ +# IP +resource "aws_eip" "eip" { + vpc = true +} + +resource "aws_eip_association" "eip_assoc" { + instance_id = aws_instance.app_server.id + allocation_id = aws_eip.eip.id +} + +# User Data +data "ct_config" "config" { + content = templatefile("${path.module}/config.tpl", { + user = var.user + key = file(var.ssh_key) + }) + strict = true +} + + +# Instance +resource "aws_instance" "app_server" { + ami = var.instance_ami + instance_type = "t2.micro" + user_data = data.ct_config.config.rendered + + tags = { + Name = "Study AppServer" + } + + vpc_security_group_ids = [ var.ec2_sg_id + ] +} + + + + + + + + + diff --git a/modules/instance/outputs.tf b/modules/instance/outputs.tf new file mode 100644 index 0000000..01cf1b4 --- /dev/null +++ b/modules/instance/outputs.tf @@ -0,0 +1,3 @@ +output "public_ip" { + value = aws_eip.eip.public_ip +} \ No newline at end of file diff --git a/modules/instance/variables.tf b/modules/instance/variables.tf new file mode 100644 index 0000000..1bbd0db --- /dev/null +++ b/modules/instance/variables.tf @@ -0,0 +1,20 @@ +variable "user" { + description = "instance user" + type = string +} + + +variable "ssh_key" { + description = "public key path" + type = string +} + +variable "instance_ami" { + description = "AWS AMI" + type = string +} + +variable "ec2_sg_id" { + description = "EC2 security group id" + type = string +} \ No newline at end of file diff --git a/modules/instance/versions.tf b/modules/instance/versions.tf new file mode 100644 index 0000000..5269a9e --- /dev/null +++ b/modules/instance/versions.tf @@ -0,0 +1,10 @@ +terraform { + required_version = ">= 0.15.3" + + required_providers { + ct = { + source = "poseidon/ct" + version = "0.8.0" + } + } +} diff --git a/modules/networking/main.tf b/modules/networking/main.tf new file mode 100644 index 0000000..e8b855c --- /dev/null +++ b/modules/networking/main.tf @@ -0,0 +1,15 @@ +data "aws_vpc" "default" { + default = true +} + +module "ec2_sg" { + source = "terraform-aws-modules/security-group/aws" + + name = "ec2_sg" + description = "Security group for ec2_sg" + vpc_id = data.aws_vpc.default.id + + ingress_cidr_blocks = ["0.0.0.0/0"] + ingress_rules = ["http-80-tcp", "https-443-tcp", "all-icmp", "ssh-tcp"] + egress_rules = ["all-all"] +} \ No newline at end of file diff --git a/modules/networking/outputs.tf b/modules/networking/outputs.tf new file mode 100644 index 0000000..65e55af --- /dev/null +++ b/modules/networking/outputs.tf @@ -0,0 +1,3 @@ +output "ec2_sg_id" { + value = module.ec2_sg.security_group_id +} \ No newline at end of file diff --git a/outputs.tf b/outputs.tf new file mode 100644 index 0000000..3caa2db --- /dev/null +++ b/outputs.tf @@ -0,0 +1,3 @@ +output "public_ip" { + value = module.instance.public_ip +} diff --git a/terraform.tfvars b/terraform.tfvars new file mode 100644 index 0000000..a4028df --- /dev/null +++ b/terraform.tfvars @@ -0,0 +1,5 @@ +region = "us-east-1" +instance_ami = "ami-09e2e5104f310ffb5" +instance_user = "core" +instance_key_file = "ssh_keys/id_rsa_instance_key.pub" +image = "kaitoendo/ping-pong:latest" \ No newline at end of file diff --git a/variables.tf b/variables.tf new file mode 100644 index 0000000..cc97280 --- /dev/null +++ b/variables.tf @@ -0,0 +1,24 @@ +variable "region" { + description = "aws region" + type = string +} + +variable "instance_ami" { + description = "AWS AMI" + type = string +} + +variable "instance_user" { + description = "instance user" + type = string +} + +variable "instance_key_file" { + description = "public key path" + type = string +} + +variable "image" { + description = "container image you will run on the instance" + type = string +} diff --git a/versions.tf b/versions.tf new file mode 100644 index 0000000..9d44a6a --- /dev/null +++ b/versions.tf @@ -0,0 +1,15 @@ +terraform { + required_version = ">= 0.15.3" + + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 3.38" + } + } +} + +provider "aws" { + profile = "default" + region = var.region +} \ No newline at end of file From cfc1c9867de10ff5f6754726782f75e1e8fcd1dc Mon Sep 17 00:00:00 2001 From: Kaito Date: Tue, 4 Jul 2023 01:43:06 +0400 Subject: [PATCH 5/5] add ssh module --- .terraform.lock.hcl | 38 +++++++++++++++++++++++++++++++++++ main.tf | 7 ++++++- modules/instance/main.tf | 3 +-- modules/instance/variables.tf | 2 +- modules/ssh/main.tf | 9 +++++++++ modules/ssh/outputs.tf | 11 ++++++++++ modules/ssh/variables.tf | 4 ++++ terraform.tfvars | 10 ++++----- variables.tf | 10 ++++----- 9 files changed, 80 insertions(+), 14 deletions(-) create mode 100644 modules/ssh/main.tf create mode 100644 modules/ssh/outputs.tf create mode 100644 modules/ssh/variables.tf diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl index f6d1aec..0e6cac4 100644 --- a/.terraform.lock.hcl +++ b/.terraform.lock.hcl @@ -25,6 +25,44 @@ provider "registry.terraform.io/hashicorp/aws" { ] } +provider "registry.terraform.io/hashicorp/local" { + version = "2.4.0" + hashes = [ + "h1:R97FTYETo88sT2VHfMgkPU3lzCsZLunPftjSI5vfKe8=", + "zh:53604cd29cb92538668fe09565c739358dc53ca56f9f11312b9d7de81e48fab9", + "zh:66a46e9c508716a1c98efbf793092f03d50049fa4a83cd6b2251e9a06aca2acf", + "zh:70a6f6a852dd83768d0778ce9817d81d4b3f073fab8fa570bff92dcb0824f732", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:82a803f2f484c8b766e2e9c32343e9c89b91997b9f8d2697f9f3837f62926b35", + "zh:9708a4e40d6cc4b8afd1352e5186e6e1502f6ae599867c120967aebe9d90ed04", + "zh:973f65ce0d67c585f4ec250c1e634c9b22d9c4288b484ee2a871d7fa1e317406", + "zh:c8fa0f98f9316e4cfef082aa9b785ba16e36ff754d6aba8b456dab9500e671c6", + "zh:cfa5342a5f5188b20db246c73ac823918c189468e1382cb3c48a9c0c08fc5bf7", + "zh:e0e2b477c7e899c63b06b38cd8684a893d834d6d0b5e9b033cedc06dd7ffe9e2", + "zh:f62d7d05ea1ee566f732505200ab38d94315a4add27947a60afa29860822d3fc", + "zh:fa7ce69dde358e172bd719014ad637634bbdabc49363104f4fca759b4b73f2ce", + ] +} + +provider "registry.terraform.io/hashicorp/tls" { + version = "4.0.4" + hashes = [ + "h1:pe9vq86dZZKCm+8k1RhzARwENslF3SXb9ErHbQfgjXU=", + "zh:23671ed83e1fcf79745534841e10291bbf34046b27d6e68a5d0aab77206f4a55", + "zh:45292421211ffd9e8e3eb3655677700e3c5047f71d8f7650d2ce30242335f848", + "zh:59fedb519f4433c0fdb1d58b27c210b27415fddd0cd73c5312530b4309c088be", + "zh:5a8eec2409a9ff7cd0758a9d818c74bcba92a240e6c5e54b99df68fff312bbd5", + "zh:5e6a4b39f3171f53292ab88058a59e64825f2b842760a4869e64dc1dc093d1fe", + "zh:810547d0bf9311d21c81cc306126d3547e7bd3f194fc295836acf164b9f8424e", + "zh:824a5f3617624243bed0259d7dd37d76017097dc3193dac669be342b90b2ab48", + "zh:9361ccc7048be5dcbc2fafe2d8216939765b3160bd52734f7a9fd917a39ecbd8", + "zh:aa02ea625aaf672e649296bce7580f62d724268189fe9ad7c1b36bb0fa12fa60", + "zh:c71b4cd40d6ec7815dfeefd57d88bc592c0c42f5e5858dcc88245d371b4b8b1e", + "zh:dabcd52f36b43d250a3d71ad7abfa07b5622c69068d989e60b79b2bb4f220316", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + ] +} + provider "registry.terraform.io/kreuzwerker/docker" { version = "2.11.0" constraints = "2.11.0" diff --git a/main.tf b/main.tf index bc30a40..023d7df 100644 --- a/main.tf +++ b/main.tf @@ -8,10 +8,15 @@ module "instance" { source = "./modules/instance" instance_ami = var.instance_ami user = var.instance_user - ssh_key = var.instance_key_file + ssh_key = module.ssh.public_key_openssh ec2_sg_id = module.networking.ec2_sg_id } module "networking" { source = "./modules/networking" +} + +module "ssh" { + source = "./modules/ssh" + env = var.env } \ No newline at end of file diff --git a/modules/instance/main.tf b/modules/instance/main.tf index e810cce..1d47e96 100644 --- a/modules/instance/main.tf +++ b/modules/instance/main.tf @@ -12,12 +12,11 @@ resource "aws_eip_association" "eip_assoc" { data "ct_config" "config" { content = templatefile("${path.module}/config.tpl", { user = var.user - key = file(var.ssh_key) + key = var.ssh_key }) strict = true } - # Instance resource "aws_instance" "app_server" { ami = var.instance_ami diff --git a/modules/instance/variables.tf b/modules/instance/variables.tf index 1bbd0db..cd8442a 100644 --- a/modules/instance/variables.tf +++ b/modules/instance/variables.tf @@ -5,7 +5,7 @@ variable "user" { variable "ssh_key" { - description = "public key path" + description = "public key" type = string } diff --git a/modules/ssh/main.tf b/modules/ssh/main.tf new file mode 100644 index 0000000..8eddc13 --- /dev/null +++ b/modules/ssh/main.tf @@ -0,0 +1,9 @@ +resource "tls_private_key" "test" { + algorithm = "RSA" +} + +resource "local_file" "private_key" { + content = tls_private_key.test.private_key_pem + filename = "ssh_keys/${var.env}.pem" + file_permission = "0600" +} \ No newline at end of file diff --git a/modules/ssh/outputs.tf b/modules/ssh/outputs.tf new file mode 100644 index 0000000..caf4e62 --- /dev/null +++ b/modules/ssh/outputs.tf @@ -0,0 +1,11 @@ +output "private_key_pem" { + value = tls_private_key.test.private_key_pem +} + +output "public_key_pem" { + value = tls_private_key.test.public_key_pem +} + +output "public_key_openssh" { + value = tls_private_key.test.public_key_openssh +} \ No newline at end of file diff --git a/modules/ssh/variables.tf b/modules/ssh/variables.tf new file mode 100644 index 0000000..f61ff41 --- /dev/null +++ b/modules/ssh/variables.tf @@ -0,0 +1,4 @@ +variable "env" { + description = "ssh env" + type = string +} \ No newline at end of file diff --git a/terraform.tfvars b/terraform.tfvars index a4028df..385891f 100644 --- a/terraform.tfvars +++ b/terraform.tfvars @@ -1,5 +1,5 @@ -region = "us-east-1" -instance_ami = "ami-09e2e5104f310ffb5" -instance_user = "core" -instance_key_file = "ssh_keys/id_rsa_instance_key.pub" -image = "kaitoendo/ping-pong:latest" \ No newline at end of file +region = "us-east-1" +instance_ami = "ami-09e2e5104f310ffb5" +instance_user = "core" +image = "kaitoendo/ping-pong:latest" +env = "staging" \ No newline at end of file diff --git a/variables.tf b/variables.tf index cc97280..e46a945 100644 --- a/variables.tf +++ b/variables.tf @@ -13,12 +13,12 @@ variable "instance_user" { type = string } -variable "instance_key_file" { - description = "public key path" - type = string -} - variable "image" { description = "container image you will run on the instance" type = string } + +variable "env" { + description = "environment" + type = string +} \ No newline at end of file