Pular para o conteúdo principal

Criar Plugins e Stack de Infra

Nesta seção, você encontra como criar Plugins de Infra na StackSpot.


Introdução

  • Nível Intermediário

Este é um exemplo de como criar um Plugin de Infraestrutura na StackSpot, para saber mais detalhes e criar seu Plugin de Infra, confira a página de Plugins.

Antes de começar

Este exemplo orienta a criação de dois Plugins de Infraestrutura:

  1. Plugin de Infra S3 Bucket.
  2. Plugin de Infra CloudFront.

Esses Plugins de Infra configuram a Infraestrutura para fazer o deploy de uma Aplicação utilizando os Plugins de App criados no exemplo.

Pré-requisitos

stk login

Neste guia, você usará conteúdos prontos de dois repositórios públicos da StackSpot para editar seu Plugin:

Esses dois Plugins auxiliam na criação e no deploy de uma Aplicação e de sua Infraestrutura.

1. Criar Plugin de Infraestrutura

Plugins de Infraestrutura auxiliam a prover recursos para uma Aplicação.

Passo 1. Criar um diretório vazio

Crie um diretório. No seu terminal, execute:

mkdir plugin-demo

Acesse o diretório na IDE de sua preferência, como o Visual Studio Code.

Passo 2. Criar um bucket S3 Infra Plugin

Na sua IDE, abra o terminal e execute o comando para criar a estrutura do seu Plugin de Infra:

stk create plugin bucket-s3-plugin
informação

"bucket-s3-plugin" é o nome do Plugin. Você também pode executar apenas o comando stk create plugin e responder às perguntas no terminal.

Depois de executar o comando, responda às perguntas:

? Nomeie seu plugin: bucket-s3-plugin
? Você deseja iniciar um repositório git? No
? Descrição do plugin: (Descreva seu plugin explicando o propósito): Criar um bucket S3
? Versão: (0.0.1) → Aperte Enter
? Selecione o tipo de plugin: Infra
? Você gostaria de adicionar uma Connection Requerida? No
? Você gostaria de adicionar uma Connection Gerada? Yes → O Plugin precisa gerar uma Interface de Conexão (Connection Interface) para que o Plugin de CloudFront consiga se conectar a ele depois de criar a infraestrutura.
? Generated Connections: aws-s3-conn
? Alias para aws-s3-conn: bucket-s3-plugin-conn
? Você gostaria de adicionar outra Connection Gerada? No
- Plugin bucket-s3-plugin criado com sucesso.

Passo 3. Editar o Plugin de Infra Bucket S3

Você deve editar o código IaC do seu S3 Bucket e a estrutura do Plugin para torná-lo o template do seu Plugin de Infra.

Use os arquivos do repositório S3 Bucket Plugin mencionado anteriormente.

  1. Clone o repositório.
  2. Abra os arquivos do repositório na sua IDE.
  3. Abra a pasta templates-deploy e copie os arquivos.

Você pode apagar o arquivo README.

Esses são arquivos Terraform, e o seu Plugin Bucket S3 será público.

atenção

Acesse o arquivo plugin.yaml do seu Plugin Bucket S3 e verifique os valores destacados:

- label: Digite o nome da connection do bucket_s3
name: bucket_s3
type: generated-connection
connection-interface-type: aws-s3-conn
outputs:
- from: bucket-s3-plugin-conn-arn
to: arn
- from: bucket-s3-plugin-conn-bucket_name
to: bucket_name

Em seguida, adicione o arquivo outputs.tf que você copiou. Os valores devem estar como no exemplo:

output "bucket-s3-plugin-conn-arn" {
value = aws_s3_bucket.b.arn
}
output "bucket-s3-plugin-conn-bucket_name" {
value = aws_s3_bucket.b.bucket
}

Os valores de from no arquivo plugin.yaml devem ser os mesmos dos output do arquivo outputs.tf.

  1. Você precisa remover esses inputs porque o seu Plugin de Infra não irá utilizá-los.

Acesse o arquivo plugin.yaml e apague os valores debaixo de inputs. Eles estão destacados:

schema-version: v4
kind: plugin
metadata:
name: bucket-s3-plugin
display-name: bucket-s3-plugin
description: Create bucket s3
version: 0.0.1
picture: plugin.png
spec:
type: infra
compatibility:
- python
docs:
pt-br: docs/pt-br/docs.md
en-us: docs/en-us/docs.md
single-use: False
runtime:
environment:
- terraform-1-4
- aws-cli-2
- git-2
technologies: # Ref: https://docs.stackspot.com/create-use/create-content/yaml-files/plugin-yaml/#technologies-1
- Api
stk-projects-only: false
inputs:
- label: Type name of your resource
name: resource
type: text
required: true
default: Client
pattern: '([A-Z][a-z]+)+'
help: 'Inform your resource name (e.g.: Client)'
- label: Digite o nome da connection do bucket_s3
name: bucket_s3
type: generated-connection
connection-interface-type: aws-s3-conn
outputs:
- from: bucket-s3-plugin-conn-arn
to: arn
- from: bucket-s3-plugin-conn-bucket_name
to: bucket_name
- label: Choose http method of new endpoint
name: method
type: select
items:
- GET
- POST
- PUT
- DELETE
- PATCH
default: GET
required: true
help: 'Inform the method of the endpoint (e.g.: post or delete)'
  1. Agora, você deve adicionar as novas entradas porque elas obtêm os dados (inputs) para serem usados no código de IaC do template do Bucket S3.

Vá para o arquivo plugin.yaml do repositório clonado. Copie e cole o conteúdo de inputs no arquivo do seu Plugin.

Após isso, o seu arquivo plugin.yaml deve ficar assim:

schema-version: v4
kind: plugin
metadata:
name: bucket-s3-plugin
display-name: bucket-s3-plugin
description: Create bucket s3
version: 0.0.1
picture: plugin.png
spec:
type: infra
compatibility:
- python
docs:
pt-br: docs/pt-br/docs.md
en-us: docs/en-us/docs.md
single-use: False
runtime:
environment:
- terraform-1-4
- aws-cli-2
- git-2
technologies: # Ref: https://docs.stackspot.com/create-use/create-content/yaml-files/plugin-yaml/#technologies-1
- Api
stk-projects-only: false
inputs:
- label: Type name of your bucket
name: bucket_name
type: text
required: true
help: 'Inform your bucket s3 name'
- label: Digite o nome da connection do bucket_s3
name: bucket_s3
type: generated-connection
connection-interface-type: aws-s3-conn
outputs:
- from: bucket-s3-plugin-conn-arn
to: arn
- from: bucket-s3-plugin-conn-bucket_name
to: bucket_name

Pronto, você editou o seu Bucket S3 Plugin.

Passo 4. Testar o Plugin de Infra Bucket S3 localmente

Teste o Plugin que você criou localmente usando o comando stk apply plugin.
Adicione a flag --deploy para gerar os arquivos Terraform localmente.

Confira:

stk apply plugin /Users/username/plugin-demo/bucket-s3-plugin --deploy

Para testar, siga:

  1. Crie um novo diretório. Execute o comando:
mkdir test-project
  1. Acesse o diretório e execute o comando.

Use o caminho raiz do Plugin que você acabou de criar, confira o exemplo:

stk apply plugin /Users/username/plugin-demo/bucket-s3-plugin --deploy

Os arquivos do Plugin devem aparecer dentro do diretório test-project.

informação

Você não pode aplicar um Plugin localmente se estiver em um Workspace. Para sair, execute o comando:

stk exit workspace 

Passo 5. Publicar o Plugin de Infra Bucket S3

Atenção!

Pré-requisitos

  1. Vá até a raiz do diretório do S3 Bucket Plugin e execute:

Você tem duas opções: executar o comando e selecionar o Studio
ou informar a flag --studio, como no exemplo:

stk publish plugin --studio studio-slug-name

Na StackSpot, Slugs são identificadores únicos para Contas, Studios, Stacks e Plugins, e fazem parte das URLs da StackSpot.

Pronto, você publicou o Plugin. Encontre-o no seu Studio.

Passo 6. Criar um Plugin de Infra de CloudFront

Na sua IDE, abra o terminal e execute o comando para criar a estrutura do seu Plugin de Infra:

stk create plugin cloudfront-plugin
informação

"cloudfront-plugin" é o nome do Plugin. Você também pode executar apenas o comando stk create plugin e responder às perguntas no terminal.

Depois de executar o comando, responda às seguintes perguntas:

? Nomeie seu plugin: cloudfront-plugin
? Você deseja iniciar um repositório git? No
? Descrição do plugin: (Descreva seu plugin explicando o propósito): Criar e configurar uma distribuição CloudFront
? Versão: (0.0.1) → Aperte Enter
? Selecione o tipo de plugin: Infra
? Você gostaria de adicionar uma Connection Requerida? Sim → Neste caso, o Plugin requer a mesma Interface de Conexão gerada anteriormente pelo Plugin do bucket S3.
? Connection Requerida: aws-s3-conn
? Alias para aws-s3-conn: bucket-s3-cloudfront-conn
? Você gostaria de adicionar outra Connection Requerida? No
? Você gostaria de adicionar uma Connection Gerada? No

Plugin cloudfront-plugin criado com sucesso.

Passo 7. Editar o Plugin de Infra CloudFront

Agora, utilize os arquivos do repositório Cloudfront Plugin.

  1. Clone o repositório.
  2. Abra os arquivos na sua IDE.
  3. Abra a pasta templates-deploy e copie os arquivos.
  4. Volte para o diretório do seu Plugin de CloudFront e cole os arquivos que você copiou dentro da pasta templates-deploy.

Você pode apagar o arquivo README.

Sobre os arquivos

Esses são arquivos Terraform.

  • O arquivo main.tf configurará toda a distribuição do CloudFront, apontando para um bucket específico de Interface de Conexão. A linha destacada é a referência para a Interface de Conexão:
resource "aws_cloudfront_distribution" "s3_distribution" {
origin {
domain_name = "{{connections['bucket-s3-cloudfront-conn'].bucket_name}}.s3.amazonaws.com"
origin_id = local.s3_origin_id
}

Este valor deve ser o mesmo que o valor do alias no seu arquivo plugin.yaml do CloudFront. Confira:

spec:
inputs:
- label: Connection interface for your bucket-s3-cloudfront-conn
name: bucket-s3-cloudfront-conn
type: required-connection
connection-interface-type: aws-s3-conn

É importante verificar isso.

  1. Vá para o seu arquivo plugin.yaml do CloudFront. Exclua todo o conteúdo de inputs, conforme destacado:
schema-version: v4
kind: plugin
metadata:
name: cloudfront-plugin
display-name: cloudfront-plugin
description: Create and configure a CloudFront distribution
version: 0.0.1
picture: plugin.png
spec:
type: infra
compatibility:
- python
docs:
pt-br: docs/pt-br/docs.md
en-us: docs/en-us/docs.md
single-use: False
runtime:
environment:
- terraform-1-4
- aws-cli-2
- git-2
technologies: # Ref: https://docs.stackspot.com/create-use/create-content/yaml-files/plugin-yaml/#technologies-1
- Api
inputs:
- label: Connection interface for your bucket-s3-cloudfront-conn
name: bucket-s3-cloudfront-conn
type: required-connection
connection-interface-type: aws-s3-conn
stk-projects-only: false
inputs:
- label: Type name of your resource
name: resource
type: text
required: true
default: Client
pattern: '([A-Z][a-z]+)+'
help: 'Inform your resource name (e.g.: Client)'
- label: Choose http method of new endpoint
name: method
type: select
items:
- GET
- POST
- PUT
- DELETE
- PATCH
default: GET
required: true
help: 'Inform the method of the endpoint (e.g.: post or delete)'

Após isso, o seu arquivo plugin.yaml deve ficar assim:

schema-version: v4
kind: plugin
metadata:
name: cloudfront-plugin
display-name: cloudfront-plugin
description: Create and configure a CloudFront distribution
version: 0.0.1
picture: plugin.png
spec:
type: infra
compatibility:
- python
docs:
pt-br: docs/pt-br/docs.md
en-us: docs/en-us/docs.md
single-use: False
runtime:
environment:
- terraform-1-4
- aws-cli-2
- git-2
technologies: # Ref: https://docs.stackspot.com/create-use/create-content/yaml-files/plugin-yaml/#technologies-1
- Api
inputs:
- label: Connection interface for your bucket-s3-cloudfront-conn
name: bucket-s3-cloudfront-conn
type: required-connection
connection-interface-type: aws-s3-conn
stk-projects-only: false

Pronto, você editou seu Plugin de Infraestrutura do CloudFront.

Passo 8. Publicar o Plugin de Infraestrutura do CloudFront

atenção

Pré-requisitos

  1. Acesse o diretório raiz do Plugin do CloudFront e execute:
stk publish plugin --studio studio-slug-name

Na StackSpot, Slugs são identificadores únicos para Contas, Studios, Stacks e Plugins, e fazem parte das URLs da StackSpot.

Feito! Você publicou o Plugin. Encontre-o no seu Studio.

2. Criar uma Stack e adicionar os Plugins de Infra

Crie uma Stack e adicione os Plugins do bucket S3 e do CloudFront.

Siga os passos:

  1. Acesse o seu Studio no Portal da StackSpot.
  2. No seu Studio, clique em Stacks no menu principal.
  3. Clique no botão Criar Stacks.
  4. Informe:
    • Nome da Stack: S3 CloudFront Stack.
    • Adicione uma descrição.
  5. Clique em Criar.

Agora, adicione os Plugins:

  1. Clique na Stack que você criou.
  2. No menu principal, clique em Plugins e depois em Infra.
  3. Clique no botão Adicionar Infra Plugin.
  4. Escolha os Plugins de bucket S3 e CloudFront e clique em Adicionar Plugins.

Quais são os próximos passos?

  • Agora, confira como criar e fazer o deploy de uma Aplicação utilizando os Plugins de Infra deste exemplo e os Plugins de App do exemplo de Plugin de App.