![見出し画像](https://assets.st-note.com/production/uploads/images/64721530/rectangle_large_type_2_819dd352cb90361bfff04831d9e89b43.jpeg?width=1200)
【108】【AWS】【Terraform】【Docker】docker勉強用の環境を構築する
この記事はTerraformを使ってdocker勉強用のAWS環境を構築する記事です。
この本ではdockerの勉強ためにAWSの環境を使っておこないます。
コンソール上でAWSの環境構築について書かれています。
コンソールではなく、terraformを使ってdocker勉強のAWS環境を構築しましょう。
baseのコード
baseのコードはこの記事です。
ちょっと書き換えるだけで構築できます。
terraformめちゃくちゃ便利ですよね。
変更点1(ストレージサイズの変更)
ストレージの変更
dockerを使う際、ストレージは既定の8GBでは少ないので20GBにしています。
変更2(セキュリティグループの変更)
ingressルールの追加
HTTPやHTTPS通信を可能にします。
主要なポート番号下記の通りです。
TCP 20 : FTP (データ)
TCP 21 : FTP (制御)
TCP 22 : SSH
TCP 23 : Telnet
TCP 25 : SMTP
UDP 53 : DNS
UDP 67 : DHCP(サーバ)
UDP 68 : DHCP(クライアント)
TCP 80 : HTTP
TCP 110 : POP3
UDP 123 : NTP
TCP 443 : HTTPS
WELL KNOWN PORT NUMBERS 0~1023
resource "aws_security_group" "docker_ubuntu" {
name = "docker_ubuntu"
vpc_id = aws_vpc.docker_ubuntu.id
egress {
from_port = 0
protocol = "-1"
to_port = 0
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_security_group_rule" "ssh" {
from_port = 22
protocol = "tcp"
security_group_id = aws_security_group.docker_ubuntu.id
to_port = 22
type = "ingress"
cidr_blocks = ["0.0.0.0/0"]
}
resource "aws_security_group_rule" "HTTP" {
from_port = 80
protocol = "tcp"
security_group_id = aws_security_group.docker_ubuntu.id
to_port = 80
type = "ingress"
cidr_blocks = ["0.0.0.0/0"]
}
resource "aws_security_group_rule" "HTTPS" {
from_port = 443
protocol = "tcp"
security_group_id = aws_security_group.docker_ubuntu.id
to_port = 443
type = "ingress"
cidr_blocks = ["0.0.0.0/0"]
}
resource "aws_security_group_rule" "web_testing" {
from_port = 8080
protocol = "tcp"
security_group_id = aws_security_group.docker_ubuntu.id
to_port = 8082
type = "ingress"
cidr_blocks = ["0.0.0.0/0"]
}
resource "aws_security_group_rule" "Kubernetes_testing" {
from_port = 30000
protocol = "tcp"
security_group_id = aws_security_group.docker_ubuntu.id
to_port = 30000
type = "ingress"
cidr_blocks = ["0.0.0.0/0"]
}
HTTP、HTTPS通信を行うようにしました。
8080-8082はポート80に似ているという点で実験用でよく使われるポート番号です。
30000ポートはKubernetesの勉強で使います。
Kubernetes NodePortが30000~32767だからです。
コード全文です。
main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.27"
}
}
required_version = ">= 0.14.9"
}
provider "aws" {
profile = "default"
region = "ap-northeast-1"
}
resource "aws_instance" "app_server" {
// このamiはUbuntuです
ami = "ami-0df99b3a8349462c6"
// ami = "ami-02892a4ea9bfa2192"
instance_type = "t3.micro"
key_name = aws_key_pair.auth.id
associate_public_ip_address = true
subnet_id = aws_subnet.public.id
vpc_security_group_ids = [aws_security_group.docker_ubuntu.id]
root_block_device {
volume_size = 20
}
tags = {
Name = "ExampleAppServerInstance"
}
}
resource "aws_key_pair" "auth" {
key_name = var.key_name
public_key = var.public_key
}
resource "aws_security_group" "docker_ubuntu" {
name = "docker_ubuntu"
vpc_id = aws_vpc.docker_ubuntu.id
egress {
from_port = 0
protocol = "-1"
to_port = 0
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_security_group_rule" "ssh" {
from_port = 22
protocol = "tcp"
security_group_id = aws_security_group.docker_ubuntu.id
to_port = 22
type = "ingress"
cidr_blocks = ["0.0.0.0/0"]
}
resource "aws_security_group_rule" "HTTP" {
from_port = 80
protocol = "tcp"
security_group_id = aws_security_group.docker_ubuntu.id
to_port = 80
type = "ingress"
cidr_blocks = ["0.0.0.0/0"]
}
resource "aws_security_group_rule" "HTTPS" {
from_port = 443
protocol = "tcp"
security_group_id = aws_security_group.docker_ubuntu.id
to_port = 443
type = "ingress"
cidr_blocks = ["0.0.0.0/0"]
}
resource "aws_security_group_rule" "web_testing" {
from_port = 8080
protocol = "tcp"
security_group_id = aws_security_group.docker_ubuntu.id
to_port = 8082
type = "ingress"
cidr_blocks = ["0.0.0.0/0"]
}
resource "aws_security_group_rule" "Kubernetes_testing" {
from_port = 30000
protocol = "tcp"
security_group_id = aws_security_group.docker_ubuntu.id
to_port = 30000
type = "ingress"
cidr_blocks = ["0.0.0.0/0"]
}
route_table_public.tf
resource "aws_route_table" "public" {
vpc_id = aws_vpc.docker_ubuntu.id
tags = {
Name = "docker_ubuntu_route_table_public"
}
}
resource "aws_internet_gateway" "docker_ubuntu" {
vpc_id = aws_vpc.docker_ubuntu.id
tags = {
Name = "terraform_igw_docker_ubuntu"
}
}
//ルート
//0.0.0.0/0にigwをつなぐ
resource "aws_route" "public" {
route_table_id = aws_route_table.public.id
gateway_id = aws_internet_gateway.docker_ubuntu.id
destination_cidr_block = "0.0.0.0/0"
}
//サブネットの関連付け
resource "aws_route_table_association" "public" {
route_table_id = aws_route_table.public.id
subnet_id = aws_subnet.public.id
}
//サブネット
resource "aws_subnet" "public" {
cidr_block = "10.0.1.0/24"
vpc_id = aws_vpc.docker_ubuntu.id
// このサブネットで起動したインスタンスに自動的に
// IPアドレスを割り当ててくれる
map_public_ip_on_launch = true
availability_zone = "ap-northeast-1a"
tags = {
Name = "docker_ubuntu_subnet_public_basic_1a"
}
}
variable.tf
variable "key_name" {
description = <<DESCRIPTION
your_key.pubを入力してください。
.pubがつく公開鍵の方です。
秘密鍵と間違えないように。
DESCRIPTION
}
variable "public_key" {
description = <<DESCRIPTION
cat ~/.ssh/your_key.pub
で出力された値を直打ちして下さい。
(パス名のみだと、私の環境ではエラーがでました。)
DESCRIPTION
}
vpc.tf
resource "aws_vpc" "docker_ubuntu" {
cidr_block = "10.0.0.0/16"
// DNSサーバーによる名前解決を有効にする
enable_dns_support = true
// パブリックDNSホスト名を自動的に割り当てる
enable_dns_hostnames = true
tags = {
Name = "docker_ubuntu"
}
}
接続する前にキーペアの作成と設定をしましょう。
EC2に接続
接続についてはこの記事で。
amiでubuntuを使っているのでデフォルトユーザー名はubuntuになります。
Dockerをインストールする
接続が完了したらdockerをインストールしましょう。
ubuntuのインストールは下記公式記事を参考にしてください。
https://docs.docker.com/engine/install/ubuntu/
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
本来これで使えるようになりますが使えませんでした。。。
sudo apt install docker.io
とすると、使えるようになりました。
さぁ、Dockerの勉強をがんがんやっていきましょう!
参考文献
さわって学ぶクラウドインフラ docker基礎からのコンテナ構築
実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing)) オンデマンド (ペーパーバック)
最後に
私がブログを書く目的は、素晴らしい本や、素晴らしい方々の技術記事を知って頂きたいからです。ぜひ、上記の参考文献を見て下さい。(noteなので広告とかは一切ありません。)
現在、株式会社grabssに行くために最後の悪あがきをしています!!
過去の活動
30日間でブログ記事を100件投稿しました。
トータルの投稿数
この記事は108件目の投稿です。
よろしければ、スキボタン及びサポートお願いします。勉強の励みになります。
この記事が気に入ったらサポートをしてみませんか?