

 **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 Container Storage Interface (CSI) do Amazon EFS](https://github.com/kubernetes-sigs/aws-efs-csi-driver) permite que os clusters do Kubernetes executados na AWS montem os sistemas de arquivos do Amazon EFS como volumes persistentes. 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/efs/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/efs/static_provisioning/README.md).
+  [O provisionamento dinâmico](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/efs/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/efs/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. Para obter mais informações, consulte as [Cotas do Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/limits.html).
+ 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`, será possível 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 e anexe a política gerenciada ` arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy` a ele.

**nota**  
Se quiser usar o armazenamento do sistema de arquivos do Amazon EFS e do Amazon S3, você deve anexar as políticas gerenciadas `AmazonEFSCSIDriverPolicy` e `AmazonS3FilesCSIDriverPolicy` gerenciadas ao seu perfil do IAM. Para obter mais informações sobre o armazenamento do sistema de arquivos do Amazon S3, consulte [Use o armazenamento do sistema de arquivos do Amazon S3 com o driver CSI do Amazon EFS](s3files-csi.md).

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/blob/master/docs/install.md#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 `<111122223333>` pelo ID da sua conta.

   ```
   aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$role_name --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/install.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/install.md) 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/tree/master/examples/kubernetes) no GitHub.