Automatisch inrichten van commercetools projecten met Pulumi
Tech21 september 2021

Automatisch inrichten van commercetools projecten met Pulumi

Dit artikel introduceert de commercetools Pulumi plugin 🚀. Met deze plug-in kun je resources voor commercetools inrichten, zoals projectinstellingen, producttypen en integraties in veelgebruikte programmeertalen zoals C#, TypeScript, Go en Python.

Infrastructure as Code

Bij Aviva Solutions maken we vanaf het begin gebruik van Cloud Infrastructure, met name Microsoft Azure. Eén ding dat we vanaf het begin hebben geleerd, is dat het cruciaal is om de inrichting van alles te automatiseren. Dit maakt het een stuk eenvoudiger om extra resources aan te maken wanneer dat nodig is of om tijdelijke ontwikkel-/testomgevingen op te zetten. Het zorgt er ook voor dat je deze dingen op een repetitieve manier kunt doen.

Infrastructure as code (IaC) is het proces van het beheren en inrichten van computerdatacenters via definitiebestanden, in plaats van fysieke hardwareconfiguratie of interactieve configuratietoolsWikipedia

Pulumi

Er zijn veel provisioningtools en de meeste gebruiken configuratiebestanden of een eigen taal. Pulumi is een vrij nieuwe tool waarmee je je cloudinfrastructuur kunt inrichten met behulp van een programmeertaal. Pulumi ondersteunt het gebruik van TypeScript, C#, GO en Python. We hebben geen toegewijde DevOps-rol in ons team en de ontwikkelaars zorgen dan ook voor de inrichting van de infrastructuur. Door Pulumi te gebruiken, kunnen ze de programmeertaal gebruiken die ze kennen. Het gebruik van een getypeerde taal zoals C# of TypeScript geeft je ook code completion, waardoor er bijna geen documentatie meer nodig is en er minder fouten worden gemaakt. Een ander groot voordeel is dat je provisioningcode wordt gecompileerd en fouten meteen worden opgemerkt. Zo ziet het inrichten van een nieuw Azure Storage-account eruit met Pulumi:

// Create an Azure Resource Group
var resourceGroup = new ResourceGroup("storefront-integration");

// Create an Azure Storage Account
var storageAccount = new Account("storage", new AccountArgs
{
    ResourceGroupName = resourceGroup.Name,
    AccountReplicationType = "LRS",
    AccountTier = "Standard"
});

commercetools

commercetools is een headless e-commerceplatform dat door Gartner en Forrester wordt geranked als een leider in Digital Commerce. We gebruiken commercetools vanwege de volwassenheid en de hoge kwaliteit van de API's en documentatie. In plaats van functie na functie toe te voegen, lijkt commercetools zich te concentreren op de belangrijkste commerce functionaliteit. Al het andere kun je zelf doen door middel van uitbreidbaarheid. In onze ervaring is het een heel flexibel platform. Het is ook Cloud Native, dus je hoeft niet je eigen infrastructuur te beheren.

Alle Azure-resources deden wij al automatisch inrichten, maar de integratie in commercetools moest nog steeds handmatig worden geconfigureerd. We hebben bijvoorbeeld een Azure-functie die een zoekindex bijwerkt wanneer een product verandert in commercetools. Deze Azure-functie luistert naar een Queue in Azure. commercetools heeft zogenaamde Subscriptions, die kunnen worden gebruikt om automatisch een bericht af te leveren aan een Queue van Azure, Amazon Web Services of Google Cloud Platform. Subscriptions kunnen worden geconfigureerd via de commercetools API. Ook andere instellingen van commercetools werden nog met de hand geconfigureerd, zoals projectinstellingen, productdefinities, enz.

Alle Azure-resources deden wij al automatisch inrichten, maar de integratie in commercetools moest nog steeds handmatig worden geconfigureerd

De mensen van Lab Digital👋 zagen dezelfde behoefte als wij 🙏 en ze hebben een hoogwaardige Terraform provider for commercetools gecreëerd. Terraform is een inrichtingstool die een eigen taal gebruikt: HashiCorp Configuration Language (HCL). Zoals we eerder vermeldden, gebruiken we liever een taal zoals C# of TypeScript. Gelukkig is het mogelijk om een Pulumi-plug-in te maken die fungeert als een brug naar een Terraform-provider. Dus dat is precies wat we deden.

De Pulumi commercetools plugin maakt onder de motorkap gebruik van de Lab Digital Terraform-provider. We kunnen nu automatisch commercetools resources inrichten in onze eigen programmeertaal. Zo richten wij bijvoorbeeld een commercetools Subscription in. De gebruikte ConnectionString is de output van de Azure Queue die we in hetzelfde project hebben gemaakt:

new Pulumi.commercetools.Subscription("Index update", new Pulumi.commercetools.SubscriptionArgs
{
    Key = "index-update",
    Destination = new SubscriptionDestinationArgs
    {
        Type = "azure_servicebus",
        ConnectionString = IndexUpdateConnectionString,
        Region = "not_used",
        Uri = "http://notused.com",
    },
    Messages = new List<SubscriptionMessageArgs>
    {
        new SubscriptionMessageArgs
        {
            ResourceTypeId = "product",
            Types = new List<string>
            {
                "ProductPublished"
            }
        }
    },
});

Aan de slag

Instructies over hoe je aan de slag kunt, vind je in de Github repository. Laat ons alsjeblieft weten wat je ervan vindt.

Jonne Kats
Geschreven door Jonne Kats
Op 21 september 2021