

# Provedores de capacidade
<a name="lambda-managed-instances-capacity-providers"></a>

Um provedor de capacidade é a base para a execução de instâncias gerenciadas do Lambda. Ele atua como limite de segurança para suas funções e define os recursos computacionais que o Lambda provisionará e gerenciará em seu nome.

Ao criar um provedor de capacidade, você especifica:
+ **Configuração de VPC**: as sub-redes e os grupos de segurança em que as instâncias serão executadas
+ **Permissões**: as funções do IAM para o Lambda gerenciar recursos do EC2
+ **Requisitos da instância** (opcional): preferências de arquitetura e de [tipo de instância](https://aws.amazon.com/lambda/pricing/#:~:text=EPU%20pricing%20applies.-,Management%20Fees,-Pricing%20Example%3A%20High)
+ **Configuração de escalabilidade** (opcional): como o Lambda escala suas instâncias

## Noções básicas dos provedores de capacidade como limite de segurança
<a name="lambda-managed-instances-capacity-provider-security-boundary"></a>

Os provedores de capacidade servem como limite de segurança para as funções do Lambda em sua VPC, substituindo o isolamento baseado em Firecracker. As funções são executadas em contêineres dentro de instâncias, mas os contêineres não fornecem um forte isolamento de segurança entre as funções, ao contrário das microVMs do Firecracker.

**Principais conceitos de segurança:**
+ **Provedor de capacidade:** o limite de segurança que define os níveis de confiança para as funções do Lambda
+ **Isolamento de contêineres:** os contêineres NÃO são um provedor de segurança. Não confie neles para garantir a segurança entre workloads não confiáveis
+ **Separação de confiança:**: separe as workloads que não sejam mutuamente confiáveis usando diferentes provedores de capacidade.

## Criação de um provedor de capacidade
<a name="lambda-managed-instances-creating-capacity-provider"></a>

É possível criar um provedor de capacidade usando a AWS CLI, o Console de Gerenciamento da AWS ou as SDKs da AWS.

**Uso da AWS CLI**

```
aws lambda create-capacity-provider \
  --capacity-provider-name my-capacity-provider \
  --vpc-config SubnetIds=subnet-12345,subnet-67890,subnet-11111,SecurityGroupIds=sg-12345 \
  --permissions-config CapacityProviderOperatorRoleArn=arn:aws:iam::123456789012:role/MyOperatorRole \
  --instance-requirements Architectures=x86_64 \
  --capacity-provider-scaling-config ScalingMode=Auto
```

### Parâmetros necessários
<a name="lambda-managed-instances-capacity-provider-required-params"></a>

**CapacityProviderName**
+ Um nome exclusivo para o seu provedor de capacidade
+ Ele deve ser exclusivo na sua conta da AWS

**VpcConfig**
+ **SubnetIds** (obrigatório): ao menos uma sub-rede, máximo de 16. Use sub-redes em várias zonas de disponibilidade para obter resiliência
+ **SecurityGroupIds** (opcional): grupos de segurança para suas instâncias. O padrão é o grupo de segurança padrão da VPC, se não for especificado

**PermissionsConfig**
+ **CapacityProviderOperatorRoleArn** (obrigatório): perfil do IAM que permite ao Lambda gerenciar recursos do EC2 em seu provedor de capacidade

### Parâmetros opcionais
<a name="lambda-managed-instances-capacity-provider-optional-params"></a>

**InstanceRequirements**

Especifique a arquitetura e os [tipos de instância](https://aws.amazon.com/lambda/pricing/#:~:text=EPU%20pricing%20applies.-,Management%20Fees,-Pricing%20Example%3A%20High) para seu provedor de capacidade:
+ **Arquiteturas**: escolha `x86_64` ou `arm64`. O padrão é `x86_64`
+ **AllowedInstanceTypes**: especifique os tipos de instância permitidos. Exemplo: `m5.8xlarge`
+ **ExcludedInstanceTypes**: especifique os tipos de instância excluídos usando curingas. É possível especificar apenas um dentre AllowedInstanceTypes ou ExcludedInstanceTypes.

Por padrão, o Lambda escolhe os tipos de instância ideais para sua workload. Recomendamos que as instâncias gerenciadas do Lambda escolham os tipos de instância para você, pois restringir o número de tipos de instância possíveis pode resultar em menor disponibilidade.

**CapacityProviderScalingConfig**

Configure como o Lambda escala suas instâncias:
+ **ScalingMode**: defina como `Auto` para escalabilidade automática ou `Manual` para controle manual. O padrão é `Auto`
+ **MaxVCpuCount**: número máximo de vCPUs para o provedor de capacidade. O padrão é de 400.
+ **ScalingPolicies**: defina políticas de escalabilidade de rastreamento de destinos para utilização de CPU e memória

**KmsKeyArn**

Especifique uma chave do AWS KMS para a criptografia do EBS. O padrão é de chave gerenciada pela AWS, caso não especificado.

**Tags**

Adicione tags para organizar e gerenciar os provedores de capacidade.

## Gerenciamento dos provedores de capacidade
<a name="lambda-managed-instances-managing-capacity-providers"></a>

### Atualização de um provedor de capacidade
<a name="lambda-managed-instances-updating-capacity-provider"></a>

É possível atualizar determinadas propriedades de um provedor de capacidade usando a API `UpdateCapacityProvider`.

```
aws lambda update-capacity-provider \
  --capacity-provider-name my-capacity-provider \
  --capacity-provider-scaling-config ScalingMode=Auto
```

### Exclusão de um provedor de capacidade
<a name="lambda-managed-instances-deleting-capacity-provider"></a>

É possível excluir um provedor de capacidade quando ele não for mais necessário usando a API `DeleteCapacityProvider`.

```
aws lambda delete-capacity-provider \
  --capacity-provider-name my-capacity-provider
```

**Observação:** não é possível excluir um provedor de capacidade que tenha versões de função anexadas a ele.

### Visualização de detalhes do provedor de capacidade
<a name="lambda-managed-instances-viewing-capacity-provider"></a>

Recupere informações sobre um provedor de capacidade usando a API `GetCapacityProvider`.

```
aws lambda get-capacity-provider \
  --capacity-provider-name my-capacity-provider
```

## Estados do provedor de capacidade
<a name="lambda-managed-instances-capacity-provider-states"></a>

Um provedor de capacidade pode estar em um dos estados a seguir:
+ **Pendente**: o provedor de capacidade está sendo criado
+ **Ativo**: o provedor de capacidade está pronto para uso
+ **Com falha**: a criação do provedor de capacidade falhou
+ **Em exclusão**: o provedor de capacidade está sendo excluído

## Cotas
<a name="lambda-managed-instances-capacity-provider-quotas"></a>
+ **Máximo de provedores de capacidade por conta**: 1.000
+ **Versões máximas de funções por provedor de capacidade**: 100 (não pode ser aumentado)

## Práticas recomendadas
<a name="lambda-managed-instances-capacity-provider-best-practices"></a>

1. **Separe por nível de confiança**: crie diferentes provedores de capacidade para workloads com diferentes requisitos de segurança

1. **Use nomes descritivos**: nomeie os provedores de capacidade para indicar claramente o uso pretendido e o nível de confiança (por exemplo, `production-trusted`, `dev-sandbox`).

1. **Use várias zonas de disponibilidade**: especifique as sub-redes em várias zonas de disponibilidade para obter alta disponibilidade

1. **Deixe o Lambda escolher os tipos de instância**: a menos que você tenha requisitos específicos de hardware, permita que o Lambda selecione os tipos de instância ideais para disponibilidade

1. **Monitore o uso**: use o AWS CloudTrail para monitorar as atribuições e os padrões de acesso do provedor de capacidade.

## Próximas etapas
<a name="lambda-managed-instances-capacity-provider-next-steps"></a>
+ Saiba mais sobre a [escalabilidade de instâncias gerenciadas do Lambda](lambda-managed-instances-scaling.md)
+ Entenda a [segurança e as permissões das instâncias gerenciadas do Lambda](lambda-managed-instances-security.md)
+ Configure a [conectividade de VPC para seus provedores de capacidade](lambda-managed-instances-networking.md)
+ Consulte os guias específicos de runtime para [Java](lambda-managed-instances-java-runtime.md), [Node.js](lambda-managed-instances-nodejs-runtime.md) e [Python](lambda-managed-instances-python-runtime.md)