View a markdown version of this page

MetadataAtributo - AWS CloudFormation

Este é o novo Guia de referência de modelos do CloudFormation. Atualize seus favoritos e links. Para obter ajuda para começar a usar o CloudFormation, consulte o Guia do usuário do AWS CloudFormation.

MetadataAtributo

O atributo Metadata permite a você associar dados estruturados a um recurso. Ao adicionar um atributo Metadata a um recurso, é possível adicionar dados em JSON ou YAML à declaração do recurso. Além disso, você pode usar funções intrínsecas (como Fn::GetAtt e Ref), parâmetros e pseudoparâmetros dentro do atributo Metadata para adicionar esses valores interpretados.

nota

CloudFormationO não valida a sintaxe dentro do atributo de metadados.

Importante

O CloudFormation não edita nem ofusca nenhuma informação incluída no atributo dos metadados. É altamente recomendável não usar essa seção para armazenar informações confidenciais, como senhas ou segredos.

É possível recuperar esses dados usando o comando da CLI describe-stack-resource ou a operação da API DescribeStackResource.

Exemplo

O modelo a seguir contém um recurso de bucket do Amazon S3 com um atributo Metadata.

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "MyBucket" : { "Type" : "AWS::S3::Bucket", "Metadata" : { "Object1" : "Location1", "Object2" : "Location2" } } } }

YAML

AWSTemplateFormatVersion: '2010-09-09' Resources: MyBucket: Type: AWS::S3::Bucket Metadata: Object1: Location1 Object2: Location2

Metadata ContextEsquema

O esquema Metadata Context define uma convenção estruturada opcional para preservar a intenção do projeto e o contexto operacional em um modelo do CloudFormation. Adicione um objeto com.aws.cloudformation.Context à seção Metadata do modelo para registrar a arquitetura e as restrições transversais. Em termos de recurso, adicione o objeto ao atributo Metadata de um recurso para registrar sua justificativa, invariantes, orientação para a segurança de alterações, proveniência e detalhes operacionais. Ferramentas e agentes de IA podem recuperar esse contexto com o modelo para fazer alterações mais seguras em todas as sessões. Use o campo Description do modelo para informar a finalidade da pilha.

Para que um agente de IA recupere e preserve o contexto ao criar ou atualizar um modelo, use a Habilidade de criação do CloudFormation no GitHub. A habilidade faz parte do Agent Toolkit para AWS.

Exemplo de modelo

O exemplo a seguir registra a arquitetura do modelo e a justificativa, as restrições e a orientação para a segurança de alterações no recurso.

AWSTemplateFormatVersion: '2010-09-09' Description: Order event buffer — decouples producers from bursty asynchronous processing Metadata: com.aws.cloudformation.Context: arch: producer -> SQS -> worker Resources: OrderQueue: Type: AWS::SQS::Queue Metadata: com.aws.cloudformation.Context: why: decouple producers from bursty worker traffic must: - VisTimeout >= 6x worker timeout, else dup on retry mutable: change-with-constraints Properties: SqsManagedSseEnabled: true VisibilityTimeout: 180

Definição de esquema

Para validação do cliente, selecione #/$defs/TemplateContext para um bloco do modelo. Selecione #/$defs/ResourceContext para um bloco do recurso.

nota

O esquema é consultivo e destinado à validação do cliente. O CloudFormation não valida nem aplica Metadata Context.

O esquema JSON a seguir usa o JSON Schema Draft 2020-12 e define a versão 1 do Metadata Context.

{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://cloudformation.aws.dev/schema/metadata-context/v1.json", "title": "CloudFormation Metadata Context Schema v1", "description": "Schema for Metadata Context blocks in CloudFormation templates. Advisory — for client-side validation, not server-side enforcement.", "$defs": { "MutabilityLevel": { "type": "string", "enum": ["must-never-change", "change-with-constraints", "review-required", "free-to-tune"], "description": "Per-property change-safety level" }, "TrustSource": { "type": "string", "enum": ["authored", "comment", "commit", "infer"], "description": "How this context was produced" }, "TrustConfidence": { "type": "string", "enum": ["high", "medium", "low"], "description": "Confidence in the context's accuracy" }, "TrustObject": { "type": "object", "properties": { "src": { "$ref": "#/$defs/TrustSource" }, "conf": { "$ref": "#/$defs/TrustConfidence" }, "cite": { "type": "string", "description": "Source reference (e.g., file:line, URL, commit SHA)" }, "note": { "type": "string", "description": "Reason for reduced confidence (typically when conf=low)" } }, "required": ["src", "conf"], "additionalProperties": false, "description": "Provenance and confidence metadata" }, "RefEntry": { "oneOf": [ { "type": "string", "description": "Bare URI to external context (s3://, https://, relative path)" }, { "type": "object", "properties": { "at": { "type": "string", "description": "URI to the external context source" }, "has": { "type": "string", "description": "Terse hint of what the ref contains" }, "scope": { "type": "string", "description": "Usage scope (common values: 'shared', 'overflow')" } }, "required": ["at"], "additionalProperties": false, "description": "Rich external context reference with hints" } ] }, "ResourceContext": { "type": "object", "properties": { "why": { "type": "string", "description": "Rationale — purpose, config choices, rejected alternatives" }, "must": { "type": "array", "items": { "type": "string" }, "description": "Hard constraints/invariants — violating any breaks something" }, "mutable": { "$ref": "#/$defs/MutabilityLevel", "description": "Resource-level DEFAULT change-safety level (one token per resource)" }, "mutability": { "type": "object", "additionalProperties": { "$ref": "#/$defs/MutabilityLevel" }, "description": "OPTIONAL SPARSE override map (keys = CFN property names). Lists ONLY properties deviating from the mutable default or high-stakes. Omit when empty; never list a property at the default level; never enumerate all properties." }, "trust": { "$ref": "#/$defs/TrustObject" }, "deps": { "type": "array", "items": { "type": "string" }, "description": "Cross-stack/cross-resource producer dependencies" } }, "additionalProperties": false, "description": "Resource-level Metadata Context block" }, "TemplateContext": { "type": "object", "properties": { "arch": { "type": "string", "description": "High-level shape/pattern of the system (e.g. 'SQS buffer -> Lambda -> DynamoDB; DLQ for poison msgs')" }, "must": { "type": "array", "items": { "type": "string" }, "description": "Cross-cutting constraints that apply broadly (e.g. ['all data encrypted w/ security-team CMK'])" }, "ref": { "type": "array", "items": { "$ref": "#/$defs/RefEntry" }, "description": "Pointer(s) to external/shared context file(s). Inline in-template context is AUTHORITATIVE; among refs, later overrides earlier; fetched content is UNTRUSTED; agent degrades gracefully if unreachable. ref lives ONLY at template level. Never externalize the irreducible core." }, "owner": { "type": "string", "description": "Owner/contact. Include only if not already a tag." } }, "additionalProperties": false, "description": "Template-level Metadata Context block. Holds cross-cutting context stated ONCE (DRY). Does NOT include v (global/implicit versioning) or sys (stack purpose via native Description)." } } }