[{"data":1,"prerenderedAt":3603},["ShallowReactive",2],{"blog-\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud":3,"blog-\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud-surround":3450,"blog-\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud-certifications":3511},{"id":4,"title":5,"body":6,"categories":3435,"cover":3437,"cover_contain":601,"credly_badge_id":3438,"date":3439,"description":3440,"extension":3441,"meta":3442,"navigation":601,"path":3443,"related_certifications":3444,"seo":3446,"slug":3447,"stem":3448,"__hash__":3449},"blog\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud.md","Configuration de Terraform Scaleway\u002FOVHcloud",{"type":7,"value":8,"toc":3425},"minimark",[9,14,18,22,36,39,43,46,487,505,509,512,517,520,523,1889,1892,1997,2034,2038,2041,2364,2371,2622,2629,2632,3400,3414,3418,3421],[10,11,13],"h2",{"id":12},"cas-dusage-concret","Cas d'usage concret",[15,16,17],"p",{},"Vous devez déployer des ressources cloud de façon reproductible chez Scaleway ou OVHcloud : voici comment configurer Terraform pour automatiser ce déploiement.",[10,19,21],{"id":20},"terraform","Terraform",[15,23,24,25,35],{},"Terraform est un outil que j’utilise pour provisionner mes ressources hébergées chez cetains fournisseurs comme OVH, ScaleWay, Azure ou AWS. On parle dès lors d’infrastructure As Code (IaC) : cela permet d’automatiser certaines tâches. L’objectif est de provisionner des ressources chez un fournisseur. Plus d’informations : ",[26,27,31],"a",{"href":28,"rel":29},"https:\u002F\u002Fregistry.terraform.io\u002Fbrowse\u002Fproviders",[30],"nofollow",[32,33,34],"strong",{},"Browse Providers | Terraform Registry",".",[15,37,38],{},"L’ensemble des commandes ci-dessous sont compatibles avec l’ensemble des clients (Windows, Mac, Linux). Nous allons dans notre exemple déployer une infrastructure chez Scaleway avec Terraform et executer des actions sur un serveur OVHcloud.",[10,40,42],{"id":41},"installation-de-terraform-sur-mac-os","Installation de Terraform sur Mac OS",[15,44,45],{},"Il est possible d’installer manuellement le paquet sous Mac OS, ou via le gestionnaire de paquet Homebrew :",[47,48,53],"pre",{"className":49,"code":50,"language":51,"meta":52,"style":52},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","brew tap hashicorp\u002Ftap\nRunning `brew update --preinstall`...\n==> Auto-updated Homebrew!\nd 3 taps (hashicorp\u002Ftap, homebrew\u002Fcore and homebrew\u002Fcask).\n==> New Formulae\ndbml-cli             dotdrop              glibc@2.13           goctl                libabw               lndir                octosql              release-it           sdl2_sound           sftpgo               xcode-kotlin\n==> Updated Formulae\nUpdated 554 formulae.\n==> New Casks\naethersx2                                       jquake                                          plus42-binary                                   ti-smartview-ce-for-the-ti-84-plus-family       vieb\nbike                                            manila                                          plus42-decimal                                  tqsl                                            yandex-music-unofficial\nferdium                                         mega                                            podman-desktop                                  trivial\ngroestlcoin-core                                oxwu                                            protokol                                        universal-android-debloater\n==> Updated Casks\nUpdated 731 casks.\n==> Deleted Casks\nentropy                 gloomhaven-helper       indigo                  kite                    megax                   nbtexplorer             shortery                tifig                   twitch                  xoctave\nbrew install hashicorp\u002Ftap\u002Fterraform\n==> Downloading https:\u002F\u002Freleases.hashicorp.com\u002Fterraform\u002F1.1.9\u002Fterraform_1.1.9_darwin_arm64.zip\n######################################################################## 100.0%\n==> Installing terraform from hashicorp\u002Ftap\n????  \u002Fopt\u002Fhomebrew\u002FCellar\u002Fterraform\u002F1.1.9: 3 files, 71.4MB, built in 2 seconds\n==> Running `brew cleanup terraform`...\nDisable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.\nHide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).\n","bash","",[54,55,56,72,94,110,138,151,187,199,210,222,240,258,273,288,299,310,322,355,366,379,386,404,413,433,454],"code",{"__ignoreMap":52},[57,58,61,65,69],"span",{"class":59,"line":60},"line",1,[57,62,64],{"class":63},"sBMFI","brew",[57,66,68],{"class":67},"sfazB"," tap",[57,70,71],{"class":67}," hashicorp\u002Ftap\n",[57,73,75,78,82,84,87,90],{"class":59,"line":74},2,[57,76,77],{"class":63},"Running",[57,79,81],{"class":80},"sMK4o"," `",[57,83,64],{"class":63},[57,85,86],{"class":67}," update --preinstall",[57,88,89],{"class":80},"`",[57,91,93],{"class":92},"s2Zo4","...\n",[57,95,97,100,104,107],{"class":59,"line":96},3,[57,98,99],{"class":67},"==",[57,101,103],{"class":102},"sTEyZ","> ",[57,105,106],{"class":67},"Auto-updated",[57,108,109],{"class":67}," Homebrew!\n",[57,111,113,116,120,123,126,129,132,135],{"class":59,"line":112},4,[57,114,115],{"class":63},"d",[57,117,119],{"class":118},"sbssI"," 3",[57,121,122],{"class":67}," taps",[57,124,125],{"class":102}," (hashicorp\u002Ftap, ",[57,127,128],{"class":67},"homebrew\u002Fcore",[57,130,131],{"class":67}," and",[57,133,134],{"class":67}," homebrew\u002Fcask",[57,136,137],{"class":102},").\n",[57,139,141,143,145,148],{"class":59,"line":140},5,[57,142,99],{"class":67},[57,144,103],{"class":102},[57,146,147],{"class":67},"New",[57,149,150],{"class":67}," Formulae\n",[57,152,154,157,160,163,166,169,172,175,178,181,184],{"class":59,"line":153},6,[57,155,156],{"class":63},"dbml-cli",[57,158,159],{"class":67},"             dotdrop",[57,161,162],{"class":67},"              glibc@2.13",[57,164,165],{"class":67},"           goctl",[57,167,168],{"class":67},"                libabw",[57,170,171],{"class":67},"               lndir",[57,173,174],{"class":67},"                octosql",[57,176,177],{"class":67},"              release-it",[57,179,180],{"class":67},"           sdl2_sound",[57,182,183],{"class":67},"           sftpgo",[57,185,186],{"class":67},"               xcode-kotlin\n",[57,188,190,192,194,197],{"class":59,"line":189},7,[57,191,99],{"class":67},[57,193,103],{"class":102},[57,195,196],{"class":67},"Updated",[57,198,150],{"class":67},[57,200,202,204,207],{"class":59,"line":201},8,[57,203,196],{"class":63},[57,205,206],{"class":118}," 554",[57,208,209],{"class":67}," formulae.\n",[57,211,213,215,217,219],{"class":59,"line":212},9,[57,214,99],{"class":67},[57,216,103],{"class":102},[57,218,147],{"class":67},[57,220,221],{"class":67}," Casks\n",[57,223,225,228,231,234,237],{"class":59,"line":224},10,[57,226,227],{"class":63},"aethersx2",[57,229,230],{"class":67},"                                       jquake",[57,232,233],{"class":67},"                                          plus42-binary",[57,235,236],{"class":67},"                                   ti-smartview-ce-for-the-ti-84-plus-family",[57,238,239],{"class":67},"       vieb\n",[57,241,243,246,249,252,255],{"class":59,"line":242},11,[57,244,245],{"class":63},"bike",[57,247,248],{"class":67},"                                            manila",[57,250,251],{"class":67},"                                          plus42-decimal",[57,253,254],{"class":67},"                                  tqsl",[57,256,257],{"class":67},"                                            yandex-music-unofficial\n",[57,259,261,264,267,270],{"class":59,"line":260},12,[57,262,263],{"class":63},"ferdium",[57,265,266],{"class":67},"                                         mega",[57,268,269],{"class":67},"                                            podman-desktop",[57,271,272],{"class":67},"                                  trivial\n",[57,274,276,279,282,285],{"class":59,"line":275},13,[57,277,278],{"class":63},"groestlcoin-core",[57,280,281],{"class":67},"                                oxwu",[57,283,284],{"class":67},"                                            protokol",[57,286,287],{"class":67},"                                        universal-android-debloater\n",[57,289,291,293,295,297],{"class":59,"line":290},14,[57,292,99],{"class":67},[57,294,103],{"class":102},[57,296,196],{"class":67},[57,298,221],{"class":67},[57,300,302,304,307],{"class":59,"line":301},15,[57,303,196],{"class":63},[57,305,306],{"class":118}," 731",[57,308,309],{"class":67}," casks.\n",[57,311,313,315,317,320],{"class":59,"line":312},16,[57,314,99],{"class":67},[57,316,103],{"class":102},[57,318,319],{"class":67},"Deleted",[57,321,221],{"class":67},[57,323,325,328,331,334,337,340,343,346,349,352],{"class":59,"line":324},17,[57,326,327],{"class":63},"entropy",[57,329,330],{"class":67},"                 gloomhaven-helper",[57,332,333],{"class":67},"       indigo",[57,335,336],{"class":67},"                  kite",[57,338,339],{"class":67},"                    megax",[57,341,342],{"class":67},"                   nbtexplorer",[57,344,345],{"class":67},"             shortery",[57,347,348],{"class":67},"                tifig",[57,350,351],{"class":67},"                   twitch",[57,353,354],{"class":67},"                  xoctave\n",[57,356,358,360,363],{"class":59,"line":357},18,[57,359,64],{"class":63},[57,361,362],{"class":67}," install",[57,364,365],{"class":67}," hashicorp\u002Ftap\u002Fterraform\n",[57,367,369,371,373,376],{"class":59,"line":368},19,[57,370,99],{"class":67},[57,372,103],{"class":102},[57,374,375],{"class":67},"Downloading",[57,377,378],{"class":67}," https:\u002F\u002Freleases.hashicorp.com\u002Fterraform\u002F1.1.9\u002Fterraform_1.1.9_darwin_arm64.zip\n",[57,380,382],{"class":59,"line":381},20,[57,383,385],{"class":384},"sHwdD","######################################################################## 100.0%\n",[57,387,389,391,393,396,399,402],{"class":59,"line":388},21,[57,390,99],{"class":67},[57,392,103],{"class":102},[57,394,395],{"class":67},"Installing",[57,397,398],{"class":67}," terraform",[57,400,401],{"class":67}," from",[57,403,71],{"class":67},[57,405,407,410],{"class":59,"line":406},22,[57,408,409],{"class":80},"????",[57,411,412],{"class":102},"  \u002Fopt\u002Fhomebrew\u002FCellar\u002Fterraform\u002F1.1.9: 3 files, 71.4MB, built in 2 seconds\n",[57,414,416,418,420,422,424,426,429,431],{"class":59,"line":415},23,[57,417,99],{"class":67},[57,419,103],{"class":102},[57,421,77],{"class":67},[57,423,81],{"class":80},[57,425,64],{"class":63},[57,427,428],{"class":67}," cleanup terraform",[57,430,89],{"class":80},[57,432,93],{"class":92},[57,434,436,439,442,445,448,451],{"class":59,"line":435},24,[57,437,438],{"class":63},"Disable",[57,440,441],{"class":67}," this",[57,443,444],{"class":67}," behaviour",[57,446,447],{"class":67}," by",[57,449,450],{"class":67}," setting",[57,452,453],{"class":67}," HOMEBREW_NO_INSTALL_CLEANUP.\n",[57,455,457,460,463,466,469,472,475,477,480,483,485],{"class":59,"line":456},25,[57,458,459],{"class":63},"Hide",[57,461,462],{"class":67}," these",[57,464,465],{"class":67}," hints",[57,467,468],{"class":67}," with",[57,470,471],{"class":67}," HOMEBREW_NO_ENV_HINTS",[57,473,474],{"class":102}," (see ",[57,476,89],{"class":80},[57,478,479],{"class":63},"man",[57,481,482],{"class":67}," brew",[57,484,89],{"class":80},[57,486,137],{"class":102},[15,488,489,490,497,498,35],{},"Je consulte ensuite le registre des fournisseurs existants et je recherche Scaleway : ",[26,491,494],{"href":492,"rel":493},"https:\u002F\u002Fregistry.terraform.io\u002Fproviders\u002Fscaleway\u002Fscaleway\u002Flatest\u002Fdocs",[30],[32,495,496],{},"scaleway\u002Fscaleway | Terraform Registry"," et ",[26,499,502],{"href":500,"rel":501},"https:\u002F\u002Fregistry.terraform.io\u002Fproviders\u002Fovh\u002Fovh\u002Flatest\u002Fdocs",[30],[32,503,504],{},"OVHcloud",[10,506,508],{"id":507},"configuration-de-terraform","Configuration de Terraform",[15,510,511],{},"Pour démarrer, il est nécessaire de créer un dossier dédié à chaque projet Terraform. Puis il faut créer un fichier main.tf à l’intérieur. Il existe deux façons d’écrire notre configuration : via le language HashiCorp ou via le format structuré JSON. Dans mon cas, je préfère utiliser le formatage JSON.",[513,514,516],"h3",{"id":515},"terraform-avec-scaleway","Terraform avec Scaleway",[15,518,519],{},"Nous allons nous intéresser à une intégration chez le fournisseur Scaleway (les commandes init, plan, apply sont expliquées plus bas dans l’exemple avec le fournisseur OVH si besoin).",[15,521,522],{},"Voici un exemple de configuration chez Scaleway :",[47,524,526],{"className":49,"code":525,"language":51,"meta":52,"style":52},"terraform {\n  required_providers {\n    scaleway = {\n      source = \"scaleway\u002Fscaleway\"\n    }\n  }\n  required_version = \">= 0.13\"\n}\n\nprovider \"scaleway\" {\n  alias = \"production\"\n  profile = \"kassianoff-blog\"\n}\n\nresource \"scaleway_account_ssh_key\" \"jérémie\" {\n  provider = scaleway.production\n  name = \"Jérémie\"\n  public_key = \"ssh-ed25519 AABBCCDDEEFFGGAABBCCDDEEFFGGAABBCCDDEEFFGGAABBCCDDEEFFGGAABBCCDDEEFF\"\n}\n\nresource \"scaleway_instance_ip\" \"public_ip\" {\n  provider = scaleway.production\n}\n\nlocals {\n  ip_source = [\n    { ip = \"mon_ip_routable_01\u002F32\", port = \"22\" },\n    { ip = \"mon_ip_routable_02\u002F32\", port = \"22\" },\n  ]\n\n  any_in = [\n    { ip_range = \"0.0.0.0\u002F0\", port = \"80\" },\n    { ip_range = \"0.0.0.0\u002F0\", port = \"443\" },\n  ]\n\n  any_out = [\n    { ip_range = \"0.0.0.0\u002F0\", port = \"53\", protocol = \"TCP\" },\n    { ip_range = \"0.0.0.0\u002F0\", port = \"53\", protocol = \"UDP\" },\n    { ip_range = \"0.0.0.0\u002F0\", port = \"80\", protocol = \"TCP\" },\n    { ip_range = \"0.0.0.0\u002F0\", port = \"443\", protocol = \"TCP\" },\n  ]\n}\n\nresource \"scaleway_instance_security_group\" \"prod\" {\n  provider = scaleway.production\n  description = \"scaleway-firewall\"\n  name = \"Kassianoff scaleway firewall\"\n  inbound_default_policy = \"drop\"\n  outbound_default_policy = \"drop\"\n  enable_default_security = false\n\n  dynamic \"inbound_rule\" {\n    for_each = local.ip_source && local.any_in\n\n    content {\n      action = \"accept\"\n      ip = inbound_rule.value.ip\n      ip_range = inbound_rule.value.ip_range\n      port = inbound_rule.value.port\n    }\n  }\n\n  dynamic \"outbound_rule\" {\n    for_each = local.any_out\n\n    content {\n      action = \"accept\"\n      ip_range = outbound_rule.value.ip_range\n      port = outbound_rule.value.port\n      protocol = outbound_rule.value.protocol\n    }\n  }\n}\n\nresource \"scaleway_instance_server\" \"blog\" {\n  provider = scaleway.production\n  name = \"kassianoff blog\"\n  type = \"DEV1-L\"\n  image = \"ubuntu_jammy\"\n  tags = [ \"blog\" ]\n  ip_id = scaleway_instance_ip.public_ip.id\n  security_group_id = scaleway_instance_security_group.blog.id\n  private_network {\n    pn_id = scaleway_vpc_private_network.blog.id\n  }\n}\n\nresource \"scaleway_rdb_database\" \"blog\" {\n  instance_id = scaleway_rdb_instance.blog.id\n  name = \"kassianoff-database\"\n  node_type = \"DB-DEV-S\"\n  engine = \"PostgreSQL-14\"\n  is_ha_cluster = true\n  disable_backup = true\n  user_name = \"kassianoff\"\n  password = \"thiZ_is_v&ry_s3cret\"\n  region= \"fr-par\"\n  tags = [ \"db\", \"blog\" ]\n  volume_type = \"bssd\"\n  volume_size_in_gb = 5\n  private_network { \n    ip_net = \"192.168.1.254\u002F24\" \n    pn_id = \"${scaleway_vpc_private_network.blog.id}\" \n  }\n}\n\nresource scaleway_vpc_private_network blog { \nname = \"production\" \n}\n",[54,527,528,535,542,552,568,573,578,592,597,603,618,632,646,650,654,675,685,699,713,717,721,741,749,753,757,764,775,811,841,847,852,862,894,924,929,934,944,988,1030,1071,1112,1117,1122,1127,1148,1157,1172,1186,1201,1215,1226,1231,1246,1263,1268,1276,1291,1302,1313,1324,1329,1334,1339,1353,1363,1368,1375,1388,1398,1408,1419,1424,1429,1434,1439,1460,1469,1483,1498,1513,1533,1544,1555,1563,1574,1579,1584,1589,1609,1620,1634,1649,1664,1675,1685,1700,1715,1731,1757,1772,1783,1794,1811,1838,1843,1848,1853,1868,1884],{"__ignoreMap":52},[57,529,530,532],{"class":59,"line":60},[57,531,20],{"class":63},[57,533,534],{"class":67}," {\n",[57,536,537,540],{"class":59,"line":74},[57,538,539],{"class":63},"  required_providers",[57,541,534],{"class":67},[57,543,544,547,550],{"class":59,"line":96},[57,545,546],{"class":63},"    scaleway",[57,548,549],{"class":67}," =",[57,551,534],{"class":67},[57,553,554,557,559,562,565],{"class":59,"line":112},[57,555,556],{"class":92},"      source",[57,558,549],{"class":67},[57,560,561],{"class":80}," \"",[57,563,564],{"class":67},"scaleway\u002Fscaleway",[57,566,567],{"class":80},"\"\n",[57,569,570],{"class":59,"line":140},[57,571,572],{"class":102},"    }\n",[57,574,575],{"class":59,"line":153},[57,576,577],{"class":102},"  }\n",[57,579,580,583,585,587,590],{"class":59,"line":189},[57,581,582],{"class":63},"  required_version",[57,584,549],{"class":67},[57,586,561],{"class":80},[57,588,589],{"class":67},">= 0.13",[57,591,567],{"class":80},[57,593,594],{"class":59,"line":201},[57,595,596],{"class":102},"}\n",[57,598,599],{"class":59,"line":212},[57,600,602],{"emptyLinePlaceholder":601},true,"\n",[57,604,605,608,610,613,616],{"class":59,"line":224},[57,606,607],{"class":63},"provider",[57,609,561],{"class":80},[57,611,612],{"class":67},"scaleway",[57,614,615],{"class":80},"\"",[57,617,534],{"class":67},[57,619,620,623,625,627,630],{"class":59,"line":242},[57,621,622],{"class":92},"  alias",[57,624,549],{"class":67},[57,626,561],{"class":80},[57,628,629],{"class":67},"production",[57,631,567],{"class":80},[57,633,634,637,639,641,644],{"class":59,"line":260},[57,635,636],{"class":63},"  profile",[57,638,549],{"class":67},[57,640,561],{"class":80},[57,642,643],{"class":67},"kassianoff-blog",[57,645,567],{"class":80},[57,647,648],{"class":59,"line":275},[57,649,596],{"class":102},[57,651,652],{"class":59,"line":290},[57,653,602],{"emptyLinePlaceholder":601},[57,655,656,659,661,664,666,668,671,673],{"class":59,"line":301},[57,657,658],{"class":63},"resource",[57,660,561],{"class":80},[57,662,663],{"class":67},"scaleway_account_ssh_key",[57,665,615],{"class":80},[57,667,561],{"class":80},[57,669,670],{"class":67},"jérémie",[57,672,615],{"class":80},[57,674,534],{"class":67},[57,676,677,680,682],{"class":59,"line":312},[57,678,679],{"class":63},"  provider",[57,681,549],{"class":67},[57,683,684],{"class":67}," scaleway.production\n",[57,686,687,690,692,694,697],{"class":59,"line":324},[57,688,689],{"class":63},"  name",[57,691,549],{"class":67},[57,693,561],{"class":80},[57,695,696],{"class":67},"Jérémie",[57,698,567],{"class":80},[57,700,701,704,706,708,711],{"class":59,"line":357},[57,702,703],{"class":63},"  public_key",[57,705,549],{"class":67},[57,707,561],{"class":80},[57,709,710],{"class":67},"ssh-ed25519 AABBCCDDEEFFGGAABBCCDDEEFFGGAABBCCDDEEFFGGAABBCCDDEEFFGGAABBCCDDEEFF",[57,712,567],{"class":80},[57,714,715],{"class":59,"line":368},[57,716,596],{"class":102},[57,718,719],{"class":59,"line":381},[57,720,602],{"emptyLinePlaceholder":601},[57,722,723,725,727,730,732,734,737,739],{"class":59,"line":388},[57,724,658],{"class":63},[57,726,561],{"class":80},[57,728,729],{"class":67},"scaleway_instance_ip",[57,731,615],{"class":80},[57,733,561],{"class":80},[57,735,736],{"class":67},"public_ip",[57,738,615],{"class":80},[57,740,534],{"class":67},[57,742,743,745,747],{"class":59,"line":406},[57,744,679],{"class":63},[57,746,549],{"class":67},[57,748,684],{"class":67},[57,750,751],{"class":59,"line":415},[57,752,596],{"class":102},[57,754,755],{"class":59,"line":435},[57,756,602],{"emptyLinePlaceholder":601},[57,758,759,762],{"class":59,"line":456},[57,760,761],{"class":63},"locals",[57,763,534],{"class":67},[57,765,767,770,772],{"class":59,"line":766},26,[57,768,769],{"class":63},"  ip_source",[57,771,549],{"class":67},[57,773,774],{"class":102}," [\n",[57,776,778,781,784,786,788,791,793,796,799,801,803,806,808],{"class":59,"line":777},27,[57,779,780],{"class":80},"    {",[57,782,783],{"class":63}," ip",[57,785,549],{"class":67},[57,787,561],{"class":80},[57,789,790],{"class":67},"mon_ip_routable_01\u002F32",[57,792,615],{"class":80},[57,794,795],{"class":67},",",[57,797,798],{"class":67}," port",[57,800,549],{"class":67},[57,802,561],{"class":80},[57,804,805],{"class":67},"22",[57,807,615],{"class":80},[57,809,810],{"class":67}," },\n",[57,812,814,816,818,820,822,825,827,829,831,833,835,837,839],{"class":59,"line":813},28,[57,815,780],{"class":80},[57,817,783],{"class":63},[57,819,549],{"class":67},[57,821,561],{"class":80},[57,823,824],{"class":67},"mon_ip_routable_02\u002F32",[57,826,615],{"class":80},[57,828,795],{"class":67},[57,830,798],{"class":67},[57,832,549],{"class":67},[57,834,561],{"class":80},[57,836,805],{"class":67},[57,838,615],{"class":80},[57,840,810],{"class":67},[57,842,844],{"class":59,"line":843},29,[57,845,846],{"class":102},"  ]\n",[57,848,850],{"class":59,"line":849},30,[57,851,602],{"emptyLinePlaceholder":601},[57,853,855,858,860],{"class":59,"line":854},31,[57,856,857],{"class":63},"  any_in",[57,859,549],{"class":67},[57,861,774],{"class":102},[57,863,865,867,870,872,874,877,879,881,883,885,887,890,892],{"class":59,"line":864},32,[57,866,780],{"class":80},[57,868,869],{"class":63}," ip_range",[57,871,549],{"class":67},[57,873,561],{"class":80},[57,875,876],{"class":67},"0.0.0.0\u002F0",[57,878,615],{"class":80},[57,880,795],{"class":67},[57,882,798],{"class":67},[57,884,549],{"class":67},[57,886,561],{"class":80},[57,888,889],{"class":67},"80",[57,891,615],{"class":80},[57,893,810],{"class":67},[57,895,897,899,901,903,905,907,909,911,913,915,917,920,922],{"class":59,"line":896},33,[57,898,780],{"class":80},[57,900,869],{"class":63},[57,902,549],{"class":67},[57,904,561],{"class":80},[57,906,876],{"class":67},[57,908,615],{"class":80},[57,910,795],{"class":67},[57,912,798],{"class":67},[57,914,549],{"class":67},[57,916,561],{"class":80},[57,918,919],{"class":67},"443",[57,921,615],{"class":80},[57,923,810],{"class":67},[57,925,927],{"class":59,"line":926},34,[57,928,846],{"class":102},[57,930,932],{"class":59,"line":931},35,[57,933,602],{"emptyLinePlaceholder":601},[57,935,937,940,942],{"class":59,"line":936},36,[57,938,939],{"class":63},"  any_out",[57,941,549],{"class":67},[57,943,774],{"class":102},[57,945,947,949,951,953,955,957,959,961,963,965,967,970,972,974,977,979,981,984,986],{"class":59,"line":946},37,[57,948,780],{"class":80},[57,950,869],{"class":63},[57,952,549],{"class":67},[57,954,561],{"class":80},[57,956,876],{"class":67},[57,958,615],{"class":80},[57,960,795],{"class":67},[57,962,798],{"class":67},[57,964,549],{"class":67},[57,966,561],{"class":80},[57,968,969],{"class":67},"53",[57,971,615],{"class":80},[57,973,795],{"class":67},[57,975,976],{"class":67}," protocol",[57,978,549],{"class":67},[57,980,561],{"class":80},[57,982,983],{"class":67},"TCP",[57,985,615],{"class":80},[57,987,810],{"class":67},[57,989,991,993,995,997,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1026,1028],{"class":59,"line":990},38,[57,992,780],{"class":80},[57,994,869],{"class":63},[57,996,549],{"class":67},[57,998,561],{"class":80},[57,1000,876],{"class":67},[57,1002,615],{"class":80},[57,1004,795],{"class":67},[57,1006,798],{"class":67},[57,1008,549],{"class":67},[57,1010,561],{"class":80},[57,1012,969],{"class":67},[57,1014,615],{"class":80},[57,1016,795],{"class":67},[57,1018,976],{"class":67},[57,1020,549],{"class":67},[57,1022,561],{"class":80},[57,1024,1025],{"class":67},"UDP",[57,1027,615],{"class":80},[57,1029,810],{"class":67},[57,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069],{"class":59,"line":1032},39,[57,1034,780],{"class":80},[57,1036,869],{"class":63},[57,1038,549],{"class":67},[57,1040,561],{"class":80},[57,1042,876],{"class":67},[57,1044,615],{"class":80},[57,1046,795],{"class":67},[57,1048,798],{"class":67},[57,1050,549],{"class":67},[57,1052,561],{"class":80},[57,1054,889],{"class":67},[57,1056,615],{"class":80},[57,1058,795],{"class":67},[57,1060,976],{"class":67},[57,1062,549],{"class":67},[57,1064,561],{"class":80},[57,1066,983],{"class":67},[57,1068,615],{"class":80},[57,1070,810],{"class":67},[57,1072,1074,1076,1078,1080,1082,1084,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110],{"class":59,"line":1073},40,[57,1075,780],{"class":80},[57,1077,869],{"class":63},[57,1079,549],{"class":67},[57,1081,561],{"class":80},[57,1083,876],{"class":67},[57,1085,615],{"class":80},[57,1087,795],{"class":67},[57,1089,798],{"class":67},[57,1091,549],{"class":67},[57,1093,561],{"class":80},[57,1095,919],{"class":67},[57,1097,615],{"class":80},[57,1099,795],{"class":67},[57,1101,976],{"class":67},[57,1103,549],{"class":67},[57,1105,561],{"class":80},[57,1107,983],{"class":67},[57,1109,615],{"class":80},[57,1111,810],{"class":67},[57,1113,1115],{"class":59,"line":1114},41,[57,1116,846],{"class":102},[57,1118,1120],{"class":59,"line":1119},42,[57,1121,596],{"class":80},[57,1123,1125],{"class":59,"line":1124},43,[57,1126,602],{"emptyLinePlaceholder":601},[57,1128,1130,1132,1134,1137,1139,1141,1144,1146],{"class":59,"line":1129},44,[57,1131,658],{"class":63},[57,1133,561],{"class":80},[57,1135,1136],{"class":67},"scaleway_instance_security_group",[57,1138,615],{"class":80},[57,1140,561],{"class":80},[57,1142,1143],{"class":67},"prod",[57,1145,615],{"class":80},[57,1147,534],{"class":67},[57,1149,1151,1153,1155],{"class":59,"line":1150},45,[57,1152,679],{"class":63},[57,1154,549],{"class":67},[57,1156,684],{"class":67},[57,1158,1160,1163,1165,1167,1170],{"class":59,"line":1159},46,[57,1161,1162],{"class":63},"  description",[57,1164,549],{"class":67},[57,1166,561],{"class":80},[57,1168,1169],{"class":67},"scaleway-firewall",[57,1171,567],{"class":80},[57,1173,1175,1177,1179,1181,1184],{"class":59,"line":1174},47,[57,1176,689],{"class":63},[57,1178,549],{"class":67},[57,1180,561],{"class":80},[57,1182,1183],{"class":67},"Kassianoff scaleway firewall",[57,1185,567],{"class":80},[57,1187,1189,1192,1194,1196,1199],{"class":59,"line":1188},48,[57,1190,1191],{"class":63},"  inbound_default_policy",[57,1193,549],{"class":67},[57,1195,561],{"class":80},[57,1197,1198],{"class":67},"drop",[57,1200,567],{"class":80},[57,1202,1204,1207,1209,1211,1213],{"class":59,"line":1203},49,[57,1205,1206],{"class":63},"  outbound_default_policy",[57,1208,549],{"class":67},[57,1210,561],{"class":80},[57,1212,1198],{"class":67},[57,1214,567],{"class":80},[57,1216,1218,1221,1223],{"class":59,"line":1217},50,[57,1219,1220],{"class":63},"  enable_default_security",[57,1222,549],{"class":67},[57,1224,1225],{"class":80}," false\n",[57,1227,1229],{"class":59,"line":1228},51,[57,1230,602],{"emptyLinePlaceholder":601},[57,1232,1234,1237,1239,1242,1244],{"class":59,"line":1233},52,[57,1235,1236],{"class":63},"  dynamic",[57,1238,561],{"class":80},[57,1240,1241],{"class":67},"inbound_rule",[57,1243,615],{"class":80},[57,1245,534],{"class":67},[57,1247,1249,1252,1254,1257,1260],{"class":59,"line":1248},53,[57,1250,1251],{"class":63},"    for_each",[57,1253,549],{"class":67},[57,1255,1256],{"class":67}," local.ip_source",[57,1258,1259],{"class":80}," &&",[57,1261,1262],{"class":63}," local.any_in\n",[57,1264,1266],{"class":59,"line":1265},54,[57,1267,602],{"emptyLinePlaceholder":601},[57,1269,1271,1274],{"class":59,"line":1270},55,[57,1272,1273],{"class":63},"    content",[57,1275,534],{"class":67},[57,1277,1279,1282,1284,1286,1289],{"class":59,"line":1278},56,[57,1280,1281],{"class":63},"      action",[57,1283,549],{"class":67},[57,1285,561],{"class":80},[57,1287,1288],{"class":67},"accept",[57,1290,567],{"class":80},[57,1292,1294,1297,1299],{"class":59,"line":1293},57,[57,1295,1296],{"class":63},"      ip",[57,1298,549],{"class":67},[57,1300,1301],{"class":67}," inbound_rule.value.ip\n",[57,1303,1305,1308,1310],{"class":59,"line":1304},58,[57,1306,1307],{"class":63},"      ip_range",[57,1309,549],{"class":67},[57,1311,1312],{"class":67}," inbound_rule.value.ip_range\n",[57,1314,1316,1319,1321],{"class":59,"line":1315},59,[57,1317,1318],{"class":63},"      port",[57,1320,549],{"class":67},[57,1322,1323],{"class":67}," inbound_rule.value.port\n",[57,1325,1327],{"class":59,"line":1326},60,[57,1328,572],{"class":80},[57,1330,1332],{"class":59,"line":1331},61,[57,1333,577],{"class":80},[57,1335,1337],{"class":59,"line":1336},62,[57,1338,602],{"emptyLinePlaceholder":601},[57,1340,1342,1344,1346,1349,1351],{"class":59,"line":1341},63,[57,1343,1236],{"class":63},[57,1345,561],{"class":80},[57,1347,1348],{"class":67},"outbound_rule",[57,1350,615],{"class":80},[57,1352,534],{"class":67},[57,1354,1356,1358,1360],{"class":59,"line":1355},64,[57,1357,1251],{"class":63},[57,1359,549],{"class":67},[57,1361,1362],{"class":67}," local.any_out\n",[57,1364,1366],{"class":59,"line":1365},65,[57,1367,602],{"emptyLinePlaceholder":601},[57,1369,1371,1373],{"class":59,"line":1370},66,[57,1372,1273],{"class":63},[57,1374,534],{"class":67},[57,1376,1378,1380,1382,1384,1386],{"class":59,"line":1377},67,[57,1379,1281],{"class":63},[57,1381,549],{"class":67},[57,1383,561],{"class":80},[57,1385,1288],{"class":67},[57,1387,567],{"class":80},[57,1389,1391,1393,1395],{"class":59,"line":1390},68,[57,1392,1307],{"class":63},[57,1394,549],{"class":67},[57,1396,1397],{"class":67}," outbound_rule.value.ip_range\n",[57,1399,1401,1403,1405],{"class":59,"line":1400},69,[57,1402,1318],{"class":63},[57,1404,549],{"class":67},[57,1406,1407],{"class":67}," outbound_rule.value.port\n",[57,1409,1411,1414,1416],{"class":59,"line":1410},70,[57,1412,1413],{"class":63},"      protocol",[57,1415,549],{"class":67},[57,1417,1418],{"class":67}," outbound_rule.value.protocol\n",[57,1420,1422],{"class":59,"line":1421},71,[57,1423,572],{"class":80},[57,1425,1427],{"class":59,"line":1426},72,[57,1428,577],{"class":80},[57,1430,1432],{"class":59,"line":1431},73,[57,1433,596],{"class":80},[57,1435,1437],{"class":59,"line":1436},74,[57,1438,602],{"emptyLinePlaceholder":601},[57,1440,1442,1444,1446,1449,1451,1453,1456,1458],{"class":59,"line":1441},75,[57,1443,658],{"class":63},[57,1445,561],{"class":80},[57,1447,1448],{"class":67},"scaleway_instance_server",[57,1450,615],{"class":80},[57,1452,561],{"class":80},[57,1454,1455],{"class":67},"blog",[57,1457,615],{"class":80},[57,1459,534],{"class":67},[57,1461,1463,1465,1467],{"class":59,"line":1462},76,[57,1464,679],{"class":63},[57,1466,549],{"class":67},[57,1468,684],{"class":67},[57,1470,1472,1474,1476,1478,1481],{"class":59,"line":1471},77,[57,1473,689],{"class":63},[57,1475,549],{"class":67},[57,1477,561],{"class":80},[57,1479,1480],{"class":67},"kassianoff blog",[57,1482,567],{"class":80},[57,1484,1486,1489,1491,1493,1496],{"class":59,"line":1485},78,[57,1487,1488],{"class":92},"  type",[57,1490,549],{"class":67},[57,1492,561],{"class":80},[57,1494,1495],{"class":67},"DEV1-L",[57,1497,567],{"class":80},[57,1499,1501,1504,1506,1508,1511],{"class":59,"line":1500},79,[57,1502,1503],{"class":63},"  image",[57,1505,549],{"class":67},[57,1507,561],{"class":80},[57,1509,1510],{"class":67},"ubuntu_jammy",[57,1512,567],{"class":80},[57,1514,1516,1519,1521,1524,1526,1528,1530],{"class":59,"line":1515},80,[57,1517,1518],{"class":63},"  tags",[57,1520,549],{"class":67},[57,1522,1523],{"class":102}," [ ",[57,1525,615],{"class":80},[57,1527,1455],{"class":67},[57,1529,615],{"class":80},[57,1531,1532],{"class":67}," ]\n",[57,1534,1536,1539,1541],{"class":59,"line":1535},81,[57,1537,1538],{"class":63},"  ip_id",[57,1540,549],{"class":67},[57,1542,1543],{"class":67}," scaleway_instance_ip.public_ip.id\n",[57,1545,1547,1550,1552],{"class":59,"line":1546},82,[57,1548,1549],{"class":63},"  security_group_id",[57,1551,549],{"class":67},[57,1553,1554],{"class":67}," scaleway_instance_security_group.blog.id\n",[57,1556,1558,1561],{"class":59,"line":1557},83,[57,1559,1560],{"class":63},"  private_network",[57,1562,534],{"class":67},[57,1564,1566,1569,1571],{"class":59,"line":1565},84,[57,1567,1568],{"class":63},"    pn_id",[57,1570,549],{"class":67},[57,1572,1573],{"class":67}," scaleway_vpc_private_network.blog.id\n",[57,1575,1577],{"class":59,"line":1576},85,[57,1578,577],{"class":80},[57,1580,1582],{"class":59,"line":1581},86,[57,1583,596],{"class":80},[57,1585,1587],{"class":59,"line":1586},87,[57,1588,602],{"emptyLinePlaceholder":601},[57,1590,1592,1594,1596,1599,1601,1603,1605,1607],{"class":59,"line":1591},88,[57,1593,658],{"class":63},[57,1595,561],{"class":80},[57,1597,1598],{"class":67},"scaleway_rdb_database",[57,1600,615],{"class":80},[57,1602,561],{"class":80},[57,1604,1455],{"class":67},[57,1606,615],{"class":80},[57,1608,534],{"class":67},[57,1610,1612,1615,1617],{"class":59,"line":1611},89,[57,1613,1614],{"class":63},"  instance_id",[57,1616,549],{"class":67},[57,1618,1619],{"class":67}," scaleway_rdb_instance.blog.id\n",[57,1621,1623,1625,1627,1629,1632],{"class":59,"line":1622},90,[57,1624,689],{"class":63},[57,1626,549],{"class":67},[57,1628,561],{"class":80},[57,1630,1631],{"class":67},"kassianoff-database",[57,1633,567],{"class":80},[57,1635,1637,1640,1642,1644,1647],{"class":59,"line":1636},91,[57,1638,1639],{"class":63},"  node_type",[57,1641,549],{"class":67},[57,1643,561],{"class":80},[57,1645,1646],{"class":67},"DB-DEV-S",[57,1648,567],{"class":80},[57,1650,1652,1655,1657,1659,1662],{"class":59,"line":1651},92,[57,1653,1654],{"class":63},"  engine",[57,1656,549],{"class":67},[57,1658,561],{"class":80},[57,1660,1661],{"class":67},"PostgreSQL-14",[57,1663,567],{"class":80},[57,1665,1667,1670,1672],{"class":59,"line":1666},93,[57,1668,1669],{"class":63},"  is_ha_cluster",[57,1671,549],{"class":67},[57,1673,1674],{"class":80}," true\n",[57,1676,1678,1681,1683],{"class":59,"line":1677},94,[57,1679,1680],{"class":63},"  disable_backup",[57,1682,549],{"class":67},[57,1684,1674],{"class":80},[57,1686,1688,1691,1693,1695,1698],{"class":59,"line":1687},95,[57,1689,1690],{"class":63},"  user_name",[57,1692,549],{"class":67},[57,1694,561],{"class":80},[57,1696,1697],{"class":67},"kassianoff",[57,1699,567],{"class":80},[57,1701,1703,1706,1708,1710,1713],{"class":59,"line":1702},96,[57,1704,1705],{"class":63},"  password",[57,1707,549],{"class":67},[57,1709,561],{"class":80},[57,1711,1712],{"class":67},"thiZ_is_v&ry_s3cret",[57,1714,567],{"class":80},[57,1716,1718,1721,1724,1726,1729],{"class":59,"line":1717},97,[57,1719,1720],{"class":102},"  region",[57,1722,1723],{"class":80},"=",[57,1725,561],{"class":80},[57,1727,1728],{"class":67},"fr-par",[57,1730,567],{"class":80},[57,1732,1734,1736,1738,1740,1742,1745,1747,1749,1751,1753,1755],{"class":59,"line":1733},98,[57,1735,1518],{"class":63},[57,1737,549],{"class":67},[57,1739,1523],{"class":102},[57,1741,615],{"class":80},[57,1743,1744],{"class":67},"db",[57,1746,615],{"class":80},[57,1748,795],{"class":67},[57,1750,561],{"class":80},[57,1752,1455],{"class":67},[57,1754,615],{"class":80},[57,1756,1532],{"class":67},[57,1758,1760,1763,1765,1767,1770],{"class":59,"line":1759},99,[57,1761,1762],{"class":63},"  volume_type",[57,1764,549],{"class":67},[57,1766,561],{"class":80},[57,1768,1769],{"class":67},"bssd",[57,1771,567],{"class":80},[57,1773,1775,1778,1780],{"class":59,"line":1774},100,[57,1776,1777],{"class":63},"  volume_size_in_gb",[57,1779,549],{"class":67},[57,1781,1782],{"class":118}," 5\n",[57,1784,1786,1788,1791],{"class":59,"line":1785},101,[57,1787,1560],{"class":63},[57,1789,1790],{"class":67}," {",[57,1792,1793],{"class":102}," \n",[57,1795,1797,1800,1802,1804,1807,1809],{"class":59,"line":1796},102,[57,1798,1799],{"class":63},"    ip_net",[57,1801,549],{"class":67},[57,1803,561],{"class":80},[57,1805,1806],{"class":67},"192.168.1.254\u002F24",[57,1808,615],{"class":80},[57,1810,1793],{"class":102},[57,1812,1814,1816,1818,1821,1824,1826,1828,1830,1833,1836],{"class":59,"line":1813},103,[57,1815,1568],{"class":63},[57,1817,549],{"class":67},[57,1819,1820],{"class":80}," \"${",[57,1822,1823],{"class":102},"scaleway_vpc_private_network",[57,1825,35],{"class":67},[57,1827,1455],{"class":102},[57,1829,35],{"class":67},[57,1831,1832],{"class":102},"id",[57,1834,1835],{"class":80},"}\"",[57,1837,1793],{"class":102},[57,1839,1841],{"class":59,"line":1840},104,[57,1842,577],{"class":102},[57,1844,1846],{"class":59,"line":1845},105,[57,1847,596],{"class":102},[57,1849,1851],{"class":59,"line":1850},106,[57,1852,602],{"emptyLinePlaceholder":601},[57,1854,1856,1858,1861,1864,1866],{"class":59,"line":1855},107,[57,1857,658],{"class":63},[57,1859,1860],{"class":67}," scaleway_vpc_private_network",[57,1862,1863],{"class":67}," blog",[57,1865,1790],{"class":67},[57,1867,1793],{"class":102},[57,1869,1871,1874,1876,1878,1880,1882],{"class":59,"line":1870},108,[57,1872,1873],{"class":63},"name",[57,1875,549],{"class":67},[57,1877,561],{"class":80},[57,1879,629],{"class":67},[57,1881,615],{"class":80},[57,1883,1793],{"class":102},[57,1885,1887],{"class":59,"line":1886},109,[57,1888,596],{"class":102},[15,1890,1891],{},"N’oublions pas de configurer un profile pour notre provider Scaleway :",[47,1893,1897],{"className":1894,"code":1895,"language":1896,"meta":52,"style":52},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","profiles:\n  kassianoff-blog:\n    access_key: XXXXXXXXXXXXXXXXXXXX\n    secret_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \n    default_organization_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n    default_project_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n    default_zone: fr-par-1\n    default_region: fr-par\n    api_url: https:\u002F\u002Fapi.scaleway.com\n    insecure: false\n","yaml",[54,1898,1899,1908,1915,1926,1938,1948,1957,1967,1977,1987],{"__ignoreMap":52},[57,1900,1901,1905],{"class":59,"line":60},[57,1902,1904],{"class":1903},"swJcz","profiles",[57,1906,1907],{"class":80},":\n",[57,1909,1910,1913],{"class":59,"line":74},[57,1911,1912],{"class":1903},"  kassianoff-blog",[57,1914,1907],{"class":80},[57,1916,1917,1920,1923],{"class":59,"line":96},[57,1918,1919],{"class":1903},"    access_key",[57,1921,1922],{"class":80},":",[57,1924,1925],{"class":67}," XXXXXXXXXXXXXXXXXXXX\n",[57,1927,1928,1931,1933,1936],{"class":59,"line":112},[57,1929,1930],{"class":1903},"    secret_key",[57,1932,1922],{"class":80},[57,1934,1935],{"class":67}," XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",[57,1937,1793],{"class":102},[57,1939,1940,1943,1945],{"class":59,"line":140},[57,1941,1942],{"class":1903},"    default_organization_id",[57,1944,1922],{"class":80},[57,1946,1947],{"class":67}," XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n",[57,1949,1950,1953,1955],{"class":59,"line":153},[57,1951,1952],{"class":1903},"    default_project_id",[57,1954,1922],{"class":80},[57,1956,1947],{"class":67},[57,1958,1959,1962,1964],{"class":59,"line":189},[57,1960,1961],{"class":1903},"    default_zone",[57,1963,1922],{"class":80},[57,1965,1966],{"class":67}," fr-par-1\n",[57,1968,1969,1972,1974],{"class":59,"line":201},[57,1970,1971],{"class":1903},"    default_region",[57,1973,1922],{"class":80},[57,1975,1976],{"class":67}," fr-par\n",[57,1978,1979,1982,1984],{"class":59,"line":212},[57,1980,1981],{"class":1903},"    api_url",[57,1983,1922],{"class":80},[57,1985,1986],{"class":67}," https:\u002F\u002Fapi.scaleway.com\n",[57,1988,1989,1992,1994],{"class":59,"line":224},[57,1990,1991],{"class":1903},"    insecure",[57,1993,1922],{"class":80},[57,1995,1225],{"class":1996},"sfNiH",[1998,1999,2000,2004,2007,2010,2013,2016,2025,2028,2031],"ol",{},[2001,2002,2003],"li",{},"Nous précisons le fournisseur avec qui l’on souhaite interagir, c’est à dire Scaleway.",[2001,2005,2006],{},"Nous avons défini un profil nommé « kassianoff-blog » pour contacter notre fournisseur. Cela fait référence à un fichier de configuration (qui n’est pas celui par défaut). Celui-ci contient nos secrets, notre zone de déploiement ainsi que le endpoint de Scaleway :",[2001,2008,2009],{},"Nous ajoutons une clé SSH à notre profil Scaleway afin de pouvoir nous connecter à notre prochaine instance.",[2001,2011,2012],{},"Nous ajoutons une ressource ip_publique afin de pouvoir obtenir une adresse IP sur notre prochaine instance.",[2001,2014,2015],{},"Nous déclarons une variable « locales » dans un array JSON avec plusieurs valeurs : ip_source, any_in, any_out, afin de pouvoir les réutiliser dans l’édition de la configuration du pare-feu Scaleway.",[2001,2017,2018,2019,2024],{},"Nous allons ensuite créer un groupe de sécurité Scaleway en y intégrant nos règles pare-feu dans une ",[26,2020,2023],{"href":2021,"rel":2022},"https:\u002F\u002Fwww.terraform.io\u002Flanguage\u002Fexpressions\u002Fdynamic-blocks",[30],"expression dynamique"," afin de réutiliser nos variables.",[2001,2026,2027],{},"Nous allons par la suite créer notre instance serveur en choisissant son nom, son type et ses caractéristiques. Nous remarquons que l’intégration avec l’ip publique et que le groupe de sécurité est bien visible.",[2001,2029,2030],{},"De plus, nous souhaitons créer une base de donnée managée par Scaleway afin de nous affranchir de sa gestion. Nous connectons en plus un réseau privé à notre base de données et configurons son interface dans le réseau privé.",[2001,2032,2033],{},"Un réseau privé sera créé afin de faire communiquer l’instance et la base de donnée dans un réseau privé (il vous faudra configuration votre interface ens5(eth1) sur le serveur linux pour accéder à la base de donnée).",[513,2035,2037],{"id":2036},"terraform-avec-ovhcloud","Terraform avec OVHcloud",[15,2039,2040],{},"Voici un autre petit exemple pour basculer mon serveur kimsufi datant de 2013 en mode rescue et le redémarrer :",[47,2042,2044],{"className":49,"code":2043,"language":51,"meta":52,"style":52},"terraform {\n  required_providers {\n    ovh = {\n      source  = \"ovh\u002Fovh\"\n    }\n  }\n}\n\nprovider \"ovh\" {\nendpoint = \"ovh-eu\"\napplication_key = \"namJkXXXXXXXXXXX\"\napplication_secret = \"rXXXXXXXXXXXX\"\nconsumer_key = \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"\n}\n\ndata ovh_dedicated_server_boots \"rescue\" {\nservice_name = \"ksXXXXXXX.kimsufi.com\"\nboot_type = \"rescue\"\nkernel = \"rescue64-pro\"\n}\n\nresource ovh_dedicated_server_update \"server_on_rescue\" {\nservice_name = \"ksXXXXXXX.kimsufi.com\"\nboot_id = data.ovh_dedicated_server_boots.rescue.result[0]\nmonitoring = true\nstate = \"ok\"\n}\n\nresource ovh_dedicated_server_reboot_task \"server_reboot\" {\nservice_name = data.ovh_dedicated_server_boots.rescue.service_name\nkeepers = [\novh_dedicated_server_update.server_on_rescue.boot_id,\n]\n\n}\n",[54,2045,2046,2052,2059,2068,2082,2087,2092,2096,2100,2113,2127,2141,2155,2169,2173,2177,2194,2208,2221,2235,2239,2243,2259,2271,2281,2290,2304,2308,2312,2328,2337,2346,2351,2356,2360],{"__ignoreMap":52},[57,2047,2048,2050],{"class":59,"line":60},[57,2049,20],{"class":63},[57,2051,534],{"class":67},[57,2053,2054,2057],{"class":59,"line":74},[57,2055,2056],{"class":67},"  required_providers",[57,2058,534],{"class":67},[57,2060,2061,2064,2066],{"class":59,"line":96},[57,2062,2063],{"class":67},"    ovh",[57,2065,549],{"class":67},[57,2067,534],{"class":67},[57,2069,2070,2073,2075,2077,2080],{"class":59,"line":112},[57,2071,2072],{"class":67},"      source ",[57,2074,549],{"class":67},[57,2076,561],{"class":80},[57,2078,2079],{"class":67},"ovh\u002Fovh",[57,2081,567],{"class":80},[57,2083,2084],{"class":59,"line":140},[57,2085,2086],{"class":67},"    }\n",[57,2088,2089],{"class":59,"line":153},[57,2090,2091],{"class":67},"  }\n",[57,2093,2094],{"class":59,"line":189},[57,2095,596],{"class":102},[57,2097,2098],{"class":59,"line":201},[57,2099,602],{"emptyLinePlaceholder":601},[57,2101,2102,2104,2106,2109,2111],{"class":59,"line":212},[57,2103,607],{"class":63},[57,2105,561],{"class":80},[57,2107,2108],{"class":67},"ovh",[57,2110,615],{"class":80},[57,2112,534],{"class":67},[57,2114,2115,2118,2120,2122,2125],{"class":59,"line":224},[57,2116,2117],{"class":63},"endpoint",[57,2119,549],{"class":67},[57,2121,561],{"class":80},[57,2123,2124],{"class":67},"ovh-eu",[57,2126,567],{"class":80},[57,2128,2129,2132,2134,2136,2139],{"class":59,"line":242},[57,2130,2131],{"class":63},"application_key",[57,2133,549],{"class":67},[57,2135,561],{"class":80},[57,2137,2138],{"class":67},"namJkXXXXXXXXXXX",[57,2140,567],{"class":80},[57,2142,2143,2146,2148,2150,2153],{"class":59,"line":260},[57,2144,2145],{"class":63},"application_secret",[57,2147,549],{"class":67},[57,2149,561],{"class":80},[57,2151,2152],{"class":67},"rXXXXXXXXXXXX",[57,2154,567],{"class":80},[57,2156,2157,2160,2162,2164,2167],{"class":59,"line":275},[57,2158,2159],{"class":63},"consumer_key",[57,2161,549],{"class":67},[57,2163,561],{"class":80},[57,2165,2166],{"class":67},"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",[57,2168,567],{"class":80},[57,2170,2171],{"class":59,"line":290},[57,2172,596],{"class":102},[57,2174,2175],{"class":59,"line":301},[57,2176,602],{"emptyLinePlaceholder":601},[57,2178,2179,2182,2185,2187,2190,2192],{"class":59,"line":312},[57,2180,2181],{"class":63},"data",[57,2183,2184],{"class":67}," ovh_dedicated_server_boots",[57,2186,561],{"class":80},[57,2188,2189],{"class":67},"rescue",[57,2191,615],{"class":80},[57,2193,534],{"class":67},[57,2195,2196,2199,2201,2203,2206],{"class":59,"line":324},[57,2197,2198],{"class":63},"service_name",[57,2200,549],{"class":67},[57,2202,561],{"class":80},[57,2204,2205],{"class":67},"ksXXXXXXX.kimsufi.com",[57,2207,567],{"class":80},[57,2209,2210,2213,2215,2217,2219],{"class":59,"line":357},[57,2211,2212],{"class":63},"boot_type",[57,2214,549],{"class":67},[57,2216,561],{"class":80},[57,2218,2189],{"class":67},[57,2220,567],{"class":80},[57,2222,2223,2226,2228,2230,2233],{"class":59,"line":368},[57,2224,2225],{"class":63},"kernel",[57,2227,549],{"class":67},[57,2229,561],{"class":80},[57,2231,2232],{"class":67},"rescue64-pro",[57,2234,567],{"class":80},[57,2236,2237],{"class":59,"line":381},[57,2238,596],{"class":102},[57,2240,2241],{"class":59,"line":388},[57,2242,602],{"emptyLinePlaceholder":601},[57,2244,2245,2247,2250,2252,2255,2257],{"class":59,"line":406},[57,2246,658],{"class":63},[57,2248,2249],{"class":67}," ovh_dedicated_server_update",[57,2251,561],{"class":80},[57,2253,2254],{"class":67},"server_on_rescue",[57,2256,615],{"class":80},[57,2258,534],{"class":67},[57,2260,2261,2263,2265,2267,2269],{"class":59,"line":415},[57,2262,2198],{"class":63},[57,2264,549],{"class":67},[57,2266,561],{"class":80},[57,2268,2205],{"class":67},[57,2270,567],{"class":80},[57,2272,2273,2276,2278],{"class":59,"line":435},[57,2274,2275],{"class":63},"boot_id",[57,2277,549],{"class":67},[57,2279,2280],{"class":67}," data.ovh_dedicated_server_boots.rescue.result[0]\n",[57,2282,2283,2286,2288],{"class":59,"line":456},[57,2284,2285],{"class":63},"monitoring",[57,2287,549],{"class":67},[57,2289,1674],{"class":80},[57,2291,2292,2295,2297,2299,2302],{"class":59,"line":766},[57,2293,2294],{"class":63},"state",[57,2296,549],{"class":67},[57,2298,561],{"class":80},[57,2300,2301],{"class":67},"ok",[57,2303,567],{"class":80},[57,2305,2306],{"class":59,"line":777},[57,2307,596],{"class":102},[57,2309,2310],{"class":59,"line":813},[57,2311,602],{"emptyLinePlaceholder":601},[57,2313,2314,2316,2319,2321,2324,2326],{"class":59,"line":843},[57,2315,658],{"class":63},[57,2317,2318],{"class":67}," ovh_dedicated_server_reboot_task",[57,2320,561],{"class":80},[57,2322,2323],{"class":67},"server_reboot",[57,2325,615],{"class":80},[57,2327,534],{"class":67},[57,2329,2330,2332,2334],{"class":59,"line":849},[57,2331,2198],{"class":63},[57,2333,549],{"class":67},[57,2335,2336],{"class":67}," data.ovh_dedicated_server_boots.rescue.service_name\n",[57,2338,2339,2342,2344],{"class":59,"line":854},[57,2340,2341],{"class":63},"keepers",[57,2343,549],{"class":67},[57,2345,774],{"class":102},[57,2347,2348],{"class":59,"line":864},[57,2349,2350],{"class":63},"ovh_dedicated_server_update.server_on_rescue.boot_id,\n",[57,2352,2353],{"class":59,"line":896},[57,2354,2355],{"class":102},"]\n",[57,2357,2358],{"class":59,"line":926},[57,2359,602],{"emptyLinePlaceholder":601},[57,2361,2362],{"class":59,"line":931},[57,2363,596],{"class":102},[15,2365,2366,2367,2370],{},"L’une des premières commandes Terraform est « ",[32,2368,2369],{},"terraform init","« . Elle est utilisée pour initialiser un répertoire de travail contenant les fichiers de configuration de Terraform. Il s’agit de la première commande à exécuter après l’écriture d’une nouvelle configuration Terraform.",[47,2372,2374],{"className":49,"code":2373,"language":51,"meta":52,"style":52},"terraform init\n\nInitializing the backend...\n\nInitializing provider plugins...\n\n- Finding ovh\u002Fovh versions matching \"~> 0.11.0\"...\n\n- Installing ovh\u002Fovh v0.11.0...\n\n- Installed ovh\u002Fovh v0.11.0 (signed by a HashiCorp partner, key ID F56D1A6CBDAAADA5)\n\nPartner and community providers are signed by their developers.\nIf you'd like to know more about provider signing, you can read about it here:\nhttps:\u002F\u002Fwww.terraform.io\u002Fdocs\u002Fcli\u002Fplugins\u002Fsigning.html\n\nTerraform has created a lock file .terraform.lock.hcl to record the provider\nselections it made above. Include this file in your version control repository\nso that Terraform can guarantee to make the same selections by default when\nyou run \"terraform init\" in the future.\n\nTerraform has been successfully initialized!\n\nYou may now begin working with Terraform. Try running \"terraform plan\" to see\nany changes that are required for your infrastructure. All Terraform commands\nshould now work.\n\nIf you ever set or change modules or backend configuration for Terraform,\nrerun this command to reinitialize your working directory. If you forget, other\ncommands will detect it and remind you to do so if necessary.\n",[54,2375,2376,2383,2387,2398,2402,2412,2416,2442,2446,2458,2462,2501,2505,2532,2546,2551,2555,2560,2565,2570,2575,2579,2584,2588,2593,2598,2603,2607,2612,2617],{"__ignoreMap":52},[57,2377,2378,2380],{"class":59,"line":60},[57,2379,20],{"class":63},[57,2381,2382],{"class":67}," init\n",[57,2384,2385],{"class":59,"line":74},[57,2386,602],{"emptyLinePlaceholder":601},[57,2388,2389,2392,2395],{"class":59,"line":96},[57,2390,2391],{"class":63},"Initializing",[57,2393,2394],{"class":67}," the",[57,2396,2397],{"class":67}," backend...\n",[57,2399,2400],{"class":59,"line":112},[57,2401,602],{"emptyLinePlaceholder":601},[57,2403,2404,2406,2409],{"class":59,"line":140},[57,2405,2391],{"class":63},[57,2407,2408],{"class":67}," provider",[57,2410,2411],{"class":67}," plugins...\n",[57,2413,2414],{"class":59,"line":153},[57,2415,602],{"emptyLinePlaceholder":601},[57,2417,2418,2421,2424,2427,2430,2433,2435,2438,2440],{"class":59,"line":189},[57,2419,2420],{"class":63},"-",[57,2422,2423],{"class":67}," Finding",[57,2425,2426],{"class":67}," ovh\u002Fovh",[57,2428,2429],{"class":67}," versions",[57,2431,2432],{"class":67}," matching",[57,2434,561],{"class":80},[57,2436,2437],{"class":67},"~> 0.11.0",[57,2439,615],{"class":80},[57,2441,93],{"class":67},[57,2443,2444],{"class":59,"line":201},[57,2445,602],{"emptyLinePlaceholder":601},[57,2447,2448,2450,2453,2455],{"class":59,"line":212},[57,2449,2420],{"class":63},[57,2451,2452],{"class":67}," Installing",[57,2454,2426],{"class":67},[57,2456,2457],{"class":67}," v0.11.0...\n",[57,2459,2460],{"class":59,"line":224},[57,2461,602],{"emptyLinePlaceholder":601},[57,2463,2464,2466,2469,2471,2474,2477,2480,2483,2486,2489,2492,2495,2498],{"class":59,"line":242},[57,2465,2420],{"class":63},[57,2467,2468],{"class":67}," Installed",[57,2470,2426],{"class":67},[57,2472,2473],{"class":67}," v0.11.0",[57,2475,2476],{"class":102}," (signed ",[57,2478,2479],{"class":67},"by",[57,2481,2482],{"class":67}," a",[57,2484,2485],{"class":67}," HashiCorp",[57,2487,2488],{"class":67}," partner,",[57,2490,2491],{"class":67}," key",[57,2493,2494],{"class":67}," ID",[57,2496,2497],{"class":67}," F56D1A6CBDAAADA5",[57,2499,2500],{"class":102},")\n",[57,2502,2503],{"class":59,"line":260},[57,2504,602],{"emptyLinePlaceholder":601},[57,2506,2507,2510,2512,2515,2518,2521,2524,2526,2529],{"class":59,"line":275},[57,2508,2509],{"class":63},"Partner",[57,2511,131],{"class":67},[57,2513,2514],{"class":67}," community",[57,2516,2517],{"class":67}," providers",[57,2519,2520],{"class":67}," are",[57,2522,2523],{"class":67}," signed",[57,2525,447],{"class":67},[57,2527,2528],{"class":67}," their",[57,2530,2531],{"class":67}," developers.\n",[57,2533,2534,2537,2540,2543],{"class":59,"line":290},[57,2535,2536],{"class":63},"If",[57,2538,2539],{"class":67}," you",[57,2541,2542],{"class":80},"'",[57,2544,2545],{"class":67},"d like to know more about provider signing, you can read about it here:\n",[57,2547,2548],{"class":59,"line":301},[57,2549,2550],{"class":67},"https:\u002F\u002Fwww.terraform.io\u002Fdocs\u002Fcli\u002Fplugins\u002Fsigning.html\n",[57,2552,2553],{"class":59,"line":312},[57,2554,602],{"emptyLinePlaceholder":601},[57,2556,2557],{"class":59,"line":324},[57,2558,2559],{"class":67},"Terraform has created a lock file .terraform.lock.hcl to record the provider\n",[57,2561,2562],{"class":59,"line":357},[57,2563,2564],{"class":67},"selections it made above. Include this file in your version control repository\n",[57,2566,2567],{"class":59,"line":368},[57,2568,2569],{"class":67},"so that Terraform can guarantee to make the same selections by default when\n",[57,2571,2572],{"class":59,"line":381},[57,2573,2574],{"class":67},"you run \"terraform init\" in the future.\n",[57,2576,2577],{"class":59,"line":388},[57,2578,602],{"emptyLinePlaceholder":601},[57,2580,2581],{"class":59,"line":406},[57,2582,2583],{"class":67},"Terraform has been successfully initialized!\n",[57,2585,2586],{"class":59,"line":415},[57,2587,602],{"emptyLinePlaceholder":601},[57,2589,2590],{"class":59,"line":435},[57,2591,2592],{"class":67},"You may now begin working with Terraform. Try running \"terraform plan\" to see\n",[57,2594,2595],{"class":59,"line":456},[57,2596,2597],{"class":67},"any changes that are required for your infrastructure. All Terraform commands\n",[57,2599,2600],{"class":59,"line":766},[57,2601,2602],{"class":67},"should now work.\n",[57,2604,2605],{"class":59,"line":777},[57,2606,602],{"emptyLinePlaceholder":601},[57,2608,2609],{"class":59,"line":813},[57,2610,2611],{"class":67},"If you ever set or change modules or backend configuration for Terraform,\n",[57,2613,2614],{"class":59,"line":843},[57,2615,2616],{"class":67},"rerun this command to reinitialize your working directory. If you forget, other\n",[57,2618,2619],{"class":59,"line":849},[57,2620,2621],{"class":67},"commands will detect it and remind you to do so if necessary.\n",[15,2623,2624,2625,2628],{},"La seconde commande est « ",[32,2626,2627],{},"terraform plan","« . La commande crée un plan d’exécution, qui vous permet de prévisualiser les modifications que Terraform prévoit d’apporter à votre infrastructure.",[15,2630,2631],{},"Par défaut, lorsque Terraform crée un plan, il lit l’état actuel de tous les objets distants déjà existants pour s’assurer que l’état de Terraform est à jour. Il compare ensuite la configuration actuelle à l’état précédent et note toute différence. Il propose alors un ensemble d’actions de modification qui devraient, si elles sont appliquées, faire en sorte que les objets distants correspondent à la configuration actuelle :",[47,2633,2635],{"className":49,"code":2634,"language":51,"meta":52,"style":52},"terraform plan\n\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\n\n  + create\n\nTerraform will perform the following actions:\n\n  # ovh_dedicated_server_reboot_task.server_reboot will be created\n\n  + resource \"ovh_dedicated_server_reboot_task\" \"server_reboot\" {\n      + comment      = (known after apply)\n      + done_date    = (known after apply)\n      + function     = (known after apply)\n      + id           = (known after apply)\n      + keepers      = [\n          + \"1122\",\n        ]\n\n      + last_update  = (known after apply)\n      + service_name = \"ksxxxxxxx.kimsufi.com\"\n      + start_date   = (known after apply)\n      + status       = (known after apply)\n\n    }\n\n  # ovh_dedicated_server_update.server_on_rescue will be created\n  + resource \"ovh_dedicated_server_update\" \"server_on_rescue\" {\n\n      + boot_id      = 1122\n      + id           = (known after apply)\n      + monitoring   = true\n      + service_name = \"ksxxxxxxx.kimsufi.com\"\n\n      + state        = \"ok\"\n\n    }\n\nPlan: 2 to add, 0 to change, 0 to destroy.\n\nDo you want to perform these actions?\n  Terraform will perform the actions described above.\n  Only 'yes' will be accepted to approve.\n  Enter a value: yes\n\novh_dedicated_server_update.server_on_rescue: Creating...\novh_dedicated_server_update.server_on_rescue: Still creating... [10s elapsed]\novh_dedicated_server_update.server_on_rescue: Creation complete after 11s [id=ksxxxxxxx.kimsufi.com]\novh_dedicated_server_reboot_task.server_reboot: Creating...\novh_dedicated_server_reboot_task.server_reboot: Still creating... [10s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [20s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [30s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [40s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [50s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [1m0s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [1m10s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [1m20s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [1m30s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Creation complete after 1m31s [id=251909160]\n\nApply complete! Resources: 2 added, 0 changed, 0 destroyed.\n",[54,2636,2637,2644,2648,2699,2703,2711,2715,2732,2736,2741,2745,2767,2789,2807,2825,2843,2854,2869,2874,2878,2896,2912,2930,2948,2952,2956,2960,2965,2986,2990,3002,3018,3029,3043,3047,3063,3067,3071,3075,3103,3107,3126,3145,3171,3184,3188,3196,3212,3231,3238,3250,3263,3276,3289,3302,3315,3328,3341,3354,3370,3374],{"__ignoreMap":52},[57,2638,2639,2641],{"class":59,"line":60},[57,2640,20],{"class":63},[57,2642,2643],{"class":67}," plan\n",[57,2645,2646],{"class":59,"line":74},[57,2647,602],{"emptyLinePlaceholder":601},[57,2649,2650,2652,2655,2657,2660,2662,2665,2668,2670,2673,2676,2679,2682,2685,2687,2690,2692,2694,2696],{"class":59,"line":96},[57,2651,21],{"class":63},[57,2653,2654],{"class":67}," used",[57,2656,2394],{"class":67},[57,2658,2659],{"class":67}," selected",[57,2661,2517],{"class":67},[57,2663,2664],{"class":67}," to",[57,2666,2667],{"class":67}," generate",[57,2669,2394],{"class":67},[57,2671,2672],{"class":67}," following",[57,2674,2675],{"class":67}," execution",[57,2677,2678],{"class":67}," plan.",[57,2680,2681],{"class":67}," Resource",[57,2683,2684],{"class":67}," actions",[57,2686,2520],{"class":67},[57,2688,2689],{"class":67}," indicated",[57,2691,468],{"class":67},[57,2693,2394],{"class":67},[57,2695,2672],{"class":67},[57,2697,2698],{"class":67}," symbols:\n",[57,2700,2701],{"class":59,"line":112},[57,2702,602],{"emptyLinePlaceholder":601},[57,2704,2705,2708],{"class":59,"line":140},[57,2706,2707],{"class":63},"  +",[57,2709,2710],{"class":67}," create\n",[57,2712,2713],{"class":59,"line":153},[57,2714,602],{"emptyLinePlaceholder":601},[57,2716,2717,2719,2722,2725,2727,2729],{"class":59,"line":189},[57,2718,21],{"class":63},[57,2720,2721],{"class":67}," will",[57,2723,2724],{"class":67}," perform",[57,2726,2394],{"class":67},[57,2728,2672],{"class":67},[57,2730,2731],{"class":67}," actions:\n",[57,2733,2734],{"class":59,"line":201},[57,2735,602],{"emptyLinePlaceholder":601},[57,2737,2738],{"class":59,"line":212},[57,2739,2740],{"class":384},"  # ovh_dedicated_server_reboot_task.server_reboot will be created\n",[57,2742,2743],{"class":59,"line":224},[57,2744,602],{"emptyLinePlaceholder":601},[57,2746,2747,2749,2752,2754,2757,2759,2761,2763,2765],{"class":59,"line":242},[57,2748,2707],{"class":63},[57,2750,2751],{"class":67}," resource",[57,2753,561],{"class":80},[57,2755,2756],{"class":67},"ovh_dedicated_server_reboot_task",[57,2758,615],{"class":80},[57,2760,561],{"class":80},[57,2762,2323],{"class":67},[57,2764,615],{"class":80},[57,2766,534],{"class":67},[57,2768,2769,2772,2775,2778,2781,2784,2787],{"class":59,"line":260},[57,2770,2771],{"class":63},"      +",[57,2773,2774],{"class":67}," comment",[57,2776,2777],{"class":67},"      =",[57,2779,2780],{"class":102}," (known ",[57,2782,2783],{"class":67},"after",[57,2785,2786],{"class":67}," apply",[57,2788,2500],{"class":102},[57,2790,2791,2793,2796,2799,2801,2803,2805],{"class":59,"line":275},[57,2792,2771],{"class":63},[57,2794,2795],{"class":67}," done_date",[57,2797,2798],{"class":67},"    =",[57,2800,2780],{"class":102},[57,2802,2783],{"class":67},[57,2804,2786],{"class":67},[57,2806,2500],{"class":102},[57,2808,2809,2811,2814,2817,2819,2821,2823],{"class":59,"line":290},[57,2810,2771],{"class":63},[57,2812,2813],{"class":67}," function",[57,2815,2816],{"class":67},"     =",[57,2818,2780],{"class":102},[57,2820,2783],{"class":67},[57,2822,2786],{"class":67},[57,2824,2500],{"class":102},[57,2826,2827,2829,2832,2835,2837,2839,2841],{"class":59,"line":301},[57,2828,2771],{"class":63},[57,2830,2831],{"class":67}," id",[57,2833,2834],{"class":67},"           =",[57,2836,2780],{"class":102},[57,2838,2783],{"class":67},[57,2840,2786],{"class":67},[57,2842,2500],{"class":102},[57,2844,2845,2847,2850,2852],{"class":59,"line":312},[57,2846,2771],{"class":63},[57,2848,2849],{"class":67}," keepers",[57,2851,2777],{"class":67},[57,2853,774],{"class":102},[57,2855,2856,2859,2861,2864,2866],{"class":59,"line":324},[57,2857,2858],{"class":63},"          +",[57,2860,561],{"class":80},[57,2862,2863],{"class":67},"1122",[57,2865,615],{"class":80},[57,2867,2868],{"class":67},",\n",[57,2870,2871],{"class":59,"line":357},[57,2872,2873],{"class":102},"        ]\n",[57,2875,2876],{"class":59,"line":368},[57,2877,602],{"emptyLinePlaceholder":601},[57,2879,2880,2882,2885,2888,2890,2892,2894],{"class":59,"line":381},[57,2881,2771],{"class":63},[57,2883,2884],{"class":67}," last_update",[57,2886,2887],{"class":67},"  =",[57,2889,2780],{"class":102},[57,2891,2783],{"class":67},[57,2893,2786],{"class":67},[57,2895,2500],{"class":102},[57,2897,2898,2900,2903,2905,2907,2910],{"class":59,"line":388},[57,2899,2771],{"class":63},[57,2901,2902],{"class":67}," service_name",[57,2904,549],{"class":67},[57,2906,561],{"class":80},[57,2908,2909],{"class":67},"ksxxxxxxx.kimsufi.com",[57,2911,567],{"class":80},[57,2913,2914,2916,2919,2922,2924,2926,2928],{"class":59,"line":406},[57,2915,2771],{"class":63},[57,2917,2918],{"class":67}," start_date",[57,2920,2921],{"class":67},"   =",[57,2923,2780],{"class":102},[57,2925,2783],{"class":67},[57,2927,2786],{"class":67},[57,2929,2500],{"class":102},[57,2931,2932,2934,2937,2940,2942,2944,2946],{"class":59,"line":415},[57,2933,2771],{"class":63},[57,2935,2936],{"class":67}," status",[57,2938,2939],{"class":67},"       =",[57,2941,2780],{"class":102},[57,2943,2783],{"class":67},[57,2945,2786],{"class":67},[57,2947,2500],{"class":102},[57,2949,2950],{"class":59,"line":435},[57,2951,602],{"emptyLinePlaceholder":601},[57,2953,2954],{"class":59,"line":456},[57,2955,572],{"class":102},[57,2957,2958],{"class":59,"line":766},[57,2959,602],{"emptyLinePlaceholder":601},[57,2961,2962],{"class":59,"line":777},[57,2963,2964],{"class":384},"  # ovh_dedicated_server_update.server_on_rescue will be created\n",[57,2966,2967,2969,2971,2973,2976,2978,2980,2982,2984],{"class":59,"line":813},[57,2968,2707],{"class":63},[57,2970,2751],{"class":67},[57,2972,561],{"class":80},[57,2974,2975],{"class":67},"ovh_dedicated_server_update",[57,2977,615],{"class":80},[57,2979,561],{"class":80},[57,2981,2254],{"class":67},[57,2983,615],{"class":80},[57,2985,534],{"class":67},[57,2987,2988],{"class":59,"line":843},[57,2989,602],{"emptyLinePlaceholder":601},[57,2991,2992,2994,2997,2999],{"class":59,"line":849},[57,2993,2771],{"class":63},[57,2995,2996],{"class":67}," boot_id",[57,2998,2777],{"class":67},[57,3000,3001],{"class":118}," 1122\n",[57,3003,3004,3006,3008,3010,3012,3014,3016],{"class":59,"line":854},[57,3005,2771],{"class":63},[57,3007,2831],{"class":67},[57,3009,2834],{"class":67},[57,3011,2780],{"class":102},[57,3013,2783],{"class":67},[57,3015,2786],{"class":67},[57,3017,2500],{"class":102},[57,3019,3020,3022,3025,3027],{"class":59,"line":864},[57,3021,2771],{"class":63},[57,3023,3024],{"class":67}," monitoring",[57,3026,2921],{"class":67},[57,3028,1674],{"class":80},[57,3030,3031,3033,3035,3037,3039,3041],{"class":59,"line":896},[57,3032,2771],{"class":63},[57,3034,2902],{"class":67},[57,3036,549],{"class":67},[57,3038,561],{"class":80},[57,3040,2909],{"class":67},[57,3042,567],{"class":80},[57,3044,3045],{"class":59,"line":926},[57,3046,602],{"emptyLinePlaceholder":601},[57,3048,3049,3051,3054,3057,3059,3061],{"class":59,"line":931},[57,3050,2771],{"class":63},[57,3052,3053],{"class":67}," state",[57,3055,3056],{"class":67},"        =",[57,3058,561],{"class":80},[57,3060,2301],{"class":67},[57,3062,567],{"class":80},[57,3064,3065],{"class":59,"line":936},[57,3066,602],{"emptyLinePlaceholder":601},[57,3068,3069],{"class":59,"line":946},[57,3070,572],{"class":102},[57,3072,3073],{"class":59,"line":990},[57,3074,602],{"emptyLinePlaceholder":601},[57,3076,3077,3080,3083,3085,3088,3091,3093,3096,3098,3100],{"class":59,"line":1032},[57,3078,3079],{"class":63},"Plan:",[57,3081,3082],{"class":118}," 2",[57,3084,2664],{"class":67},[57,3086,3087],{"class":67}," add,",[57,3089,3090],{"class":118}," 0",[57,3092,2664],{"class":67},[57,3094,3095],{"class":67}," change,",[57,3097,3090],{"class":118},[57,3099,2664],{"class":67},[57,3101,3102],{"class":67}," destroy.\n",[57,3104,3105],{"class":59,"line":1073},[57,3106,602],{"emptyLinePlaceholder":601},[57,3108,3109,3112,3114,3117,3119,3121,3123],{"class":59,"line":1114},[57,3110,3111],{"class":63},"Do",[57,3113,2539],{"class":67},[57,3115,3116],{"class":67}," want",[57,3118,2664],{"class":67},[57,3120,2724],{"class":67},[57,3122,462],{"class":67},[57,3124,3125],{"class":67}," actions?\n",[57,3127,3128,3131,3133,3135,3137,3139,3142],{"class":59,"line":1119},[57,3129,3130],{"class":63},"  Terraform",[57,3132,2721],{"class":67},[57,3134,2724],{"class":67},[57,3136,2394],{"class":67},[57,3138,2684],{"class":67},[57,3140,3141],{"class":67}," described",[57,3143,3144],{"class":67}," above.\n",[57,3146,3147,3150,3153,3156,3158,3160,3163,3166,3168],{"class":59,"line":1124},[57,3148,3149],{"class":63},"  Only",[57,3151,3152],{"class":80}," '",[57,3154,3155],{"class":67},"yes",[57,3157,2542],{"class":80},[57,3159,2721],{"class":67},[57,3161,3162],{"class":67}," be",[57,3164,3165],{"class":67}," accepted",[57,3167,2664],{"class":67},[57,3169,3170],{"class":67}," approve.\n",[57,3172,3173,3176,3178,3181],{"class":59,"line":1129},[57,3174,3175],{"class":63},"  Enter",[57,3177,2482],{"class":67},[57,3179,3180],{"class":67}," value:",[57,3182,3183],{"class":67}," yes\n",[57,3185,3186],{"class":59,"line":1150},[57,3187,602],{"emptyLinePlaceholder":601},[57,3189,3190,3193],{"class":59,"line":1159},[57,3191,3192],{"class":63},"ovh_dedicated_server_update.server_on_rescue:",[57,3194,3195],{"class":67}," Creating...\n",[57,3197,3198,3200,3203,3206,3209],{"class":59,"line":1174},[57,3199,3192],{"class":63},[57,3201,3202],{"class":67}," Still",[57,3204,3205],{"class":67}," creating...",[57,3207,3208],{"class":102}," [10s ",[57,3210,3211],{"class":67},"elapsed]\n",[57,3213,3214,3216,3219,3222,3225,3228],{"class":59,"line":1188},[57,3215,3192],{"class":63},[57,3217,3218],{"class":67}," Creation",[57,3220,3221],{"class":67}," complete",[57,3223,3224],{"class":67}," after",[57,3226,3227],{"class":67}," 11s",[57,3229,3230],{"class":102}," [id=ksxxxxxxx.kimsufi.com]\n",[57,3232,3233,3236],{"class":59,"line":1203},[57,3234,3235],{"class":63},"ovh_dedicated_server_reboot_task.server_reboot:",[57,3237,3195],{"class":67},[57,3239,3240,3242,3244,3246,3248],{"class":59,"line":1217},[57,3241,3235],{"class":63},[57,3243,3202],{"class":67},[57,3245,3205],{"class":67},[57,3247,3208],{"class":102},[57,3249,3211],{"class":67},[57,3251,3252,3254,3256,3258,3261],{"class":59,"line":1228},[57,3253,3235],{"class":63},[57,3255,3202],{"class":67},[57,3257,3205],{"class":67},[57,3259,3260],{"class":102}," [20s ",[57,3262,3211],{"class":67},[57,3264,3265,3267,3269,3271,3274],{"class":59,"line":1233},[57,3266,3235],{"class":63},[57,3268,3202],{"class":67},[57,3270,3205],{"class":67},[57,3272,3273],{"class":102}," [30s ",[57,3275,3211],{"class":67},[57,3277,3278,3280,3282,3284,3287],{"class":59,"line":1248},[57,3279,3235],{"class":63},[57,3281,3202],{"class":67},[57,3283,3205],{"class":67},[57,3285,3286],{"class":102}," [40s ",[57,3288,3211],{"class":67},[57,3290,3291,3293,3295,3297,3300],{"class":59,"line":1265},[57,3292,3235],{"class":63},[57,3294,3202],{"class":67},[57,3296,3205],{"class":67},[57,3298,3299],{"class":102}," [50s ",[57,3301,3211],{"class":67},[57,3303,3304,3306,3308,3310,3313],{"class":59,"line":1270},[57,3305,3235],{"class":63},[57,3307,3202],{"class":67},[57,3309,3205],{"class":67},[57,3311,3312],{"class":102}," [1m0s ",[57,3314,3211],{"class":67},[57,3316,3317,3319,3321,3323,3326],{"class":59,"line":1278},[57,3318,3235],{"class":63},[57,3320,3202],{"class":67},[57,3322,3205],{"class":67},[57,3324,3325],{"class":102}," [1m10s ",[57,3327,3211],{"class":67},[57,3329,3330,3332,3334,3336,3339],{"class":59,"line":1293},[57,3331,3235],{"class":63},[57,3333,3202],{"class":67},[57,3335,3205],{"class":67},[57,3337,3338],{"class":102}," [1m20s ",[57,3340,3211],{"class":67},[57,3342,3343,3345,3347,3349,3352],{"class":59,"line":1304},[57,3344,3235],{"class":63},[57,3346,3202],{"class":67},[57,3348,3205],{"class":67},[57,3350,3351],{"class":102}," [1m30s ",[57,3353,3211],{"class":67},[57,3355,3356,3358,3360,3362,3364,3367],{"class":59,"line":1315},[57,3357,3235],{"class":63},[57,3359,3218],{"class":67},[57,3361,3221],{"class":67},[57,3363,3224],{"class":67},[57,3365,3366],{"class":67}," 1m31s",[57,3368,3369],{"class":102}," [id=251909160]\n",[57,3371,3372],{"class":59,"line":1326},[57,3373,602],{"emptyLinePlaceholder":601},[57,3375,3376,3379,3382,3385,3387,3390,3392,3395,3397],{"class":59,"line":1331},[57,3377,3378],{"class":63},"Apply",[57,3380,3381],{"class":67}," complete!",[57,3383,3384],{"class":67}," Resources:",[57,3386,3082],{"class":118},[57,3388,3389],{"class":67}," added,",[57,3391,3090],{"class":118},[57,3393,3394],{"class":67}," changed,",[57,3396,3090],{"class":118},[57,3398,3399],{"class":67}," destroyed.\n",[15,3401,3402,3403,3407,3408,3413],{},"Un courriel d’OVH arrivera automatiquement dans votre boîte mail afin de vous transmettre les informations de connexion en mode rescue. Je vous invite à consulter ",[26,3404,3406],{"href":500,"rel":3405},[30],"la documentation OVH"," afin de déployer d’autres types de configuration et également ",[26,3409,3412],{"href":3410,"rel":3411},"https:\u002F\u002Fwww.terraform.io\u002Fdocs",[30],"la documentation Terraform"," pour en apprendre d’avantage.",[10,3415,3417],{"id":3416},"conclusion","Conclusion",[15,3419,3420],{},"J'ai présenté l'installation de Terraform sous macOS ainsi que deux exemples concrets de configuration : le provisionnement d'une infrastructure complète chez Scaleway (clé SSH, pare-feu, instance, base de données et réseau privé) et le pilotage d'un serveur dédié OVHcloud pour le basculer en mode rescue. Les commandes essentielles terraform init, plan et apply sont détaillées avec leurs sorties réelles. Cette approche d'infrastructure as code permet d'automatiser et de documenter des déploiements autrement réalisés manuellement. Elle suppose de bien sécuriser les secrets (clés API, mots de passe) utilisés dans les fichiers de configuration.",[3422,3423,3424],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":52,"searchDepth":74,"depth":74,"links":3426},[3427,3428,3429,3430,3434],{"id":12,"depth":74,"text":13},{"id":20,"depth":74,"text":21},{"id":41,"depth":74,"text":42},{"id":507,"depth":74,"text":508,"children":3431},[3432,3433],{"id":515,"depth":96,"text":516},{"id":2036,"depth":96,"text":2037},{"id":3416,"depth":74,"text":3417},[3436],"Linux","\u002Fimages\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud\u002Fce5716efc3.png",null,"2022-05-24","Terraform permet d'automatiser le déploiement de ressource.","md",{},"\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud",[3445],"certificat-hashicorp-certified-terraform-associate",{"title":5,"description":3440},"blog-configuration-terraform-scaleway-ovhcloud","blog\u002Fblog-configuration-terraform-scaleway-ovhcloud","S9l7fPFQ61ezKKB28oY7JlWDm-OmQxwzF8seMcUMeb8",[3451,3460,3468,3476,3483,3489,3496,3504],{"title":3452,"path":3453,"stem":3454,"date":3455,"cover":3456,"categories":3457,"children":-1},"Junos Associé (JNCIA-Junos)","\u002Fblog\u002Fcertificat-junos-associe-jncia-junos","blog\u002Fcertificat-junos-associe-jncia-junos","2023-01-17","\u002Fimages\u002Fblog\u002Fcertificat-junos-associe-jncia-junos\u002F773018337d.png",[3458,3459],"Certifications","Réseau",{"title":3461,"path":3462,"stem":3463,"date":3464,"cover":3465,"categories":3466,"children":-1},"Microsoft : Security, Compliance, and Identity Fundamentals","\u002Fblog\u002Fcertificat-microsoft-security-compliance-and-identity-fundamentals","blog\u002Fcertificat-microsoft-security-compliance-and-identity-fundamentals","2022-10-17","\u002Fimages\u002Fblog\u002Fcertificat-microsoft-security-compliance-and-identity-fundamentals\u002F70ef935f2a.png",[3458,3467],"Microsoft",{"title":3469,"path":3470,"stem":3471,"date":3472,"cover":3473,"categories":3474,"children":-1},"Hack In Paris 2022 conférence cybersécurité de l’année","\u002Fblog\u002Fhack-in-paris-2022-conference-cybersecurite-de-lannee","blog\u002Fhack-in-paris-2022-conference-cybersecurite-de-lannee","2022-06-19","\u002Fimages\u002Fblog\u002Fhack-in-paris-2022-conference-cybersecurite-de-lannee\u002F8ad6403cd6.png",[3475],"Évènement",{"title":3477,"path":3478,"stem":3479,"date":3480,"cover":3481,"categories":3482,"children":-1},"Déployer Microsoft Defender ATP avec Ansible","\u002Fblog\u002Fdeployer-microsoft-defender-atp-avec-ansible","blog\u002Fdeployer-microsoft-defender-atp-avec-ansible","2022-05-28","\u002Fimages\u002Fblog\u002Fdeployer-microsoft-defender-atp-avec-ansible\u002F20b08b6e35.jpg",[3436],{"title":3484,"path":3485,"stem":3486,"date":3439,"cover":3487,"categories":3488,"children":-1},"Configuration Nginx avec VueJS (erreur 404)","\u002Fblog\u002Fconfiguration-nginx-avec-vuejs-erreur-404","blog\u002Fconfiguration-nginx-avec-vuejs-erreur-404","\u002Fimages\u002Fblog\u002Fconfiguration-nginx-avec-vuejs-erreur-404\u002Fc5873a58c2.jpg",[3436],{"title":3490,"path":3491,"stem":3492,"date":3493,"cover":3494,"categories":3495,"children":-1},"Gérez votre parc informatique avec GLPI","\u002Fblog\u002Fcertificat-gerez-votre-parc-informatique-avec-glpi","blog\u002Fcertificat-gerez-votre-parc-informatique-avec-glpi","2022-01-12","\u002Fimages\u002Fblog\u002Fcertificat-gerez-votre-parc-informatique-avec-glpi\u002Fb3a9f2486c.jpg",[3458],{"title":3497,"path":3498,"stem":3499,"date":3500,"cover":3501,"categories":3502,"children":-1},"Sécurisez vos infrastructures","\u002Fblog\u002Fcertificat-securisez-vos-infrastructures","blog\u002Fcertificat-securisez-vos-infrastructures","2021-10-29","\u002Fimages\u002Fblog\u002Fcertificat-securisez-vos-infrastructures\u002Fdcf3ea9308.jpg",[3458,3503],"Sécurité",{"title":3505,"path":3506,"stem":3507,"date":3508,"cover":3509,"categories":3510,"children":-1},"En route vers l’électrique avec Tesla","\u002Fblog\u002Fen-route-vers-electrique-avec-tesla","blog\u002Fen-route-vers-electrique-avec-tesla","2021-07-07","\u002Fimages\u002Fblog\u002Fen-route-vers-electrique-avec-tesla\u002F7dec469e8d.jpg",[3475],[3512],{"id":3513,"title":3514,"body":3515,"categories":3592,"cover":3594,"cover_contain":601,"credly_badge_id":3595,"date":3596,"description":3597,"extension":3441,"meta":3598,"navigation":601,"path":3599,"related_certifications":3438,"seo":3600,"slug":3445,"stem":3601,"__hash__":3602},"blog\u002Fblog\u002Fcertificat-hashicorp-certified-terraform-associate.md","HashiCorp Terraform Associate",{"type":7,"value":3516,"toc":3588},[3517,3519,3522,3529,3577,3583,3585],[10,3518,13],{"id":12},[15,3520,3521],{},"Pour industrialiser le déploiement d'infrastructures chez mes clients, j'ai passé cette certification HashiCorp Terraform Associate.",[15,3523,3524,3525,3528],{},"Le parcours de formation \"Terraform Associate\" est dédié aux professionnels IT en charge des opérations de déploiement des infrastructures notamment.",[3526,3527],"br",{},"\nLe catalogue de cours aborde les modules suivants :",[3530,3531,3532,3537,3542,3547,3552,3557,3562,3567,3572],"ul",{},[2001,3533,3534],{},[32,3535,3536],{},"Understand Infrastructure as Code (IaC) concepts",[2001,3538,3539],{},[32,3540,3541],{},"Understand the purpose of Terraform (vs other IaC)",[2001,3543,3544],{},[32,3545,3546],{},"Understand Terraform basics",[2001,3548,3549],{},[32,3550,3551],{},"Use Terraform outside the core workflow",[2001,3553,3554],{},[32,3555,3556],{},"Interact with Terraform modules",[2001,3558,3559],{},[32,3560,3561],{},"Use the core Terraform workflow",[2001,3563,3564],{},[32,3565,3566],{},"Implement and maintain state",[2001,3568,3569],{},[32,3570,3571],{},"Read, generate, and modify configuration",[2001,3573,3574],{},[32,3575,3576],{},"Understand HCP Terraform capabilities",[15,3578,3579,3580,3582],{},"le temps à accorder à la formation est d'environ 4 jours.",[3526,3581],{},"\nIl faut ensuite prévoir environ 1h45 pour le passage de la certification : Terraform Associate.",[10,3584,3417],{"id":3416},[15,3586,3587],{},"Cette formation Pearson VUE couvre l'ensemble des concepts nécessaires pour aborder sereinement la certification Terraform Associate : infrastructure as code, workflow Terraform, gestion du state et utilisation des modules. Elle valide une compréhension solide des bonnes pratiques de déploiement d'infrastructure via Terraform. Une certification utile pour tout professionnel amené à automatiser des infrastructures cloud.",{"title":52,"searchDepth":74,"depth":74,"links":3589},[3590,3591],{"id":12,"depth":74,"text":13},{"id":3416,"depth":74,"text":3417},[3458,3593],"Code","\u002Fimages\u002Fblog\u002Fcertificat-hashicorp-certified-terraform-associate\u002F488880edcf.png","632a52a8-b218-4463-aa2e-f85c9643535f","2025-02-11","HashiCorp Terraform Associate : formation Pearson VUE, suivie pour ma veille professionnelle en cybersécurité et informatique.",{},"\u002Fblog\u002Fcertificat-hashicorp-certified-terraform-associate",{"title":3514,"description":3597},"blog\u002Fcertificat-hashicorp-certified-terraform-associate","T-lmqpQdXpyqd7gazRLEh_VPtdzcZheXz_mv9oaBOYM",1786644871003]