Crie os seus pacotes
Package, Components e Revision
Para você que desenvolve aplicações poder acessar e usar os componentes de Cloud, é necessário disponibilizar um pacote com esses componentes. Em Runtimes, a criação desses pacotes é abstraída em:
Dessa forma, o motor de Runtimes agrupa, versiona e disponibiliza os componentes de Cloud. Confira abaixo os passos para criar um pacote de componentes Cloud com Runtimes.
Criar Package
O Package é a estrutura que vai agrupar os seus componentes. Para criar o Package, informe nos campos "name:"
o nome do pacote e no campo "description:"
a descrição do conteúdo do pacote e execute o comando abaixo no seu terminal:
curl --location --request PUT 'https://runtime-engine-api.runtimes.stackspot.com/packages' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "package-name",
"description": "package-description"
}'
A requisição irá retornar o ID do Package.
Criar Revision
Uma Revision representa uma versão dos componentes do seu pacote. Cada Revision gera uma nova versão dos componentes de um Package. Para gerar uma Revision siga os passos abaixo:
Empacotar os Components
Os Components (componentes de Cloud) precisam estar em uma estrutura de diretórios que representem o seu Package para que você possa gerar o pacote de componentes. Em Runtimes os Components devem estar dentro de uma pasta /definitions
e na raiz da pasta você deve criar o arquivo metadata.yaml
. Para gerar o pacote, siga os passos abaixo:
Passo 1. Criar a pasta do seu pacote
Crie uma pasta com o nome informado ao criar o Package, em seguida dentro dela, crie a pasta definitions
.
Passo 2. Criar o arquivo metadata.yaml
Na raiz do diretório, crie o arquivo metadata.yaml
como no exemplo abaixo:
name: "package-name"
version: 1.0.0
description: "package_description"
icon: https://stackspot.com/_next/static/media/logo.e8653093.svg
url: http://stackspot.com/
tags:
- stackspot
- package
deployTo:
control_plane: true
runtime_cluster: true
invisible: false
}
Passo 3. Adicionar os seus componentes na pasta definitions
Considere que você escreveu um componente de banco de dados DynamoDB "dynamodb.yaml
"
Clique aqui para ver os exemplos dos componentes
- Crossplane
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
name: sample-dynamodb
namespace: samples
annotations:
definition.oam.dev/description: "Sample AWS dynamoDB resource"
spec:
workload:
type: autodetects.core.oam.dev
schematic:
cue:
template: |
import("encoding/json")
output: {
apiVersion: "dynamodb.aws.crossplane.io/v1alpha1"
kind: "Table"
metadata: {
name: context.name
namespace: context.namespace
}
spec: {
forProvider: {
attributeDefinitions: [
for _, v in parameter.attributes {
attributeName: v.name
attributeType: v.type
}
]
keySchema: [
for _, v in parameter.primaryKey {
attributeName: v.name
keyType: v.type
}
]
globalSecondaryIndexes: [
for _, gs in parameter.globalSecondary {
indexName: gs.name
projection: {
projectionType: gs.projection
}
provisionedThroughput: {
readCapacityUnits: gs.rcu
writeCapacityUnits: gs.wcu
}
keySchema:[
for _, v in gsi.keySchema {
attributeName: v.name
keyType: v.type
}
]
}
]
provisionedThroughput: {
readCapacityUnits: 1
writeCapacityUnits: 1
}
billingMode: "PROVISIONED"
region: parameter.region
sseSpecification: enabled: true
}
providerConfigRef: name: "aws-provider"
}
}
outputs: {
"policy": {
apiVersion: "iam.aws.crossplane.io/v1beta1"
kind: "Policy"
metadata: name: context.name+"-policy"
spec: {
forProvider: {
name: context.name+"-policy"
document:
json.Marshal({
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Action: [
"dynamodb:UpdateTimeToLive",
"dynamodb:UpdateItem",
"dynamodb:Scan",
"dynamodb:PutItem",
"dynamodb:GetItem",
"dynamodb:DescribeTimeToLive",
"dynamodb:DescribeTable",
"dynamodb:DeleteItem",
"dynamodb:ConditionCheckItem",
"dynamodb:BatchWriteItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
],
Resource: [
"arn:aws:dynamodb:"+parameter.region+":*:table/"+context.name,
"arn:aws:dynamodb:"+parameter.region+":*:table/"+context.name+"/*"
]
}
]
})
}
providerConfigRef: name: "aws-provider"
}
}
"attach": {
apiVersion: "iam.aws.crossplane.io/v1beta1"
kind: "RolePolicyAttachment"
metadata: name: context.name+"-role-policy-attachment"
spec: {
forProvider: {
policyArnRef: name: context.name+"-policy"
roleNameRef: name: context.appName
}
providerConfigRef: name: "aws-provider"
}
}
}
parameter: {
// +usage=region where resource will be create us-east-1 is default value
region: *"us-east-1" | string
// +usage=attribute definitions using format {name: ... type: ...}
attributes: [...{name:string,type:string}]
// +usage=keys definitions using format {name: ... type: ...}
primaryKey: [...{name:string,type:string}]
globalSecondary: [...{name:string,projection:string,wcu:int,rcu:int,keySchema:[...{name:string,type:string}]}]
}
Coloque todos os componentes dentro da pasta /definitions
, e você terá a seguinte estrutura:
.
├── package-name
│ ├── definitions
│ └── dynamodb.yaml
| ├── metadata.yaml
Passo 4. Empacotar os arquivos para gerar a sua Revision
Agora é o momento de enviar o pacote para a StackSpot gerar a Revision, mas antes, os arquivos metadata.yaml
e todo o conteúdo da pasta /definitions
devem ser empacotados como um único arquivo para ser processado pelo Runtimes. Você deve compactar esses arquivos no formato .zip
ou .tar
.
Confira os exemplos a seguir para gerar um arquivo .tar
ou .zip
:
Dentro da pasta do pacote, execute o comando:
Zip:
zip package-name.zip definitions/*.yaml metadata.yaml
Tar:
tar cfv package-name.tar definitions/*.yaml metadata.yaml
Gerar a versão do seu pacote
Utilize o Package ID gerado anteriormente no lugar de "{pkgId}
" da requisição abaixo.
Preencha a requisição informando o Package ID na URL da requisição e no campo --form 'package=@"{/path}"'
o caminho do arquivo .tar
ou .zip
(Ex.: --form 'package=@"/root/User/package-name/package-name.tar"'
).
Após isso, execute a requisição no seu terminal:
curl --location --request PUT 'https://runtime-engine-api.runtimes.stackspot.com/packages/{pkgId}' \
--form 'package=@"/root/User/package-name/package-name.tar"'
Consultar Revision
Após publicar uma ou mais Revisions, você pode consultá-las com a API de Runtimes. Preencha na requisição os campos {packageId}/{revision}
(PackageID e Revision) desejada, em seguida, execute o comando abaixo:
curl --location --request GET 'https://runtime-engine.runtime-controlplane.sbox.stackspot.com/packages/{packageId}/{revision}'
Habilitar e desabilitar Revisions
Ao criar uma Revision, por padrão ela estará habilitada para uso.
Você desabilitar e habilitar Revisions para controlar melhor o ciclo de vida do seu componente e garantir que todos os usuários usarão a versão mais atualizada de algum componente.
Preencha na requisição a seguir os campos {packageId}/{revision}
(PackageID e Revision desejada), em seguida, preenchao campo --data-raw
e defina na opção "enable:"
os valores:
true
para Habilitar a Revision:
curl --location --request PATCH 'https://runtime-engine.runtime-controlplane.sbox.stackspot.com/packages/{packageId}/{revision}/' \
--header 'Content-Type: application/json' \
--data-raw '{
"enabled": true
}'
false
para Desabilitar a Revision
curl --location --request PATCH 'https://runtime-engine.runtime-controlplane.sbox.stackspot.com/packages/{revision}/{revision}/' \
--header 'Content-Type: application/json' \
--data-raw '{
"enabled": false
}'
Esta página foi útil?