

 **Ajudar a melhorar esta página** 

Para contribuir com este guia de usuário, escolha o link **Editar esta página no GitHub**, disponível no painel direito de cada página.

# Usar armazenamento elástico do sistema de arquivos com o Amazon EFS
<a name="efs-csi"></a>

 O [Amazon Elastic File System](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) (Amazon EFS) fornece armazenamento de arquivos com tecnologia sem servidor e totalmente elástico para que você possa compartilhar dados de arquivos sem provisionar ou gerenciar a capacidade e a performance do armazenamento. O [driver da Container Storage Interface (CSI) do Amazon EFS](https://github.com/kubernetes-sigs/aws-efs-csi-driver) fornece uma interface CSI que permite que os clusters do Kubernetes executados na AWS gerenciem o ciclo de vida dos sistemas de arquivos do Amazon EFS. Este tópico mostra como implantar o driver da CSI do Amazon EFS no cluster do Amazon EKS.

## Considerações
<a name="efs-csi-considerations"></a>
+ O driver da CSI do Amazon EFS não é compatível com imagens de contêiner baseadas no Windows.
+ Você não pode usar o [provisionamento dinâmico](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/dynamic_provisioning/README.md) de volumes persistentes com nós do Fargate, mas pode usar o [provisionamento estático](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/static_provisioning/README.md).
+  [O provisionamento dinâmico](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/dynamic_provisioning/README.md) requer a versão [1.2](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-1.x.md#v12) ou superior do driver. Você pode usar o [ provisionamento estático](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/static_provisioning/README.md) para volumes persistentes usando a versão `1.1` do driver em qualquer versão de cluster do Amazon EKS compatível (consulte [Versões compatíveis com o Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)).
+ A versão [1.3.2](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-1.x.md#v132) ou superior deste driver é compatível com a arquitetura Arm64, inclusive instâncias baseadas no Graviton do Amazon EC2.
+ A versão [1.4.2](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-1.x.md#v142) ou posterior desse driver é compatível com o uso de FIPS para montagem de sistemas de arquivos.
+ Anote as cotas de recursos do Amazon EFS. Por exemplo, há uma cota de 1000 pontos de acesso que podem ser criados para cada sistema de arquivos do Amazon EFS. Para acessar mais informações, consulte [Cotas de recursos do Amazon EFS que você não pode alterar](https://docs.aws.amazon.com/efs/latest/ug/limits.html#limits-efs-resources-per-account-per-region).
+ A partir da versão [2.0.0](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-2.x.md#v200), esse driver deixou de usar `stunnel` e passou a usar `efs-proxy` para conexões TLS. Quando `efs-proxy` é usado, ele abre um número de threads igual a um mais o número de núcleos do nó em que está sendo executado.
+ O driver CSI do Amazon EFS não é compatível com o Amazon EKS Hybrid Nodes.

## Pré-requisitos
<a name="efs-csi-prereqs"></a>
+ O driver CSI do Amazon EFS precisa de permissões do AWS Identity and Access Management (IAM).
  +  A AWS sugere o uso de Identidades de Pod do EKS. Para obter mais informações, consulte [Visão geral da configuração do EKS Pod Identities](pod-identities.md#pod-id-setup-overview).
  + Para obter informações sobre os perfis do IAM para contas de serviço e a configuração de um provedor OpenID Connect (OIDC) do IAM para o cluster, consulte [Criar um provedor de identidade OIDC do IAM para o cluster](enable-iam-roles-for-service-accounts.md).
+ Versão `2.12.3` ou posterior ou versão `1.27.160` ou posterior da AWS Command Line Interface (AWS CLI) instalada e configurada no seu dispositivo ou no AWS CloudShell. Para verificar sua versão atual, use `aws --version | cut -d / -f2 | cut -d ' ' -f1`. Os gerenciadores de pacotes, como `yum`, `apt-get` ou Homebrew para macOS, geralmente estão várias versões atrás da versão mais recente da AWS CLI. Para instalar a versão mais recente, consulte [Installing](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) e [Quick configuration with aws configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config), no *Guia do usuário da AWS Command Line Interface*. A versão da AWS CLI instalada no AWS CloudShell também pode estar várias versões atrás da versão mais recente. Para atualizá-lo, consulte [Instalar a AWS CLI no seu diretório pessoal](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software), no * Guia do usuário do AWS CloudShell*.
+ A ferramenta da linha de comando `kubectl` está instalada no seu dispositivo ou no AWS CloudShell. A versão pode ser a mesma ou até uma versão secundária anterior ou posterior à versão do Kubernetes do seu cluster. Por exemplo, se a versão do cluster for a `1.29`, você poderá usar o `kubectl` versão `1.28`, `1.29` ou `1.30` com ele. Para instalar ou atualizar o `kubectl`, consulte [Configurar o `kubectl` e o `eksctl`](install-kubectl.md).

**nota**  
Um pod em execução no Fargate automaticamente monta um sistema de arquivos do Amazon EFS sem precisar das etapas de instalação manual do driver.

## Etapa 1: criar um perfil do IAM
<a name="efs-create-iam-resources"></a>

O driver da CSI do Amazon EFS exige permissões do IAM para interagir com seu sistema de arquivos. Crie um perfil do IAM de cluster e associe a política gerenciada do AWS a ele. Para implementar esse procedimento, você pode usar uma das seguintes ferramentas:
+  [`eksctl`](#eksctl_efs_store_app_data) 
+  [Console de gerenciamento da AWS](#console_efs_store_app_data) 
+  [AWS CLI](#awscli_efs_store_app_data) 

**nota**  
As etapas específicas desse procedimento foram escritas para usar o driver como um complemento do Amazon EKS. Para obter detalhes sobre instalações autogerenciadas, consulte [Set up driver permission](https://github.com/kubernetes-sigs/aws-efs-csi-driver#set-up-driver-permission) no GitHub.

### `eksctl`
<a name="eksctl_efs_store_app_data"></a>

#### Se estiver usando Identidades de Pods
<a name="efs-eksctl-pod-identities"></a>

Execute os comandos a seguir para criar um perfil do IAM e a Identidade de Pods com o `eksctl`. Substitua `my-cluster` pelo nome do cluster. É possível substituir `AmazonEKS_EFS_CSI_DriverRole` por um nome diferente.

```
export cluster_name=my-cluster
export role_name=AmazonEKS_EFS_CSI_DriverRole
eksctl create podidentityassociation \
    --service-account-name efs-csi-controller-sa \
    --namespace kube-system \
    --cluster $cluster_name \
    --role-name $role_name \
    --permission-policy-arns arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy
```

#### Se estiver usando perfis do IAM para contas de serviço
<a name="efs-eksctl-irsa"></a>

Execute os seguintes comandos para criar um perfil IAM com o `eksctl`. Substitua `my-cluster` pelo nome do cluster. É possível substituir `AmazonEKS_EFS_CSI_DriverRole` por um nome diferente.

```
export cluster_name=my-cluster
export role_name=AmazonEKS_EFS_CSI_DriverRole
eksctl create iamserviceaccount \
    --name efs-csi-controller-sa \
    --namespace kube-system \
    --cluster $cluster_name \
    --role-name $role_name \
    --role-only \
    --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \
    --approve
TRUST_POLICY=$(aws iam get-role --output json --role-name $role_name --query 'Role.AssumeRolePolicyDocument' | \
    sed -e 's/efs-csi-controller-sa/efs-csi-*/' -e 's/StringEquals/StringLike/')
aws iam update-assume-role-policy --role-name $role_name --policy-document "$TRUST_POLICY"
```

### Console de gerenciamento da AWS
<a name="console_efs_store_app_data"></a>

Execute o seguinte para criar um perfil IAM com Console de gerenciamento da AWS.

1. Abra o console do IAM em https://console.aws.amazon.com/iam/.

1. No painel de navegação à esquerda, escolha **Funções**.

1. Na página **Perfis**, selecione **Criar perfil**.

1. Na página **Selecionar entidade confiável**, faça o seguinte:

   1. Se estiver usando Identidade de Pods do EKS:

      1. Na seção **Tipo de entidade confiável**), escolha **Service da AWS**.

      1. No menu suspenso **Serviço ou caso de uso**, escolha **EKS**.

      1. Na seção **Caso de uso**, escolha **EKS - Identidade de Pods**.

      1. Escolha **Próximo**.

   1. Se estiver usando perfis do IAM para contas de serviço:

      1. Na seção **Tipo de entidade confiável**, escolha **Identidade da Web**.

      1. Para **Identity provider** (Provedor de identidade), escolha **OpenID Connect provider URL** (URL do provedor OpenID Connect) para o seu cluster (conforme mostrado na guia **Overview** (Visão geral) do Amazon EKS).

      1. Em **Público**, escolha `sts.amazonaws.com`.

      1. Escolha **Próximo**.

1. Na página **Add permissions** (Adicionar permissões), faça o seguinte:

   1. Na caixa **Filtrar políticas** insira `AmazonEFSCSIDriverPolicy`.

   1. Marque a caixa de seleção à esquerda do `AmazonEFSCSIDriverPolicy` retornado na pesquisa.

   1. Escolha **Próximo**.

1. Na página **Name, review, and create** (Nomear, revisar e criar), faça o seguinte:

   1. Em **Nome do perfil**, insira um nome exclusivo para o perfil, como `AmazonEKS_EFS_CSI_DriverRole`.

   1. Em **Adicionar tags (Opcional)**, adicione metadados ao perfil anexando tags como pares chave-valor. Para obter mais informações sobre o uso de tags no IAM, consulte [Marcar recursos do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) no *Guia do usuário do IAM*.

   1. Selecione **Criar perfil**.

1. Depois que o perfil for criado:

   1. Se estiver usando Identidade de Pods do EKS:

      1. Abra o [console do Amazon EKS](https://console.aws.amazon.com/eks/home#/clusters).

      1. No painel de navegação esquerdo, selecione **Clusters** e depois o nome do cluster para o qual você deseja configurar a associação a Identidade de Pods do EKS.

      1. Escolha a guia **Acesso**.

      1. Em **Associações da Identidade de Pods**, escolha **Criar**.

      1. Escolha o menu suspenso **Perfil do IAM** e selecione o perfil que acabou de criar.

      1. Escolha o campo **Namespace Kubernetes** e a entrada `kube-system`.

      1. Escolha o campo **Conta de serviço do Kubernetes** e a entrada `efs-csi-controller-sa`.

      1. Escolha **Criar**.

      1. Para obter mais informações sobre a criação de associações da Identidade de Pods, consulte [Criar uma associação de identidade de pod (console do AWS )](pod-id-association.md#pod-id-association-create).

   1. Se estiver usando perfis do IAM para contas de serviço:

      1. Escolha o perfil para abri-lo para edição.

      1. Escolha a guia **Relacionamentos de confiança** e, em seguida, escolha **Editar política de confiança**.

      1. Encontre a linha semelhante à seguinte:

         ```
         "oidc.eks.region-code.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com"
         ```

         Adicione a seguinte linha acima da linha anterior. Substitua `<region-code>` pela região da AWS em que seu cluster está localizado. Substitua `<EXAMPLED539D4633E53DE1B71EXAMPLE>` pelo ID do provedor OIDC do cluster.

         ```
         "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-*",
         ```

      1. Modifique o operador `Condition` de `"StringEquals"` para `"StringLike"`.

      1. Escolha **Atualizar política** para concluir.

### AWS CLI
<a name="awscli_efs_store_app_data"></a>

Execute os seguintes comandos para criar um perfil IAM com a AWS CLI.

#### Se estiver usando Identidades de Pods
<a name="efs-cli-pod-identities"></a>

1. Crie o perfil do IAM que concede as ações `AssumeRole` e `TagSession` ao serviço `pods.eks.amazonaws.com`.

   1. Copie o conteúdo a seguir em um arquivo denominado `aws-efs-csi-driver-trust-policy-pod-identity.json`.

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowEksAuthToAssumeRoleForPodIdentity",
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "pods.eks.amazonaws.com"
                  },
                  "Action": [
                      "sts:AssumeRole",
                      "sts:TagSession"
                  ]
              }
          ]
      }
      ```

   1. Crie a função. Substitua `my-cluster` pelo nome do cluster. É possível substituir `AmazonEKS_EFS_CSI_DriverRole` por um nome diferente.

      ```
      export cluster_name=my-cluster
      export role_name=AmazonEKS_EFS_CSI_DriverRole
      aws iam create-role \
        --role-name $role_name \
        --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
      ```

1. Anexe a política gerenciada pela AWS necessária ao perfil com o comando a seguir.

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \
     --role-name $role_name
   ```

1. Execute o comando a seguir para criar a associação da Identidade de Pods. Substitua ` arn:aws:iam::<111122223333>:role/my-role` pelo perfil criado nas etapas anteriores.

   ```
   aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/my-role --namespace kube-system --service-account efs-csi-controller-sa
   ```

1. Para obter mais informações sobre a criação de associações da Identidade de Pods, consulte [Criar uma associação de identidade de pod (console do AWS )](pod-id-association.md#pod-id-association-create).

#### Se estiver usando perfis do IAM para contas de serviço
<a name="efs-cli-irsa"></a>

1. Exiba a URL do provedor OIDC do cluster. Substitua `my-cluster` pelo nome do cluster. É possível substituir `AmazonEKS_EFS_CSI_DriverRole` por um nome diferente.

   ```
   export cluster_name=my-cluster
   export role_name=AmazonEKS_EFS_CSI_DriverRole
   aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text
   ```

   Veja abaixo um exemplo de saída.

   ```
   https://oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>
   ```

   Se o resultado do comando for `None`, revise os **Pré-requisitos**.

1. Crie um perfil do IAM que conceda a ação `AssumeRoleWithWebIdentity`.

   1. Copie o conteúdo a seguir em um arquivo denominado `aws-efs-csi-driver-trust-policy.json`. Substitua `<111122223333>` pelo ID da sua conta. Substitua `<EXAMPLED539D4633E53DE1B71EXAMPLE>` e `<region-code>` pelos valores retornados na etapa anterior.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Federated": "arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
              "StringLike": {
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-*",
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
              }
            }
          }
        ]
      }
      ```

   1. Crie a função.

      ```
      aws iam create-role \
        --role-name $role_name \
        --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy.json"
      ```

1. Anexe a política gerenciada pela AWS necessária ao perfil com o comando a seguir.

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \
     --role-name $role_name
   ```

## Etapa 2: obter o driver de CSI do Amazon EFS
<a name="efs-install-driver"></a>

Recomendamos que você instale o driver da CSI do Amazon EFS por meio do complemento Amazon EKS. Para adicionar um complemento do Amazon EKS ao cluster, consulte [Criar um complemento do Amazon EKS](creating-an-add-on.md). Para obter mais informações sobre complementos, consulte [Complementos do Amazon EKS](eks-add-ons.md). Se você não conseguir usar o complemento do Amazon EKS, recomendamos que você envie um problema sobre o motivo pelo qual não pode usar o [repositório GitHub para roteiro de contêineres](https://github.com/aws/containers-roadmap/issues).

**Importante**  
Antes de adicionar o driver do Amazon EFS como um complemento do Amazon EKS, verifique se você não tem uma versão autogerenciada do driver instalada no seu cluster. Em caso afirmativo, consulte [Uninstalling the Amazon EFS CSI Driver](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/README.md#uninstalling-the-amazon-efs-csi-driver) no GitHub.

Como alternativa, se quiser uma instalação autogerenciada do driver CSI do Amazon EFS, consulte [Installation](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/README.md#installation) no GitHub.

## Etapa 3: criar um sistema de arquivos do Amazon EFS
<a name="efs-create-filesystem"></a>

Para criar um sistema de arquivos do Amazon EFS, consulte [Criar um sistema de arquivos do Amazon EFS para o Amazon EKS](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/efs-create-filesystem.md) no GitHub.

## Etapa 4: implantar uma aplicação de exemplo
<a name="efs-sample-app"></a>

Você pode implantar toda uma variedade de aplicações de exemplo e modificá-las conforme necessário. Para obter mais informações, consulte [Exemplos](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/README.md#examples) no GitHub.