Arquivo de esquema - AWS Proton

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Arquivo de esquema

Como administrador, quando você usa a seção Modelos de dados de API aberta (esquemas) para definir um arquivo YAML de esquema de parâmetros para seu pacote de modelos, AWS Proton pode validar as entradas de valores de parâmetros em relação aos requisitos definidos em seu esquema.

Para obter mais informações sobre formatos e palavras-chave disponíveis, consulte a seção Objeto de esquema da OpenAPI.

Requisitos de esquema para pacotes de modelos de ambiente

Seu esquema deve seguir a seção Modelos de dados (esquemas) da OpenAPI no formato YAML. Ele também deve fazer parte do seu pacote de modelos de ambiente.

Para o esquema do seu ambiente, você deve incluir os cabeçalhos formatados para estabelecer que está usando a seção Modelos de dados (esquemas) da API aberta. Nos exemplos de esquema de ambiente a seguir, esses cabeçalhos aparecem nas três primeiras linhas.

Um environment_input_type deve ser incluído e definido com um nome fornecido por você. Nos exemplos a seguir, isso é definido na linha 5. Ao definir esse parâmetro, você o associa a um recurso AWS Proton do ambiente.

Para seguir o modelo de esquema da Open API, você deve incluir types. No exemplo a seguir, isso está na linha 6.

Após types, você deve definir um tipo de environment_input_type. Você define os parâmetros de entrada para seu ambiente como propriedades doenvironment_input_type. Você deve incluir pelo menos uma propriedade com um nome que corresponda a pelo menos um parâmetro listado no arquivo do ambiente de infraestrutura como código (IaC) que está associado ao esquema.

Quando você cria um ambiente e fornece valores de parâmetros personalizados, AWS Proton usa o arquivo de esquema para corresponder, validar e injetá-los nos parâmetros entre colchetes no arquivo IaC associado. CloudFormation Para cada propriedade (parâmetro), forneça um name e type. Opcionalmente, forneça também um description, default, e. pattern

Os parâmetros definidos para o exemplo de esquema de modelo de ambiente padrão a seguir incluem vpc_cidr, subnet_one_cidr e subnet_two_cidr com a palavra-chave default e os valores padrão. Ao criar um ambiente com esse esquema de pacote de modelo de ambiente, você pode aceitar os valores padrão ou fornecer os seus próprios. Se um parâmetro não tiver um valor padrão e estiver listado como uma propriedade (parâmetro) required, você deverá fornecer valores para ele ao criar um ambiente.

O segundo exemplo de esquema de modelo de ambiente padrão lista o parâmetro required my_other_sample_input.

Você pode criar um esquema para dois tipos de modelos de ambiente. Para ter mais informações, consulte Registre e publique modelos.

  • Modelos de ambiente padrão

    No exemplo a seguir, um tipo de entrada de ambiente é definido com uma descrição e propriedades de entrada. Esse exemplo de esquema pode ser usado com o arquivo AWS Proton CloudFormation IaC mostrado no Exemplo 3.

    Exemplo de esquema para um modelo de ambiente padrão:

    schema: # required format: # required openapi: "3.0.0" # required # required defined by administrator environment_input_type: "PublicEnvironmentInput" types: # required # defined by administrator PublicEnvironmentInput: type: object description: "Input properties for my environment" properties: vpc_cidr: # parameter type: string description: "This CIDR range for your VPC" default: 10.0.0.0/16 pattern: ([0-9]{1,3}\.){3}[0-9]{1,3}($|/(16|24)) subnet_one_cidr: # parameter type: string description: "The CIDR range for subnet one" default: 10.0.0.0/24 pattern: ([0-9]{1,3}\.){3}[0-9]{1,3}($|/(16|24)) subnet_two_cidr: # parameter type: string description: "The CIDR range for subnet one" default: 10.0.1.0/24 pattern: ([0-9]{1,3}\.){3}[0-9]{1,3}($|/(16|24))

    Exemplo de esquema para um modelo de ambiente padrão que inclui um parâmetro de required:

    schema: # required format: # required openapi: "3.0.0" # required # required defined by administrator environment_input_type: "MyEnvironmentInputType" types: # required # defined by administrator MyEnvironmentInputType: type: object description: "Input properties for my environment" properties: my_sample_input: # parameter type: string description: "This is a sample input" default: "hello world" my_other_sample_input: # parameter type: string description: "Another sample input" another_optional_input: # parameter type: string description: "Another optional input" default: "!" required: - my_other_sample_input
  • Modelos de ambiente gerenciado pelo cliente

    No exemplo a seguir, o esquema inclui apenas uma lista de saídas que replicam as saídas do IaC que você usou para provisionar sua infraestrutura gerenciada pelo cliente. Você precisa definir os tipos de valores de saída somente como strings (não listas, matrizes ou outros tipos). Por exemplo, o próximo trecho de código mostra a seção de saídas de um modelo externo do AWS CloudFormation . Isso é do modelo mostrado no Exemplo 1. Ele pode ser usado para criar uma infraestrutura externa gerenciada pelo cliente para um serviço AWS Proton Fargate criado a partir do Exemplo 4.

    Importante

    Como administrador, você deve garantir que sua infraestrutura provisionada e gerenciada e todos os parâmetros de saída sejam compatíveis com os modelos de ambiente gerenciado pelo cliente associados. AWS Proton não pode contabilizar as alterações em seu nome porque essas alterações não estão visíveis para AWS Proton. As inconsistências resultam em falhas.

    Exemplo de CloudFormation saídas de arquivo IaC para um modelo de ambiente gerenciado pelo cliente:

    // Cloudformation Template Outputs [...] Outputs: ClusterName: Description: The name of the ECS cluster Value: !Ref 'ECSCluster' ECSTaskExecutionRole: Description: The ARN of the ECS role Value: !GetAtt 'ECSTaskExecutionRole.Arn' VpcId: Description: The ID of the VPC that this stack is deployed in Value: !Ref 'VPC' [...]

    O esquema do pacote de modelos de ambiente gerenciado pelo AWS Proton cliente correspondente é mostrado no exemplo a seguir. Cada valor de saída é definido como uma string.

    Exemplo de esquema para um modelo de ambiente gerenciado pelo cliente:

    schema: # required format: # required openapi: "3.0.0" # required # required defined by administrator environment_input_type: "EnvironmentOutput" types: # required # defined by administrator EnvironmentOutput: type: object description: "Outputs of the environment" properties: ClusterName: # parameter type: string description: "The name of the ECS cluster" ECSTaskExecutionRole: # parameter type: string description: "The ARN of the ECS role" VpcId: # parameter type: string description: "The ID of the VPC that this stack is deployed in" [...]

Requisitos de esquema para pacotes de modelos de serviço

Seu esquema deve seguir a seção Modelos de dados (esquemas) da OpenAPI no formato YAML como mostrado nos exemplos seguintes. Você deve fornecer um arquivo de esquema em seu pacote de modelos de serviço.

Nos exemplos de esquema de serviço a seguir, você deve incluir os cabeçalhos formatados. No exemplo a seguir, isso está nas três primeiras linhas. Isso serve para estabelecer que você está usando a seção Modelos de dados (esquemas) da API aberta.

Um service_input_type deve ser incluído e definido com um nome fornecido por você. No exemplo a seguir, isso está na linha 5. Isso associa os parâmetros a um recurso AWS Proton de serviço.

Um pipeline AWS Proton de serviço é incluído por padrão quando você usa o console ou a CLI para criar um serviço. Ao incluir um pipeline de serviços para seu serviço, você deve incluir a pipeline_input_type com um nome fornecido por você. No exemplo a seguir, isso está na linha 7. Não inclua esse parâmetro se você não estiver incluindo um pipeline AWS Proton de serviços. Para ter mais informações, consulte Registre e publique modelos.

Para seguir o modelo de esquema da API aberta, você deve incluir types. No exemplo a seguir, isso está na linha 9.

Após types, você deve definir um tipo de service_input_type. Você define os parâmetros de entrada para seu serviço como propriedades doservice_input_type. Você deve incluir pelo menos uma propriedade com um nome que corresponda a pelo menos um parâmetro listado no arquivo do serviço de infraestrutura como código (IaC) que está associado ao esquema.

Para definir um pipeline de serviços, abaixo da sua definição de service_input_type, você deve definir um pipeline_input_type. Como acima, você deve incluir pelo menos uma propriedade com um nome que corresponda a pelo menos um parâmetro listado em um arquivo de pipeline que está associado ao esquema. Não inclua essa definição se você não estiver incluindo um pipeline AWS Proton de serviços.

Quando você, como administrador ou desenvolvedor, cria um serviço e fornece valores de parâmetros personalizados, AWS Proton usa o arquivo de esquema para corresponder, validar e injetá-los nos parâmetros entre chaves curvas do arquivo CloudFormation IaC associado. Para cada propriedade (parâmetro), forneça um name e um type. Opcionalmente, forneça também um description, default e. pattern

Os parâmetros definidos para o exemplo de esquema incluem port, desired_count, task_size e image com os valores de palavra-chave e padrão default. Ao criar um serviço com esse esquema de pacote de modelo de serviço, você pode aceitar os valores padrão ou fornecer os seus próprios. O parâmetro unique_name também está incluído no exemplo e não tem um valor padrão. Ela é listada como uma propriedade (parâmetro) do required. Você, como administrador ou desenvolvedor, deve fornecer valores para os parâmetros do required ao criar serviços.

Se você quiser criar um modelo de serviço com um pipeline de serviço, inclua o pipeline_input_type em seu esquema.

Exemplo de arquivo de esquema de serviço para um serviço que inclui um pipeline AWS Proton de serviços.

Esse exemplo de esquema pode ser usado com os arquivos AWS Proton IaC mostrados no Exemplo 4 e no Exemplo 5. Um pipeline de serviços está incluído.

schema: # required format: # required openapi: "3.0.0" # required # required defined by administrator service_input_type: "LoadBalancedServiceInput" # only include if including AWS Proton service pipeline, defined by administrator pipeline_input_type: "PipelineInputs" types: # required # defined by administrator LoadBalancedServiceInput: type: object description: "Input properties for a loadbalanced Fargate service" properties: port: # parameter type: number description: "The port to route traffic to" default: 80 minimum: 0 maximum: 65535 desired_count: # parameter type: number description: "The default number of Fargate tasks you want running" default: 1 minimum: 1 task_size: # parameter type: string description: "The size of the task you want to run" enum: ["x-small", "small", "medium", "large", "x-large"] default: "x-small" image: # parameter type: string description: "The name/url of the container image" default: "public.ecr.aws/z9d2n7e1/nginx:1.19.5" minLength: 1 maxLength: 200 unique_name: # parameter type: string description: "The unique name of your service identifier. This will be used to name your log group, task definition and ECS service" minLength: 1 maxLength: 100 required: - unique_name # defined by administrator PipelineInputs: type: object description: "Pipeline input properties" properties: dockerfile: # parameter type: string description: "The location of the Dockerfile to build" default: "Dockerfile" minLength: 1 maxLength: 100 unit_test_command: # parameter type: string description: "The command to run to unit test the application code" default: "echo 'add your unit test command here'" minLength: 1 maxLength: 200

Se você quiser criar um modelo de serviço sem um pipeline de serviço, não inclua o pipeline_input_type em seu esquema, conforme demonstrado na página seguinte.

Exemplo de arquivo de esquema de serviço para um serviço que não inclui um pipeline AWS Proton de serviços

schema: # required format: # required openapi: "3.0.0" # required # required defined by administrator service_input_type: "MyServiceInstanceInputType" types: # required # defined by administrator MyServiceInstanceInputType: type: object description: "Service instance input properties" required: - my_sample_service_instance_required_input properties: my_sample_service_instance_optional_input: # parameter type: string description: "This is a sample input" default: "hello world" my_sample_service_instance_required_input: # parameter type: string description: "Another sample input"