INTEGRITY Dokumentace

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:

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-cloudflare

b. 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 login

c. 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 initialized
pulumi new typescript --name addsite-cloudflare --yes
# wait a few seconds while the project is initialized
pulumi new python --name addsite-cloudflare --yes
# wait a few seconds while the project is initialized
pulumi new go --name addsite-cloudflare --yes
# wait a few seconds while the project is initialized
pulumi new java --name addsite-cloudflare --yes
# wait a few seconds while the project is initialized
pulumi new csharp --name addsite-cloudflare --yes
# wait a few seconds while the project is initialized
pulumi new yaml --name addsite-cloudflare --yes

d. 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 --yes
Creating 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.com

f. 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/cloudflare
added 1 package ...
npm install @pulumi/cloudflare
added 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/cloudflare
go: 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 ↗

  1. Otevřete pom.xml .
  2. Přidejte závislost Pulumi Cloudflare do <dependencies> sekce.
<dependency>
    <groupId>com.pulumi</groupId>
    <artifactId>cloudflare</artifactId>
    <version>5.38.0</version>
</dependency>
  1. 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: true

3. 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 --yes
wait for the dev stack to become ready

4. 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 output

b. 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 output

5. 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 $NS2

Pro .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 --yes

b. Odstraňte stack

pulumi stack rm dev

Další 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.