[{"data":1,"prerenderedAt":1698},["ShallowReactive",2],{"layout-sidebar-lab-terraform_aws_ec2_rds":3,"lab-terraform_aws_ec2_rds":982},{"id":4,"title":5,"body":6,"date":968,"description":969,"doc":970,"extension":971,"git":970,"image":972,"isExperimentation":104,"meta":973,"navigation":104,"path":974,"seo":975,"stem":976,"tags":977,"type":978,"updatedAt":970,"website":970,"__hash__":981},"laboratoire\u002Flaboratoire\u002Fterraform_aws_ec2_rds.md","Terraform  - AWS EC2 + RDS",{"type":7,"value":8,"toc":960},"minimark",[9,14,18,23,26,38,215,227,233,237,240,302,313,317,332,463,467,474,485,492,498,501,520,914,919,956],[10,11,13],"h1",{"id":12},"terraform-aws-ec2-rds-postgresql","Terraform  - AWS EC2 + RDS PostgreSQL",[15,16,17],"p",{},"Cette experimentation consiste a deployer une instance EC2 et une base de donnees RDS PostgreSQL, puis a les integrer dans une architecture reseau AWS coherente.\nL'objectif est de construire une base d'infrastructure simple avec Terraform, en incluant le VPC, les subnets, le routage et les regles de securite.",[19,20,22],"h2",{"id":21},"configuration-et-monitoring-rapide","Configuration et monitoring rapide",[15,24,25],{},"Dans un premier temps, on configure le provider AWS et un mecanisme d'alerte budgetaire.\nL'idee est de limiter les risques de depassement de cout pendant les tests.",[15,27,28,29,33,34,37],{},"On cree un fichier ",[30,31,32],"code",{},"provider.tf"," avec les informations de base (pensez a executer ",[30,35,36],{},"aws configure"," au prealable) :",[39,40,45],"pre",{"className":41,"code":42,"language":43,"meta":44,"style":44},"language-yaml shiki shiki-themes material-theme-lighter github-light monokai","terraform {\n  required_providers {\n    aws = {\n      source  = \"hashicorp\u002Faws\"\n      version = \"~> 6.0\"\n    }\n  }\n}\n\nprovider \"aws\" {\n  region = \"eu-west-3\"\n}\n\nresource \"aws_budgets_budget\" \"example\" {\n  name         = \"EC2_RDS_BUDGET\"\n  budget_type  = \"COST\"\n  time_unit    = \"MONTHLY\"\n  limit_amount = \"1\"\n  limit_unit   = \"USD\"\n\n  notification {\n    comparison_operator        = \"GREATER_THAN\"\n    threshold                  = 50\n    threshold_type             = \"PERCENTAGE\"\n    notification_type          = \"ACTUAL\"\n    subscriber_email_addresses = [\"contact@kernellab.fr\"]\n  }\n}\n","yaml","",[30,46,47,56,62,68,74,80,87,93,99,106,112,118,123,128,134,140,146,152,158,164,169,175,181,187,193,199,205,210],{"__ignoreMap":44},[48,49,52],"span",{"class":50,"line":51},"line",1,[48,53,55],{"class":54},"sqNgn","terraform {\n",[48,57,59],{"class":50,"line":58},2,[48,60,61],{"class":54},"  required_providers {\n",[48,63,65],{"class":50,"line":64},3,[48,66,67],{"class":54},"    aws = {\n",[48,69,71],{"class":50,"line":70},4,[48,72,73],{"class":54},"      source  = \"hashicorp\u002Faws\"\n",[48,75,77],{"class":50,"line":76},5,[48,78,79],{"class":54},"      version = \"~> 6.0\"\n",[48,81,83],{"class":50,"line":82},6,[48,84,86],{"class":85},"s_bef","    }\n",[48,88,90],{"class":50,"line":89},7,[48,91,92],{"class":85},"  }\n",[48,94,96],{"class":50,"line":95},8,[48,97,98],{"class":85},"}\n",[48,100,102],{"class":50,"line":101},9,[48,103,105],{"emptyLinePlaceholder":104},true,"\n",[48,107,109],{"class":50,"line":108},10,[48,110,111],{"class":54},"provider \"aws\" {\n",[48,113,115],{"class":50,"line":114},11,[48,116,117],{"class":54},"  region = \"eu-west-3\"\n",[48,119,121],{"class":50,"line":120},12,[48,122,98],{"class":85},[48,124,126],{"class":50,"line":125},13,[48,127,105],{"emptyLinePlaceholder":104},[48,129,131],{"class":50,"line":130},14,[48,132,133],{"class":54},"resource \"aws_budgets_budget\" \"example\" {\n",[48,135,137],{"class":50,"line":136},15,[48,138,139],{"class":54},"  name         = \"EC2_RDS_BUDGET\"\n",[48,141,143],{"class":50,"line":142},16,[48,144,145],{"class":54},"  budget_type  = \"COST\"\n",[48,147,149],{"class":50,"line":148},17,[48,150,151],{"class":54},"  time_unit    = \"MONTHLY\"\n",[48,153,155],{"class":50,"line":154},18,[48,156,157],{"class":54},"  limit_amount = \"1\"\n",[48,159,161],{"class":50,"line":160},19,[48,162,163],{"class":54},"  limit_unit   = \"USD\"\n",[48,165,167],{"class":50,"line":166},20,[48,168,105],{"emptyLinePlaceholder":104},[48,170,172],{"class":50,"line":171},21,[48,173,174],{"class":54},"  notification {\n",[48,176,178],{"class":50,"line":177},22,[48,179,180],{"class":54},"    comparison_operator        = \"GREATER_THAN\"\n",[48,182,184],{"class":50,"line":183},23,[48,185,186],{"class":54},"    threshold                  = 50\n",[48,188,190],{"class":50,"line":189},24,[48,191,192],{"class":54},"    threshold_type             = \"PERCENTAGE\"\n",[48,194,196],{"class":50,"line":195},25,[48,197,198],{"class":54},"    notification_type          = \"ACTUAL\"\n",[48,200,202],{"class":50,"line":201},26,[48,203,204],{"class":54},"    subscriber_email_addresses = [\"contact@kernellab.fr\"]\n",[48,206,208],{"class":50,"line":207},27,[48,209,92],{"class":85},[48,211,213],{"class":50,"line":212},28,[48,214,98],{"class":85},[15,216,217,218,221,222,226],{},"La region choisie est ",[30,219,220],{},"eu-west-3"," (Paris).\nLa ressource ",[223,224,225],"strong",{},"aws_budgets_budget"," permet de definir un seuil de depense mensuel.",[228,229,230],"note",{},[15,231,232],{},"Ici, une notification email est envoyee quand 50% du budget defini (1 USD pour le test) est atteint.",[19,234,236],{"id":235},"creation-de-linstance-ec2","Creation de l'instance EC2",[15,238,239],{},"Ensuite, on declare l'instance EC2 :",[39,241,243],{"className":41,"code":242,"language":43,"meta":44,"style":44},"resource \"aws_instance\" \"ec2_instance\" {\n  ami                         = \"ami-007dcf089b8078f1a\"\n  instance_type               = \"t3.micro\"\n  subnet_id                   = aws_subnet.subnet.id\n  vpc_security_group_ids      = [aws_security_group.security_group.id]\n  associate_public_ip_address = true\n  key_name                    = \"master-key\"\n\n  tags = {\n    Name = \"Ubuntu-terraform\"\n  }\n}\n",[30,244,245,250,255,260,265,270,275,280,284,289,294,298],{"__ignoreMap":44},[48,246,247],{"class":50,"line":51},[48,248,249],{"class":54},"resource \"aws_instance\" \"ec2_instance\" {\n",[48,251,252],{"class":50,"line":58},[48,253,254],{"class":54},"  ami                         = \"ami-007dcf089b8078f1a\"\n",[48,256,257],{"class":50,"line":64},[48,258,259],{"class":54},"  instance_type               = \"t3.micro\"\n",[48,261,262],{"class":50,"line":70},[48,263,264],{"class":54},"  subnet_id                   = aws_subnet.subnet.id\n",[48,266,267],{"class":50,"line":76},[48,268,269],{"class":54},"  vpc_security_group_ids      = [aws_security_group.security_group.id]\n",[48,271,272],{"class":50,"line":82},[48,273,274],{"class":54},"  associate_public_ip_address = true\n",[48,276,277],{"class":50,"line":89},[48,278,279],{"class":54},"  key_name                    = \"master-key\"\n",[48,281,282],{"class":50,"line":95},[48,283,105],{"emptyLinePlaceholder":104},[48,285,286],{"class":50,"line":101},[48,287,288],{"class":54},"  tags = {\n",[48,290,291],{"class":50,"line":108},[48,292,293],{"class":54},"    Name = \"Ubuntu-terraform\"\n",[48,295,296],{"class":50,"line":114},[48,297,92],{"class":85},[48,299,300],{"class":50,"line":120},[48,301,98],{"class":85},[15,303,304,305,308,309,312],{},"Cette instance utilise une image Ubuntu (",[30,306,307],{},"ami-007dcf089b8078f1a",") et un type ",[30,310,311],{},"t3.micro",".\nElle est placee dans un subnet du VPC, associee a un security group dedie, et recoit une IP publique pour l'acces distant.",[19,314,316],{"id":315},"creation-du-groupe-de-securite","Creation du groupe de securite",[15,318,319,320,323,324,327,328,331],{},"On cree ensuite un security group rattache au VPC.\nDeux regles d'entree sont ajoutees : le port ",[30,321,322],{},"22"," (SSH) et le port ",[30,325,326],{},"5432"," (PostgreSQL).\nLe SSH est volontairement restreint à mon IP publique courante (recupérée dynamiquement), ce qui est une bonne pratique de securite.\nLe port PostgreSQL est ici ouvert sur ",[30,329,330],{},"0.0.0.0\u002F0"," pour simplifier l'experimentation, mais en production il doit etre limite a des sources connues (par exemple un autre security group ou un CIDR prive).",[39,333,335],{"className":41,"code":334,"language":43,"meta":44,"style":44},"# Groupe de sécurité\nresource \"aws_security_group\" \"security_group\" {\n  name        = \"security_group\"\n  description = \"Security group for EC2 instance\"\n  vpc_id      = aws_vpc.vpc.id\n\n  ingress {\n    from_port   = 22\n    to_port     = 22\n    protocol    = \"tcp\"\n    cidr_blocks = [\"${data.http.my_ip.response_body}\u002F32\"]\n  }\n\n  ingress {\n    from_port   = 5432\n    to_port     = 5432\n    protocol    = \"tcp\"\n    cidr_blocks = [\"0.0.0.0\u002F0\"]\n  }\n\n  egress {\n    from_port   = 0\n    to_port     = 0\n    protocol    = \"-1\"\n    cidr_blocks = [\"0.0.0.0\u002F0\"]\n  }\n}\n",[30,336,337,343,348,353,358,363,367,372,377,382,387,392,396,400,404,409,414,418,423,427,431,436,441,446,451,455,459],{"__ignoreMap":44},[48,338,339],{"class":50,"line":51},[48,340,342],{"class":341},"skxtS","# Groupe de sécurité\n",[48,344,345],{"class":50,"line":58},[48,346,347],{"class":54},"resource \"aws_security_group\" \"security_group\" {\n",[48,349,350],{"class":50,"line":64},[48,351,352],{"class":54},"  name        = \"security_group\"\n",[48,354,355],{"class":50,"line":70},[48,356,357],{"class":54},"  description = \"Security group for EC2 instance\"\n",[48,359,360],{"class":50,"line":76},[48,361,362],{"class":54},"  vpc_id      = aws_vpc.vpc.id\n",[48,364,365],{"class":50,"line":82},[48,366,105],{"emptyLinePlaceholder":104},[48,368,369],{"class":50,"line":89},[48,370,371],{"class":54},"  ingress {\n",[48,373,374],{"class":50,"line":95},[48,375,376],{"class":54},"    from_port   = 22\n",[48,378,379],{"class":50,"line":101},[48,380,381],{"class":54},"    to_port     = 22\n",[48,383,384],{"class":50,"line":108},[48,385,386],{"class":54},"    protocol    = \"tcp\"\n",[48,388,389],{"class":50,"line":114},[48,390,391],{"class":54},"    cidr_blocks = [\"${data.http.my_ip.response_body}\u002F32\"]\n",[48,393,394],{"class":50,"line":120},[48,395,92],{"class":85},[48,397,398],{"class":50,"line":125},[48,399,105],{"emptyLinePlaceholder":104},[48,401,402],{"class":50,"line":130},[48,403,371],{"class":54},[48,405,406],{"class":50,"line":136},[48,407,408],{"class":54},"    from_port   = 5432\n",[48,410,411],{"class":50,"line":142},[48,412,413],{"class":54},"    to_port     = 5432\n",[48,415,416],{"class":50,"line":148},[48,417,386],{"class":54},[48,419,420],{"class":50,"line":154},[48,421,422],{"class":54},"    cidr_blocks = [\"0.0.0.0\u002F0\"]\n",[48,424,425],{"class":50,"line":160},[48,426,92],{"class":85},[48,428,429],{"class":50,"line":166},[48,430,105],{"emptyLinePlaceholder":104},[48,432,433],{"class":50,"line":171},[48,434,435],{"class":54},"  egress {\n",[48,437,438],{"class":50,"line":177},[48,439,440],{"class":54},"    from_port   = 0\n",[48,442,443],{"class":50,"line":183},[48,444,445],{"class":54},"    to_port     = 0\n",[48,447,448],{"class":50,"line":189},[48,449,450],{"class":54},"    protocol    = \"-1\"\n",[48,452,453],{"class":50,"line":195},[48,454,422],{"class":54},[48,456,457],{"class":50,"line":201},[48,458,92],{"class":85},[48,460,461],{"class":50,"line":207},[48,462,98],{"class":85},[19,464,466],{"id":465},"creation-du-vpc-des-subnets-et-du-routage","Creation du VPC, des subnets et du routage",[15,468,469,470,473],{},"Cette section est le coeur reseau de l'infrastructure.\nOn cree un VPC (",[30,471,472],{},"10.0.0.0\u002F16",") avec le support DNS active, ce qui permet aux ressources de resoudre les noms internes et de beneficier d'hostnames AWS.",[15,475,476,477,480,481,484],{},"On ajoute ensuite deux subnets dans deux zones de disponibilite differentes (",[30,478,479],{},"eu-west-3a"," et ",[30,482,483],{},"eu-west-3b",").\nCe choix ameliore la disponibilite et permet de preparer le terrain pour RDS, qui s'appuie sur un groupe de subnets.",[15,486,487,488,491],{},"La ressource ",[30,489,490],{},"aws_db_subnet_group"," indique explicitement à RDS quels subnets utiliser pour placer la base.\nMeme dans une architecture simple, c'est un élément important pour organiser proprement le plan d'adréssage.",[15,493,494,495,497],{},"On cree aussi une Internet Gateway, attachee au VPC, afin de donner un acces Internet aux subnets qui en ont besoin.\nLa table de routage ajoute une route par defaut (",[30,496,330],{},") vers cette gateway.\nEnfin, les associations lient cette table de routage aux deux subnets pour rendre la route effective.",[15,499,500],{},"En resume :",[502,503,504,508,511,514,517],"ul",{},[505,506,507],"li",{},"le VPC isole logiquement l'infrastructure ;",[505,509,510],{},"les subnets segmentent l'espace reseau ;",[505,512,513],{},"l'Internet Gateway ouvre l'acces sortant\u002Fentrant selon les regles ;",[505,515,516],{},"la route table definit le chemin du trafic ;",[505,518,519],{},"les associations appliquent ce routage a chaque subnet cible.",[39,521,523],{"className":41,"code":522,"language":43,"meta":44,"style":44},"#Création du VPC\nresource \"aws_vpc\" \"vpc\" {\n  cidr_block           = \"10.0.0.0\u002F16\"\n  enable_dns_support   = true\n  enable_dns_hostnames = true\n\n  tags = {\n    Name = \"vpc-terraform\"\n  }\n}\n\n#Création du subnet\nresource \"aws_subnet\" \"subnet\" {\n  vpc_id                  = aws_vpc.vpc.id\n  cidr_block              = \"10.0.0.0\u002F24\"\n  availability_zone       = \"eu-west-3a\"\n  map_public_ip_on_launch = true\n\n  tags = {\n    Name = \"subnet-ec2-db-1\"\n  }\n}\n\nresource \"aws_subnet\" \"subnet_2\" {\n  vpc_id                  = aws_vpc.vpc.id\n  cidr_block              = \"10.0.1.0\u002F24\"\n  availability_zone       = \"eu-west-3b\"\n  map_public_ip_on_launch = true\n\n  tags = {\n    Name = \"subnet-ec2-db-2\"\n  }\n}\n\nresource \"aws_db_subnet_group\" \"db_subnet_group\" {\n  name       = \"db-subnet-group\"\n  subnet_ids = [aws_subnet.subnet.id, aws_subnet.subnet_2.id]\n\n  tags = {\n    Name = \"My DB subnet group\"\n  }\n}\n\n#Création de l'internet gateway\nresource \"aws_internet_gateway\" \"internet_gateway\" {\n  vpc_id = aws_vpc.vpc.id\n\n  tags = {\n    Name = \"internet-gateway-terraform\"\n  }\n}\n\n#Création du route table\nresource \"aws_route_table\" \"route_table\" {\n  vpc_id = aws_vpc.vpc.id\n\n  route {\n    cidr_block = \"0.0.0.0\u002F0\"\n    gateway_id = aws_internet_gateway.internet_gateway.id\n  }\n\n  tags = {\n    Name = \"route-table-terraform\"\n  }\n}\n\n#Association du route table au subnet\nresource \"aws_route_table_association\" \"route_table_association\" {\n  route_table_id = aws_route_table.route_table.id\n  subnet_id      = aws_subnet.subnet.id\n}\n\nresource \"aws_route_table_association\" \"route_table_association_2\" {\n  route_table_id = aws_route_table.route_table.id\n  subnet_id      = aws_subnet.subnet_2.id\n}\n\n",[30,524,525,530,535,540,545,550,554,558,563,567,571,575,580,585,590,595,600,605,609,613,618,622,626,630,635,639,644,649,653,658,663,669,674,679,684,690,696,702,707,712,718,723,728,733,739,745,751,756,761,767,772,777,782,788,794,799,804,810,816,822,827,832,837,843,848,853,858,864,870,876,882,887,892,898,903,909],{"__ignoreMap":44},[48,526,527],{"class":50,"line":51},[48,528,529],{"class":341},"#Création du VPC\n",[48,531,532],{"class":50,"line":58},[48,533,534],{"class":54},"resource \"aws_vpc\" \"vpc\" {\n",[48,536,537],{"class":50,"line":64},[48,538,539],{"class":54},"  cidr_block           = \"10.0.0.0\u002F16\"\n",[48,541,542],{"class":50,"line":70},[48,543,544],{"class":54},"  enable_dns_support   = true\n",[48,546,547],{"class":50,"line":76},[48,548,549],{"class":54},"  enable_dns_hostnames = true\n",[48,551,552],{"class":50,"line":82},[48,553,105],{"emptyLinePlaceholder":104},[48,555,556],{"class":50,"line":89},[48,557,288],{"class":54},[48,559,560],{"class":50,"line":95},[48,561,562],{"class":54},"    Name = \"vpc-terraform\"\n",[48,564,565],{"class":50,"line":101},[48,566,92],{"class":85},[48,568,569],{"class":50,"line":108},[48,570,98],{"class":85},[48,572,573],{"class":50,"line":114},[48,574,105],{"emptyLinePlaceholder":104},[48,576,577],{"class":50,"line":120},[48,578,579],{"class":341},"#Création du subnet\n",[48,581,582],{"class":50,"line":125},[48,583,584],{"class":54},"resource \"aws_subnet\" \"subnet\" {\n",[48,586,587],{"class":50,"line":130},[48,588,589],{"class":54},"  vpc_id                  = aws_vpc.vpc.id\n",[48,591,592],{"class":50,"line":136},[48,593,594],{"class":54},"  cidr_block              = \"10.0.0.0\u002F24\"\n",[48,596,597],{"class":50,"line":142},[48,598,599],{"class":54},"  availability_zone       = \"eu-west-3a\"\n",[48,601,602],{"class":50,"line":148},[48,603,604],{"class":54},"  map_public_ip_on_launch = true\n",[48,606,607],{"class":50,"line":154},[48,608,105],{"emptyLinePlaceholder":104},[48,610,611],{"class":50,"line":160},[48,612,288],{"class":54},[48,614,615],{"class":50,"line":166},[48,616,617],{"class":54},"    Name = \"subnet-ec2-db-1\"\n",[48,619,620],{"class":50,"line":171},[48,621,92],{"class":85},[48,623,624],{"class":50,"line":177},[48,625,98],{"class":85},[48,627,628],{"class":50,"line":183},[48,629,105],{"emptyLinePlaceholder":104},[48,631,632],{"class":50,"line":189},[48,633,634],{"class":54},"resource \"aws_subnet\" \"subnet_2\" {\n",[48,636,637],{"class":50,"line":195},[48,638,589],{"class":54},[48,640,641],{"class":50,"line":201},[48,642,643],{"class":54},"  cidr_block              = \"10.0.1.0\u002F24\"\n",[48,645,646],{"class":50,"line":207},[48,647,648],{"class":54},"  availability_zone       = \"eu-west-3b\"\n",[48,650,651],{"class":50,"line":212},[48,652,604],{"class":54},[48,654,656],{"class":50,"line":655},29,[48,657,105],{"emptyLinePlaceholder":104},[48,659,661],{"class":50,"line":660},30,[48,662,288],{"class":54},[48,664,666],{"class":50,"line":665},31,[48,667,668],{"class":54},"    Name = \"subnet-ec2-db-2\"\n",[48,670,672],{"class":50,"line":671},32,[48,673,92],{"class":85},[48,675,677],{"class":50,"line":676},33,[48,678,98],{"class":85},[48,680,682],{"class":50,"line":681},34,[48,683,105],{"emptyLinePlaceholder":104},[48,685,687],{"class":50,"line":686},35,[48,688,689],{"class":54},"resource \"aws_db_subnet_group\" \"db_subnet_group\" {\n",[48,691,693],{"class":50,"line":692},36,[48,694,695],{"class":54},"  name       = \"db-subnet-group\"\n",[48,697,699],{"class":50,"line":698},37,[48,700,701],{"class":54},"  subnet_ids = [aws_subnet.subnet.id, aws_subnet.subnet_2.id]\n",[48,703,705],{"class":50,"line":704},38,[48,706,105],{"emptyLinePlaceholder":104},[48,708,710],{"class":50,"line":709},39,[48,711,288],{"class":54},[48,713,715],{"class":50,"line":714},40,[48,716,717],{"class":54},"    Name = \"My DB subnet group\"\n",[48,719,721],{"class":50,"line":720},41,[48,722,92],{"class":85},[48,724,726],{"class":50,"line":725},42,[48,727,98],{"class":85},[48,729,731],{"class":50,"line":730},43,[48,732,105],{"emptyLinePlaceholder":104},[48,734,736],{"class":50,"line":735},44,[48,737,738],{"class":341},"#Création de l'internet gateway\n",[48,740,742],{"class":50,"line":741},45,[48,743,744],{"class":54},"resource \"aws_internet_gateway\" \"internet_gateway\" {\n",[48,746,748],{"class":50,"line":747},46,[48,749,750],{"class":54},"  vpc_id = aws_vpc.vpc.id\n",[48,752,754],{"class":50,"line":753},47,[48,755,105],{"emptyLinePlaceholder":104},[48,757,759],{"class":50,"line":758},48,[48,760,288],{"class":54},[48,762,764],{"class":50,"line":763},49,[48,765,766],{"class":54},"    Name = \"internet-gateway-terraform\"\n",[48,768,770],{"class":50,"line":769},50,[48,771,92],{"class":85},[48,773,775],{"class":50,"line":774},51,[48,776,98],{"class":85},[48,778,780],{"class":50,"line":779},52,[48,781,105],{"emptyLinePlaceholder":104},[48,783,785],{"class":50,"line":784},53,[48,786,787],{"class":341},"#Création du route table\n",[48,789,791],{"class":50,"line":790},54,[48,792,793],{"class":54},"resource \"aws_route_table\" \"route_table\" {\n",[48,795,797],{"class":50,"line":796},55,[48,798,750],{"class":54},[48,800,802],{"class":50,"line":801},56,[48,803,105],{"emptyLinePlaceholder":104},[48,805,807],{"class":50,"line":806},57,[48,808,809],{"class":54},"  route {\n",[48,811,813],{"class":50,"line":812},58,[48,814,815],{"class":54},"    cidr_block = \"0.0.0.0\u002F0\"\n",[48,817,819],{"class":50,"line":818},59,[48,820,821],{"class":54},"    gateway_id = aws_internet_gateway.internet_gateway.id\n",[48,823,825],{"class":50,"line":824},60,[48,826,92],{"class":85},[48,828,830],{"class":50,"line":829},61,[48,831,105],{"emptyLinePlaceholder":104},[48,833,835],{"class":50,"line":834},62,[48,836,288],{"class":54},[48,838,840],{"class":50,"line":839},63,[48,841,842],{"class":54},"    Name = \"route-table-terraform\"\n",[48,844,846],{"class":50,"line":845},64,[48,847,92],{"class":85},[48,849,851],{"class":50,"line":850},65,[48,852,98],{"class":85},[48,854,856],{"class":50,"line":855},66,[48,857,105],{"emptyLinePlaceholder":104},[48,859,861],{"class":50,"line":860},67,[48,862,863],{"class":341},"#Association du route table au subnet\n",[48,865,867],{"class":50,"line":866},68,[48,868,869],{"class":54},"resource \"aws_route_table_association\" \"route_table_association\" {\n",[48,871,873],{"class":50,"line":872},69,[48,874,875],{"class":54},"  route_table_id = aws_route_table.route_table.id\n",[48,877,879],{"class":50,"line":878},70,[48,880,881],{"class":54},"  subnet_id      = aws_subnet.subnet.id\n",[48,883,885],{"class":50,"line":884},71,[48,886,98],{"class":85},[48,888,890],{"class":50,"line":889},72,[48,891,105],{"emptyLinePlaceholder":104},[48,893,895],{"class":50,"line":894},73,[48,896,897],{"class":54},"resource \"aws_route_table_association\" \"route_table_association_2\" {\n",[48,899,901],{"class":50,"line":900},74,[48,902,875],{"class":54},[48,904,906],{"class":50,"line":905},75,[48,907,908],{"class":54},"  subnet_id      = aws_subnet.subnet_2.id\n",[48,910,912],{"class":50,"line":911},76,[48,913,98],{"class":85},[915,916,918],"h3",{"id":917},"sorties-utiles-ec2-et-bdd","Sorties utiles (EC2 et BDD)",[39,920,922],{"className":41,"code":921,"language":43,"meta":44,"style":44},"output \"ec2_instance_public_ip\" {\n  value = aws_instance.ec2_instance.public_ip\n}\n\noutput \"db_instance_endpoint\" {\n  value = aws_db_instance.default.endpoint\n}\n",[30,923,924,929,934,938,942,947,952],{"__ignoreMap":44},[48,925,926],{"class":50,"line":51},[48,927,928],{"class":54},"output \"ec2_instance_public_ip\" {\n",[48,930,931],{"class":50,"line":58},[48,932,933],{"class":54},"  value = aws_instance.ec2_instance.public_ip\n",[48,935,936],{"class":50,"line":64},[48,937,98],{"class":85},[48,939,940],{"class":50,"line":70},[48,941,105],{"emptyLinePlaceholder":104},[48,943,944],{"class":50,"line":76},[48,945,946],{"class":54},"output \"db_instance_endpoint\" {\n",[48,948,949],{"class":50,"line":82},[48,950,951],{"class":54},"  value = aws_db_instance.default.endpoint\n",[48,953,954],{"class":50,"line":89},[48,955,98],{"class":85},[957,958,959],"style",{},"html pre.shiki code .sqNgn, html code.shiki .sqNgn{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#E6DB74}html pre.shiki code .s_bef, html code.shiki .s_bef{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#F8F8F2}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .skxtS, html code.shiki .skxtS{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#88846F;--shiki-dark-font-style:inherit}",{"title":44,"searchDepth":58,"depth":58,"links":961},[962,963,964,965],{"id":21,"depth":58,"text":22},{"id":235,"depth":58,"text":236},{"id":315,"depth":58,"text":316},{"id":465,"depth":58,"text":466,"children":966},[967],{"id":917,"depth":64,"text":918},"2026-04-13","Création d'une structure de base sur AWS avec Terraform (EC2 + RDS + VPC)",null,"md","\u002Flaboratoire\u002Fterraform_aws_ec2_rds.png",{},"\u002Flaboratoire\u002Fterraform_aws_ec2_rds",{"title":5,"description":969},"laboratoire\u002Fterraform_aws_ec2_rds",[978,979,980],"devops","terraform","aws","R9CLP5c6w03gagklV3k8q-mX-wvqZL-gV1SFvRiIApg",{"id":4,"title":5,"body":983,"date":968,"description":969,"doc":970,"extension":971,"git":970,"image":972,"isExperimentation":104,"meta":1695,"navigation":104,"path":974,"seo":1696,"stem":976,"tags":1697,"type":978,"updatedAt":970,"website":970,"__hash__":981},{"type":7,"value":984,"toc":1687},[985,987,989,991,993,999,1115,1121,1125,1127,1129,1181,1187,1189,1197,1309,1311,1315,1321,1325,1329,1331,1343,1651,1653,1685],[10,986,13],{"id":12},[15,988,17],{},[19,990,22],{"id":21},[15,992,25],{},[15,994,28,995,33,997,37],{},[30,996,32],{},[30,998,36],{},[39,1000,1001],{"className":41,"code":42,"language":43,"meta":44,"style":44},[30,1002,1003,1007,1011,1015,1019,1023,1027,1031,1035,1039,1043,1047,1051,1055,1059,1063,1067,1071,1075,1079,1083,1087,1091,1095,1099,1103,1107,1111],{"__ignoreMap":44},[48,1004,1005],{"class":50,"line":51},[48,1006,55],{"class":54},[48,1008,1009],{"class":50,"line":58},[48,1010,61],{"class":54},[48,1012,1013],{"class":50,"line":64},[48,1014,67],{"class":54},[48,1016,1017],{"class":50,"line":70},[48,1018,73],{"class":54},[48,1020,1021],{"class":50,"line":76},[48,1022,79],{"class":54},[48,1024,1025],{"class":50,"line":82},[48,1026,86],{"class":85},[48,1028,1029],{"class":50,"line":89},[48,1030,92],{"class":85},[48,1032,1033],{"class":50,"line":95},[48,1034,98],{"class":85},[48,1036,1037],{"class":50,"line":101},[48,1038,105],{"emptyLinePlaceholder":104},[48,1040,1041],{"class":50,"line":108},[48,1042,111],{"class":54},[48,1044,1045],{"class":50,"line":114},[48,1046,117],{"class":54},[48,1048,1049],{"class":50,"line":120},[48,1050,98],{"class":85},[48,1052,1053],{"class":50,"line":125},[48,1054,105],{"emptyLinePlaceholder":104},[48,1056,1057],{"class":50,"line":130},[48,1058,133],{"class":54},[48,1060,1061],{"class":50,"line":136},[48,1062,139],{"class":54},[48,1064,1065],{"class":50,"line":142},[48,1066,145],{"class":54},[48,1068,1069],{"class":50,"line":148},[48,1070,151],{"class":54},[48,1072,1073],{"class":50,"line":154},[48,1074,157],{"class":54},[48,1076,1077],{"class":50,"line":160},[48,1078,163],{"class":54},[48,1080,1081],{"class":50,"line":166},[48,1082,105],{"emptyLinePlaceholder":104},[48,1084,1085],{"class":50,"line":171},[48,1086,174],{"class":54},[48,1088,1089],{"class":50,"line":177},[48,1090,180],{"class":54},[48,1092,1093],{"class":50,"line":183},[48,1094,186],{"class":54},[48,1096,1097],{"class":50,"line":189},[48,1098,192],{"class":54},[48,1100,1101],{"class":50,"line":195},[48,1102,198],{"class":54},[48,1104,1105],{"class":50,"line":201},[48,1106,204],{"class":54},[48,1108,1109],{"class":50,"line":207},[48,1110,92],{"class":85},[48,1112,1113],{"class":50,"line":212},[48,1114,98],{"class":85},[15,1116,217,1117,221,1119,226],{},[30,1118,220],{},[223,1120,225],{},[228,1122,1123],{},[15,1124,232],{},[19,1126,236],{"id":235},[15,1128,239],{},[39,1130,1131],{"className":41,"code":242,"language":43,"meta":44,"style":44},[30,1132,1133,1137,1141,1145,1149,1153,1157,1161,1165,1169,1173,1177],{"__ignoreMap":44},[48,1134,1135],{"class":50,"line":51},[48,1136,249],{"class":54},[48,1138,1139],{"class":50,"line":58},[48,1140,254],{"class":54},[48,1142,1143],{"class":50,"line":64},[48,1144,259],{"class":54},[48,1146,1147],{"class":50,"line":70},[48,1148,264],{"class":54},[48,1150,1151],{"class":50,"line":76},[48,1152,269],{"class":54},[48,1154,1155],{"class":50,"line":82},[48,1156,274],{"class":54},[48,1158,1159],{"class":50,"line":89},[48,1160,279],{"class":54},[48,1162,1163],{"class":50,"line":95},[48,1164,105],{"emptyLinePlaceholder":104},[48,1166,1167],{"class":50,"line":101},[48,1168,288],{"class":54},[48,1170,1171],{"class":50,"line":108},[48,1172,293],{"class":54},[48,1174,1175],{"class":50,"line":114},[48,1176,92],{"class":85},[48,1178,1179],{"class":50,"line":120},[48,1180,98],{"class":85},[15,1182,304,1183,308,1185,312],{},[30,1184,307],{},[30,1186,311],{},[19,1188,316],{"id":315},[15,1190,319,1191,323,1193,327,1195,331],{},[30,1192,322],{},[30,1194,326],{},[30,1196,330],{},[39,1198,1199],{"className":41,"code":334,"language":43,"meta":44,"style":44},[30,1200,1201,1205,1209,1213,1217,1221,1225,1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269,1273,1277,1281,1285,1289,1293,1297,1301,1305],{"__ignoreMap":44},[48,1202,1203],{"class":50,"line":51},[48,1204,342],{"class":341},[48,1206,1207],{"class":50,"line":58},[48,1208,347],{"class":54},[48,1210,1211],{"class":50,"line":64},[48,1212,352],{"class":54},[48,1214,1215],{"class":50,"line":70},[48,1216,357],{"class":54},[48,1218,1219],{"class":50,"line":76},[48,1220,362],{"class":54},[48,1222,1223],{"class":50,"line":82},[48,1224,105],{"emptyLinePlaceholder":104},[48,1226,1227],{"class":50,"line":89},[48,1228,371],{"class":54},[48,1230,1231],{"class":50,"line":95},[48,1232,376],{"class":54},[48,1234,1235],{"class":50,"line":101},[48,1236,381],{"class":54},[48,1238,1239],{"class":50,"line":108},[48,1240,386],{"class":54},[48,1242,1243],{"class":50,"line":114},[48,1244,391],{"class":54},[48,1246,1247],{"class":50,"line":120},[48,1248,92],{"class":85},[48,1250,1251],{"class":50,"line":125},[48,1252,105],{"emptyLinePlaceholder":104},[48,1254,1255],{"class":50,"line":130},[48,1256,371],{"class":54},[48,1258,1259],{"class":50,"line":136},[48,1260,408],{"class":54},[48,1262,1263],{"class":50,"line":142},[48,1264,413],{"class":54},[48,1266,1267],{"class":50,"line":148},[48,1268,386],{"class":54},[48,1270,1271],{"class":50,"line":154},[48,1272,422],{"class":54},[48,1274,1275],{"class":50,"line":160},[48,1276,92],{"class":85},[48,1278,1279],{"class":50,"line":166},[48,1280,105],{"emptyLinePlaceholder":104},[48,1282,1283],{"class":50,"line":171},[48,1284,435],{"class":54},[48,1286,1287],{"class":50,"line":177},[48,1288,440],{"class":54},[48,1290,1291],{"class":50,"line":183},[48,1292,445],{"class":54},[48,1294,1295],{"class":50,"line":189},[48,1296,450],{"class":54},[48,1298,1299],{"class":50,"line":195},[48,1300,422],{"class":54},[48,1302,1303],{"class":50,"line":201},[48,1304,92],{"class":85},[48,1306,1307],{"class":50,"line":207},[48,1308,98],{"class":85},[19,1310,466],{"id":465},[15,1312,469,1313,473],{},[30,1314,472],{},[15,1316,476,1317,480,1319,484],{},[30,1318,479],{},[30,1320,483],{},[15,1322,487,1323,491],{},[30,1324,490],{},[15,1326,494,1327,497],{},[30,1328,330],{},[15,1330,500],{},[502,1332,1333,1335,1337,1339,1341],{},[505,1334,507],{},[505,1336,510],{},[505,1338,513],{},[505,1340,516],{},[505,1342,519],{},[39,1344,1345],{"className":41,"code":522,"language":43,"meta":44,"style":44},[30,1346,1347,1351,1355,1359,1363,1367,1371,1375,1379,1383,1387,1391,1395,1399,1403,1407,1411,1415,1419,1423,1427,1431,1435,1439,1443,1447,1451,1455,1459,1463,1467,1471,1475,1479,1483,1487,1491,1495,1499,1503,1507,1511,1515,1519,1523,1527,1531,1535,1539,1543,1547,1551,1555,1559,1563,1567,1571,1575,1579,1583,1587,1591,1595,1599,1603,1607,1611,1615,1619,1623,1627,1631,1635,1639,1643,1647],{"__ignoreMap":44},[48,1348,1349],{"class":50,"line":51},[48,1350,529],{"class":341},[48,1352,1353],{"class":50,"line":58},[48,1354,534],{"class":54},[48,1356,1357],{"class":50,"line":64},[48,1358,539],{"class":54},[48,1360,1361],{"class":50,"line":70},[48,1362,544],{"class":54},[48,1364,1365],{"class":50,"line":76},[48,1366,549],{"class":54},[48,1368,1369],{"class":50,"line":82},[48,1370,105],{"emptyLinePlaceholder":104},[48,1372,1373],{"class":50,"line":89},[48,1374,288],{"class":54},[48,1376,1377],{"class":50,"line":95},[48,1378,562],{"class":54},[48,1380,1381],{"class":50,"line":101},[48,1382,92],{"class":85},[48,1384,1385],{"class":50,"line":108},[48,1386,98],{"class":85},[48,1388,1389],{"class":50,"line":114},[48,1390,105],{"emptyLinePlaceholder":104},[48,1392,1393],{"class":50,"line":120},[48,1394,579],{"class":341},[48,1396,1397],{"class":50,"line":125},[48,1398,584],{"class":54},[48,1400,1401],{"class":50,"line":130},[48,1402,589],{"class":54},[48,1404,1405],{"class":50,"line":136},[48,1406,594],{"class":54},[48,1408,1409],{"class":50,"line":142},[48,1410,599],{"class":54},[48,1412,1413],{"class":50,"line":148},[48,1414,604],{"class":54},[48,1416,1417],{"class":50,"line":154},[48,1418,105],{"emptyLinePlaceholder":104},[48,1420,1421],{"class":50,"line":160},[48,1422,288],{"class":54},[48,1424,1425],{"class":50,"line":166},[48,1426,617],{"class":54},[48,1428,1429],{"class":50,"line":171},[48,1430,92],{"class":85},[48,1432,1433],{"class":50,"line":177},[48,1434,98],{"class":85},[48,1436,1437],{"class":50,"line":183},[48,1438,105],{"emptyLinePlaceholder":104},[48,1440,1441],{"class":50,"line":189},[48,1442,634],{"class":54},[48,1444,1445],{"class":50,"line":195},[48,1446,589],{"class":54},[48,1448,1449],{"class":50,"line":201},[48,1450,643],{"class":54},[48,1452,1453],{"class":50,"line":207},[48,1454,648],{"class":54},[48,1456,1457],{"class":50,"line":212},[48,1458,604],{"class":54},[48,1460,1461],{"class":50,"line":655},[48,1462,105],{"emptyLinePlaceholder":104},[48,1464,1465],{"class":50,"line":660},[48,1466,288],{"class":54},[48,1468,1469],{"class":50,"line":665},[48,1470,668],{"class":54},[48,1472,1473],{"class":50,"line":671},[48,1474,92],{"class":85},[48,1476,1477],{"class":50,"line":676},[48,1478,98],{"class":85},[48,1480,1481],{"class":50,"line":681},[48,1482,105],{"emptyLinePlaceholder":104},[48,1484,1485],{"class":50,"line":686},[48,1486,689],{"class":54},[48,1488,1489],{"class":50,"line":692},[48,1490,695],{"class":54},[48,1492,1493],{"class":50,"line":698},[48,1494,701],{"class":54},[48,1496,1497],{"class":50,"line":704},[48,1498,105],{"emptyLinePlaceholder":104},[48,1500,1501],{"class":50,"line":709},[48,1502,288],{"class":54},[48,1504,1505],{"class":50,"line":714},[48,1506,717],{"class":54},[48,1508,1509],{"class":50,"line":720},[48,1510,92],{"class":85},[48,1512,1513],{"class":50,"line":725},[48,1514,98],{"class":85},[48,1516,1517],{"class":50,"line":730},[48,1518,105],{"emptyLinePlaceholder":104},[48,1520,1521],{"class":50,"line":735},[48,1522,738],{"class":341},[48,1524,1525],{"class":50,"line":741},[48,1526,744],{"class":54},[48,1528,1529],{"class":50,"line":747},[48,1530,750],{"class":54},[48,1532,1533],{"class":50,"line":753},[48,1534,105],{"emptyLinePlaceholder":104},[48,1536,1537],{"class":50,"line":758},[48,1538,288],{"class":54},[48,1540,1541],{"class":50,"line":763},[48,1542,766],{"class":54},[48,1544,1545],{"class":50,"line":769},[48,1546,92],{"class":85},[48,1548,1549],{"class":50,"line":774},[48,1550,98],{"class":85},[48,1552,1553],{"class":50,"line":779},[48,1554,105],{"emptyLinePlaceholder":104},[48,1556,1557],{"class":50,"line":784},[48,1558,787],{"class":341},[48,1560,1561],{"class":50,"line":790},[48,1562,793],{"class":54},[48,1564,1565],{"class":50,"line":796},[48,1566,750],{"class":54},[48,1568,1569],{"class":50,"line":801},[48,1570,105],{"emptyLinePlaceholder":104},[48,1572,1573],{"class":50,"line":806},[48,1574,809],{"class":54},[48,1576,1577],{"class":50,"line":812},[48,1578,815],{"class":54},[48,1580,1581],{"class":50,"line":818},[48,1582,821],{"class":54},[48,1584,1585],{"class":50,"line":824},[48,1586,92],{"class":85},[48,1588,1589],{"class":50,"line":829},[48,1590,105],{"emptyLinePlaceholder":104},[48,1592,1593],{"class":50,"line":834},[48,1594,288],{"class":54},[48,1596,1597],{"class":50,"line":839},[48,1598,842],{"class":54},[48,1600,1601],{"class":50,"line":845},[48,1602,92],{"class":85},[48,1604,1605],{"class":50,"line":850},[48,1606,98],{"class":85},[48,1608,1609],{"class":50,"line":855},[48,1610,105],{"emptyLinePlaceholder":104},[48,1612,1613],{"class":50,"line":860},[48,1614,863],{"class":341},[48,1616,1617],{"class":50,"line":866},[48,1618,869],{"class":54},[48,1620,1621],{"class":50,"line":872},[48,1622,875],{"class":54},[48,1624,1625],{"class":50,"line":878},[48,1626,881],{"class":54},[48,1628,1629],{"class":50,"line":884},[48,1630,98],{"class":85},[48,1632,1633],{"class":50,"line":889},[48,1634,105],{"emptyLinePlaceholder":104},[48,1636,1637],{"class":50,"line":894},[48,1638,897],{"class":54},[48,1640,1641],{"class":50,"line":900},[48,1642,875],{"class":54},[48,1644,1645],{"class":50,"line":905},[48,1646,908],{"class":54},[48,1648,1649],{"class":50,"line":911},[48,1650,98],{"class":85},[915,1652,918],{"id":917},[39,1654,1655],{"className":41,"code":921,"language":43,"meta":44,"style":44},[30,1656,1657,1661,1665,1669,1673,1677,1681],{"__ignoreMap":44},[48,1658,1659],{"class":50,"line":51},[48,1660,928],{"class":54},[48,1662,1663],{"class":50,"line":58},[48,1664,933],{"class":54},[48,1666,1667],{"class":50,"line":64},[48,1668,98],{"class":85},[48,1670,1671],{"class":50,"line":70},[48,1672,105],{"emptyLinePlaceholder":104},[48,1674,1675],{"class":50,"line":76},[48,1676,946],{"class":54},[48,1678,1679],{"class":50,"line":82},[48,1680,951],{"class":54},[48,1682,1683],{"class":50,"line":89},[48,1684,98],{"class":85},[957,1686,959],{},{"title":44,"searchDepth":58,"depth":58,"links":1688},[1689,1690,1691,1692],{"id":21,"depth":58,"text":22},{"id":235,"depth":58,"text":236},{"id":315,"depth":58,"text":316},{"id":465,"depth":58,"text":466,"children":1693},[1694],{"id":917,"depth":64,"text":918},{},{"title":5,"description":969},[978,979,980],1777912144517]