← Pulumi / pulumi / tutorial
Přidejte pobočku
V tomto tutoriálu budete postupovat podle podrobného návodu, jak převést existující web pod Cloudflare pomocí infrastruktury jako kódu (IaC) v Pulumi, abyste se seznámili s životním cyklem správy prostředků. Konkrétně vytvoříte Zone a záznam DNS pro přeložení nově přidaného webu. Tento tutoriál uplatňuje princip IaC při plnění kroků uvedených v Tutoriál pro přidání webu.
Než začnete
Ujistěte se, že máte:
- Účet Cloudflare a API token s oprávněním upravovat prostředky uvedené v tomto tutoriálu. V případě potřeby si zaregistrujte účet Cloudflare ↗ než budete pokračovat. Váš token musí mít:
Zone-Zone-EditoprávněníZone-DNS-Editoprávněníinclude-All zones from an account-<your account>prostředek zóny
- Účet Pulumi Cloud. Můžete se zaregistrovat na always-free individual tier ↗.
- Pulumi CLI je nainstalovaný na vašem počítači.
- A Programovací jazyk podporovaný Pulumi ↗ je nakonfigurovaný. (TypeScript, JavaScript, Python, Go, .NET, Java, nebo použijte YAML)
- Název domény. Můžete použít
example.comk dokončení tutoriálu.
1. Inicializace projektu
Projekt Pulumi je sada souborů ve vyhrazené složce, která popisuje infrastrukturu, jež chcete vytvořit. Složka projektu Pulumi se rozpoznává podle povinného Pulumi.yaml soubor. K vytvoření a konfiguraci nového projektu použijete Pulumi CLI.
a. Vytvořte adresář
Pro tento návod použijte nový a prázdný adresář.
mkdir addsite-cloudflare
cd addsite-cloudflareb. Přihlaste se do Pulumi Cloud
Pulumi Cloud ↗ je hostovaná služba, která poskytuje zabezpečenou a škálovatelnou platformu pro správu infrastruktury jako kódu. Použijete ji k uložení konfigurací backendu Pulumi.
Ve výzvě stiskněte Enter a přihlaste se ke svému účtu Pulumi Cloud přes prohlížeč. Případně můžete zadat Přístupový token Pulumi Cloud ↗.
pulumi loginc. Vytvořte nový program
Program Pulumi je kód napsaný v podporovaný programovací jazyk ↗ který definuje prostředky infrastruktury.
Chcete-li vytvořit program, vyberte preferovaný jazyk a spusťte pulumi příkaz:
pulumi new javascript --name addsite-cloudflare --yes
# wait a few seconds while the project is initializedpulumi new typescript --name addsite-cloudflare --yes
# wait a few seconds while the project is initializedpulumi new python --name addsite-cloudflare --yes
# wait a few seconds while the project is initializedpulumi new go --name addsite-cloudflare --yes
# wait a few seconds while the project is initializedpulumi new java --name addsite-cloudflare --yes
# wait a few seconds while the project is initializedpulumi new csharp --name addsite-cloudflare --yes
# wait a few seconds while the project is initializedpulumi new yaml --name addsite-cloudflare --yesd. Vytvořte stack
Pulumi stack ↗ je instancí programu Pulumi. Stacky lze konfigurovat nezávisle na sobě a mohou představovat různá prostředí (vývoj, staging, produkce) nebo feature branche. V tomto tutoriálu použijete dev stack.
Chcete-li vytvořit instanci svého dev stack spusťte:
pulumi up --yes
# wait a few seconds for the stack to be instantiated.V tuto chvíli jste ještě nedefinovali žádné zdroje, takže budete mít prázdný stack.
e. Uložte nastavení
V tomto kroku uložíte svá nastavení do Pulumi ESC Environment ↗, soubor YAML obsahující konfigurace a tajné hodnoty. Lze k nim přistupovat několika způsoby, včetně programu Pulumi. Všechna prostředí ESC jsou bezpečně uložena ve vašem účtu Pulumi Cloud a lze je plně spravovat přes Pulumi CLI. V tomto tutoriálu uložíte následující hodnoty:
# Define an ESC Environment name
E=cloudflare/my-dev-env
# Create a new Pulumi ESC Environment
pulumi config env init --env $E --yesCreating environment cloudflare/my-dev-env for stack dev...# Replace abc123 with your Cloudflare Account ID
pulumi env set $E --plaintext pulumiConfig.accountId abc123
# Replace API_TOKEN with your Cloudflare API Token
pulumi env set $E --secret pulumiConfig.cloudflare:apiToken API_TOKEN
# Replace example.com with your registered domain, or leave as is
pulumi env set $E --plaintext pulumiConfig.domain example.comf. Nainstalujte balíček Cloudflare
Aby bylo možné definovat zdroje Cloudflare ve svém programu Pulumi, musíte nainstalovat balíček Cloudflare pro vámi zvolený jazyk.
Nainstalujte balíček Cloudflare spuštěním následujícího příkazu:
npm install @pulumi/cloudflareadded 1 package ...npm install @pulumi/cloudflareadded 1 package ...echo "pulumi_cloudflare>=5.38,<6.0.0" >> requirements.txt
source venv/bin/activate
pip install -r requirements.txt...Collecting pulumi-cloudflare...go get github.com/pulumi/pulumi-cloudflare/sdk/v3/go/cloudflarego: downloading github.com/pulumi/pulumi-cloudflare ...Níže jsou uvedeny pokyny pro Apache Maven. Pro jiné správce Java projektů, jako je Gradle, se podívejte na oficiální Repozitář Maven ↗
- Otevřete
pom.xml. - Přidejte závislost Pulumi Cloudflare do
<dependencies>sekce.
<dependency>
<groupId>com.pulumi</groupId>
<artifactId>cloudflare</artifactId>
<version>5.38.0</version>
</dependency>- Spusťte:
mvn clean install...[INFO] BUILD SUCCESS...dotnet add package Pulumi.Cloudflare...
info : Adding PackageReference for package 'Pulumi.Cloudflare' into project
...Pro YAML není třeba stahovat žádné závislosti. Přeskočte tuto část.
2. Definice prostředků Cloudflare v kódu
Po instalaci balíčku Cloudflare nyní můžete definovat libovolný podporovaný zdroj Cloudflare ↗ ve vašem programu Pulumi. Dále definujete Zone a DNS Record.
a. Přidejte Zone
Doména, neboli web, se v Cloudflare označuje jako Zone. V Pulumi Zdroj Zone ↗ představuje Cloudflare Zone.
Nahraďte obsah svého vstupního souboru následujícím:
Název souboru: index.js
"use strict";
const pulumi = require("@pulumi/pulumi");
const cloudflare = require("@pulumi/cloudflare");
const config = new pulumi.Config();
const accountId = config.require("accountId");
const domain = config.require("domain");
// Create a Cloudflare resource (Zone)
const zone = new cloudflare.Zone("my-zone", {
zone: domain,
accountId: accountId,
plan: "free",
jumpStart: true,
});
exports.zoneId = zone.id;
exports.nameservers = zone.nameServers;
exports.status = zone.status;Název souboru: index.ts
import * as pulumi from "@pulumi/pulumi";
import * as cloudflare from "@pulumi/cloudflare";
const config = new pulumi.Config();
const accountId = config.require("accountId");
const domain = config.require("domain");
// Create a Cloudflare resource (Zone)
const zone = new cloudflare.Zone("my-zone", {
zone: domain,
accountId: accountId,
plan: "free",
jumpStart: true,
});
export const zoneId = zone.id;
export const nameservers = zone.nameServers;
export const status = zone.status;Název souboru: __main__.py
import pulumi
import pulumi_cloudflare as cloudflare
account_id = pulumi.Config().require("accountId")
domain = pulumi.Config().require("domain")
# Create a Cloudflare resource (Zone)
zone = cloudflare.Zone("my-zone",
zone=domain,
account_id=account_id,
plan="free",
jump_start=True)
pulumi.export("zoneId", zone.id)
pulumi.export('nameservers', zone.name_servers)
pulumi.export('status', zone.status)Název souboru: main.go
package main
import (
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
cloudflare "github.com/pulumi/pulumi-cloudflare/sdk/v3/go/cloudflare"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
domain, _ := ctx.GetConfig("domain")
// Create a Cloudflare resource (Zone)
zone, err := cloudflare.NewZone(ctx, "my-zone", &cloudflare.ZoneArgs{
Zone: pulumi.String(domain),
Plan: pulumi.String("free"),
JumpStart: pulumi.Bool(true),
})
if err != nil {
return err
}
ctx.Export("zoneId", zone.ID())
ctx.Export("nameservers", zone.NameServers)
ctx.Export("status", zone.Status)
return nil
})
}Název souboru: src/main/java/myproject/App.java
package myproject;
import com.pulumi.Pulumi;
import com.pulumi.Context;
import com.pulumi.cloudflare.ZoneArgs;
import com.pulumi.cloudflare.Zone;
public class App {
public static void main(String[] args) {
Pulumi.run(ctx -> {
var config = ctx.config();
String accountId = config.require("accountId");
String domain = config.require("domain");
var zone = new Zone("my-zone", ZoneArgs.builder()
.zone(domain)
.accountId(accountId)
.plan("free")
.jumpStart(true)
.build());
ctx.export("zoneId", zone.id());
ctx.export("nameservers", zone.nameServers());
ctx.export("status", zone.status());
});
}
}Název souboru: Program.cs
using System.Threading.Tasks;
using System.Collections.Immutable;
using Pulumi;
using Pulumi.Cloudflare;
class Program
{
static Task<int> Main() => Deployment.RunAsync<MyStack>();
class MyStack : Stack
{
public MyStack()
{
var config = new Pulumi.Config();
var accountId = config.Require("accountId");
var domain = config.Require("domain");
var zone = new Zone("my-zone", new ZoneArgs
{
ZoneName = domain,
AccountId = accountId,
Plan = "free",
JumpStart = true
});
this.ZoneId = zone.Id;
this.Nameservers = zone.NameServers;
this.Status = zone.Status;
}
[Output]
public Output<string> ZoneId { get; set; }
public Output<ImmutableArray<string>> Nameservers { get; set; }
public Output<string> Status { get; set; }
}
}Název souboru: Pulumi.yaml
name: addsite-cloudflare
runtime: yaml
resources:
myZone:
type: cloudflare:Zone
properties:
zone: ${domain}
accountId: ${accountId}
plan: "free"
jumpStart: true
outputs:
zoneId: ${myZone.id}
nameservers: ${exampleZone.nameServers}
status: ${exampleZone.status}Všimněte si, že kód také vypisuje několik vlastností prostředku Zone, například zoneId, nameservers, a status, aby k nim bylo možné snadno přistupovat v následujících krocích.
b. Přidejte DNS Record
Nyní přidáte DNS Prostředek Record ↗ k otestování dříve nakonfigurované Zone.
Do vstupního souboru přidejte následující úryvek kódu po definici prostředku Zone:
Název souboru: index.js
const record = new cloudflare.Record("my-record", {
zoneId: zone.id,
name: domain,
content: "192.0.2.1",
type: "A",
proxied: true,
});Název souboru: index.ts
const record = new cloudflare.Record("my-record", {
zoneId: zone.id,
name: domain,
content: "192.0.2.1",
type: "A",
proxied: true,
});Název souboru: __main__.py
record = cloudflare.Record("my-record",
zone_id=zone.id,
name=domain,
content="192.0.2.1",
type="A",
proxied=True
)Název souboru: main.go
_, err = cloudflare.NewRecord(ctx, "my-record", &cloudflare.RecordArgs{
ZoneId: zone.ID(),
Name: pulumi.String(domain),
Content: pulumi.String("192.0.2.1"),
Type: pulumi.String("A"),
Proxied: pulumi.Bool(true),
})
if err != nil {
return err
}Název souboru: src/main/java/myproject/App.java
// Add imports
import com.pulumi.cloudflare.Record;
import com.pulumi.cloudflare.RecordArgs;
// Below the Zone resource, add
new Record("my-record", RecordArgs.builder()
.zoneId(zone.id())
.name(domain)
.content("192.0.2.1")
.type("A")
.proxied(true)
.build());Název souboru: Program.cs
new Record("my-record", new RecordArgs
{
ZoneId = zone.Id,
Name = domain,
Content = "192.0.2.1",
Type = "A",
Proxied = true
});Název souboru: Pulumi.yaml
myRecord:
type: cloudflare:Record
properties:
zoneId: ${myZone.id}
name: ${domain}
content: 192.0.2.1
type: A
proxied: true3. Nasazení změn
Nyní, když jste definovali své prostředky, můžete pomocí Pulumi CLI nasadit změny, aby se projevily ve vašem účtu Cloudflare.
Chcete-li nasadit změny, spusťte:
pulumi up --yeswait for the dev stack to become ready4. Konfigurace poskytovatele DNS
a. Získejte své nameservery
Jakmile přidáte doménu do Cloudflare, tato doména obdrží dva přiřazené autoritativní jmenné servery.
Chcete-li získat přiřazený nameservers, spusťte:
pulumi stack outputb. Aktualizujte registrátora
Aktualizujte nameservery u svého registrátora, abyste aktivovali služby Cloudflare pro svou doménu. Postup se liší podle registrátora. Návod můžete najít v tento souhrnný seznam běžných registrátorů.
c. Zkontrolujte stav domény
Po úspěšné registraci vaše doména status se změní na active.
pulumi stack output5. Otestování webu
Spustíte dva nslookup příkazů vůči jmenným serverům přiřazeným Cloudflare.
Chcete-li otestovat svůj web, spusťte:
DOMAIN=$(pulumi config get domain)
NS1=$(pulumi stack output nameservers | jq '.[0]' -r)
NS2=$(pulumi stack output nameservers | jq '.[1]' -r)
nslookup $DOMAIN $NS1
nslookup $DOMAIN $NS2Pro .NET použijte Nameservers jako Output.
Ověřte, že odpověď vrací IP adresu (adresy) vašeho webu.
6. Úklid
V tomto posledním kroku odstraníte prostředky a stack použité v celém tutoriálu.
a. Odstraňte zdroje
pulumi destroy --yesb. Odstraňte stack
pulumi stack rm devDalší kroky
Postupně jste definovali zdroje Cloudflare potřebné k přidání webu do Cloudflare. Zdroje deklarujete ve vámi zvoleném programovacím jazyce a zbytek necháte na Pulumi.
Chcete-li nasadit bezserverovou aplikaci pomocí Pulumi, postupujte podle Tutoriál Nasazení Workeru.