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:
- Plugin de Infra S3 Bucket.
- 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
- Criar uma conta na StackSpot.
- Ter permissão para criar conteúdo.
- Instalar o STK CLI.
- Fazer o login no STK CLI. Execute o comando:
stk login
Neste guia, você usará conteúdos prontos de dois repositórios públicos da StackSpot para editar seu Plugin:
- S3 Bucket Plugin: este Plugin de Infra cria e configura um bucket S3.
- CloudFront Plugin: este Plugin de Infra cria e configura o CloudFront.
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
"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.
- Clone o repositório.
- Abra os arquivos do repositório na sua IDE.
- Abra a pasta
templates-deploye copie os arquivos.
Você pode apagar o arquivo README.
Esses são arquivos Terraform, e o seu Plugin Bucket S3 será público.
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.
- 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)'
- 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:
- Crie um novo diretório. Execute o comando:
mkdir test-project
- 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.
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
Pré-requisitos
- Escolha o mesmo Studio que você usou para publicar seus Plugins no exemplo para criar Plugins de App.
- 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
"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.
- Clone o repositório.
- Abra os arquivos na sua IDE.
- Abra a pasta
templates-deploye copie os arquivos. - 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.tfconfigurará 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.
- Vá para o seu arquivo
plugin.yamldo CloudFront. Exclua todo o conteúdo deinputs, 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
Pré-requisitos
- Escolha o mesmo Studio que você usou para publicar os Plugins do exemplo de Plugin de App e o Plugin do Bucket S3.
- 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:
- Acesse o seu Studio no Portal da StackSpot.
- No seu Studio, clique em Stacks no menu principal.
- Clique no botão Criar Stacks.
- Informe:
- Nome da Stack: S3 CloudFront Stack.
- Adicione uma descrição.
- Clique em Criar.
Agora, adicione os Plugins:
- Clique na Stack que você criou.
- No menu principal, clique em Plugins e depois em Infra.
- Clique no botão Adicionar Infra Plugin.
- 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.