Uso de un plan de Terraform para implementar una instancia de Amazon Web Services en Amazon Elastic Compute Cloud y conectarla a Azure ArcUse a Terraform plan to deploy an Amazon Web Services Amazon Elastic Compute Cloud instance and connect it to Azure Arc

Este artículo es una guía para usar el plan de Terraform proporcionado para implementar una instancia en Amazon Elastic Compute Cloud (EC2) de Amazon Web Services (AWS) y conectarla como recurso de servidor habilitado para Azure Arc.This article provides guidance for using the provided Terraform plan to deploy an Amazon Web Services (AWS) Amazon Elastic Compute Cloud (EC2) instance and connect it as an Azure Arc enabled server resource.

Requisitos previosPrerequisites

  1. Clone el repositorio Jumpstart de Azure Arc.Clone the Azure Arc Jumpstart repository.

    git clone https://github.com/microsoft/azure_arc.git
    
  2. Instale o actualice la CLI de Azure a la versión 2.7 y posterior.Install or update Azure CLI to version 2.7 and above. Use el siguiente comando para comprobar la versión que está instalada.Use the following command to check your current installed version.

    az --version
    
  3. Genere una clave SSH (o use una que ya tenga).Generate SSH key (or use existing SSH key)

  4. Cree una cuenta gratuita de AWS.Create free AWS account

  5. Instale Terraform (versión 0.12).Install Terraform >= 0.12

  6. Cree una entidad de servicio de Azure.Create an Azure service principal.

    Para conectar la máquina virtual de AWS a Azure Arc se necesita una entidad de servicio de Azure con el rol Colaborador.To connect the AWS virtual machine to Azure Arc, an Azure service principal assigned with the Contributor role is required. Inicie sesión en su cuenta de Azure y luego ejecute el comando siguiente para crearla.To create it, sign in to your Azure account and run the following command. También puede ejecutar este comando en Azure Cloud Shell.You can also run this command in Azure Cloud Shell.

    az login
    az ad sp create-for-rbac -n "<Unique SP Name>" --role contributor
    

    Por ejemplo:For example:

    az ad sp create-for-rbac -n "http://AzureArcAWS" --role contributor
    

    La salida debe ser similar a la que se muestra a continuación:Output should look like this:

    {
      "appId": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      "displayName": "AzureArcAWS",
      "name": "http://AzureArcAWS",
      "password": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      "tenant": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    }
    

    Nota

    Se recomienda que el ámbito de la entidad de servicio se establezca en una suscripción y un grupo de recursos específicos de Azure.We highly recommend that you scope the service principal to a specific Azure subscription and resource group.

Creación de una identidad de AWSCreate an AWS identity

Para que Terraform cree recursos en AWS, es necesario crear un nuevo rol de IAM de AWS con los permisos adecuados y configurar Terraform para usarlo.In order for Terraform to create resources in AWS, we will need to create a new AWS IAM role with appropriate permissions and configure Terraform to use it.

  1. Inicie sesión en la consola de administración de AWS.Sign in to the AWS management console

  2. Después de iniciar sesión, seleccione la lista desplegable Servicios de la parte superior izquierda.After signing in, select the Services dropdown in the top left. En Seguridad, identidad y cumplimiento, seleccione IAM para acceder a la página de administración de identidad y acceso.Under Security, Identity, and Compliance, select IAM to access the identity and access management page

    Captura de pantalla de la consola de nube de AWS.

    Captura de pantalla de la administración de identidad y acceso en la consola de nube de AWS.

  3. Haga clic en Usuarios en el menú de la izquierda y seleccione Agregar usuario para crear un nuevo usuario de IAM.Click on Users from the left menu, and then select Add user to create a new IAM user.

    Captura de pantalla de la pantalla de creación de un nuevo usuario en una consola de nube de AWS.

  4. En la página Agregar usuario, asigne el nombre Terraform al usuario, active la casilla Acceso mediante programación y seleccione Siguiente.On the Add User page, name the user Terraform and select the Programmatic Access check box, and then select Next.

    Segunda captura de pantalla de la pantalla de creación de un nuevo usuario en una consola de nube de AWS.

  5. En la página Establecer permisos, seleccione Adjuntar directivas existentes directamente, active la casilla situada junto a AmazonEC2FullAccess como se ha visto en la captura de pantalla y seleccione Siguiente.On the Set Permissions page, select Attach existing policies directly and then check the box next to AmazonEC2FullAccess as seen in the screenshot, and then select Next.

    Tercera captura de pantalla de la pantalla de creación de un nuevo usuario en una consola de nube de AWS.

  6. En la página Etiquetas, asigne una etiqueta con una clave azure-arc-demo y seleccione Siguiente para pasar a la página Revisión.On the Tags page, assign a tag with a key of azure-arc-demo and select Next to proceed to the Review page.

    Captura de pantalla de etiquetas en una consola de nube de AWS.

  7. Compruebe que todo es correcto y seleccione Crear usuario cuando todo esté listo.Verify that everything is correct and select Create user when ready.

    Cuarta captura de pantalla de la pantalla de creación de un nuevo usuario en una consola de nube de AWS.

  8. Una vez creado el usuario, se ve el identificador de la clave de acceso del usuario y la clave de acceso secreta.After the user is created, you will see the user's access key ID and secret access key. Copie estos valores antes de seleccionar Cerrar.Copy these values before selecting Close. En la página siguiente puede ver un ejemplo de su aspecto.On the next page, you can see an example of what this should look like. Una vez que tenga estas claves, puede usarlas con Terraform para crear recursos de AWS.Once you have these keys, you will be able to use them with Terraform to create AWS resources.

    Captura de pantalla de la creación correcta de un usuario en una consola de nube de AWS.

Configuración de TerraformConfigure Terraform

Antes de ejecutar el plan de Terraform, debe exportar las variables de entorno que se van a usar en el plan.Before executing the Terraform plan, you must export the environment variables which will be used by the plan. Estas variables se basan en la suscripción de Azure y el inquilino, la entidad de servicio de Azure, y el usuario y las claves de IAM de AWS que acaba de crear.These variables are based on your Azure subscription and tenant, the Azure service principal, and the AWS IAM user and keys you just created.

  1. Recupere el identificador del inquilino y el identificador de la suscripción de Azure mediante el comando az account list.Retrieve your Azure subscription ID and tenant ID using the az account list command.

  2. El plan de Terraform crea recursos tanto en Microsoft Azure como en AWS.The Terraform plan creates resources in both Microsoft Azure and AWS. Luego ejecuta un script en una máquina virtual de EC2 de AWS para instalar el agente de Azure Arc y todos los artefactos necesarios.It then executes a script on an AWS EC2 virtual machine to install the Azure Arc agent and all necessary artifacts. Este script requiere determinada información sobre los entornos de AWS y Azure.This script requires certain information about your AWS and Azure environments. Edite scripts/vars.sh y actualice cada una de las variables con los valores adecuados.Edit scripts/vars.sh and update each of the variables with the appropriate values.

    • TF_VAR_subscription_id: identificador de la suscripción de AzureTF_VAR_subscription_id = Your Azure subscription ID
    • TF_VAR_client_id: identificador de aplicación de la entidad de servicio de AzureTF_VAR_client_id = Your Azure service principal app ID
    • TF_VAR_client_secret: contraseña de la entidad de servicio de AzureTF_VAR_client_secret = Your Azure service principal password
    • TF_VAR_tenant_id: identificador de inquilino de AzureTF_VAR_tenant_id = Your Azure tenant ID
    • AWS_ACCESS_KEY_ID: clave de acceso de AWSAWS_ACCESS_KEY_ID = AWS access key
    • AWS_SECRET_ACCESS_KEY: clave secreta de AWSAWS_SECRET_ACCESS_KEY = AWS secret key
  3. En la CLI de Azure, vaya al directorio azure_arc_servers_jumpstart/aws/ubuntu/terraform del repositorio clonado.From the Azure CLI, navigate to the azure_arc_servers_jumpstart/aws/ubuntu/terraform directory of the cloned repo.

  4. Exporte las variables de entorno que ha editado ejecutando scripts/vars.sh con el comando source, como se muestra a continuación.Export the environment variables you edited by running scripts/vars.sh with the source command as shown below. Terraform requiere que se establezcan para que el plan se ejecute correctamente.Terraform requires these to be set for the plan to execute properly. Tenga en cuenta que este script también se ejecuta automáticamente de forma remota en la máquina virtual de AWS como parte de la implementación de Terraform.Note that this script will also be automatically executed remotely on the AWS virtual machine as part of the Terraform deployment.

    source ./scripts/vars.sh
    
  5. Asegúrese de que las claves SSH están disponibles en ~/.ssh y tienen el nombre id_rsa.pub e id_rsa.Make sure your SSH keys are available in ~/.ssh and named id_rsa.pub and id_rsa. Si ha seguido la guía de ssh-keygen anterior para crear la clave, ya debería estar configurada correctamente.If you followed the ssh-keygen guide above to create your key then this should already be setup correctly. Si no, puede que tenga que modificar main.tf para usar una clave con otra ruta de acceso.If not, you may need to modify main.tf to use a key with a different path.

  6. Ejecute el comando terraform init, que descargará el proveedor de AzureRM de Terraform.Run the terraform init command which will download the Terraform AzureRM provider.

    Captura de pantalla del comando "terraform init".

ImplementaciónDeployment

  1. Ejecute el comando terraform apply --auto-approve y espere a que finalice el plan.Run the terraform apply --auto-approve command and wait for the plan to finish. Cuando termina, hay una instancia de Amazon Linux 2 en EC2 de AWS implementada y conectada como nuevo servidor habilitado para Azure Arc en un nuevo grupo de recursos.Upon completion, you will have an AWS Amazon Linux 2 EC2 instance deployed and connected as a new Azure Arc enabled server inside a new resource group.

  2. Abra Azure Portal y vaya al grupo de recursos arc-aws-demo.Open the Azure portal and navigate to the arc-aws-demo resource group. La máquina virtual creada en AWS es visible como un recurso.The virtual machine created in AWS will be visible as a resource.

    Captura de pantalla que muestra un servidor habilitado para Azure Arc en Azure Portal.

    Captura de pantalla de la consola de AWS que muestra instancias de EC2.

Implementación semiautomatizada (opcional)Semi-automated deployment (optional)

Como puede que haya observado, el último paso de la ejecución es registrar la máquina virtual como nuevo recurso de servidor habilitado para Azure Arc.As you may have noticed, the last step of the run is to register the VM as a new Azure Arc enabled server resource.

Captura de pantalla del comando "azcmagent connect".

Si quiere mostrar o controlar el proceso de registro real, haga lo siguiente:If you want to demo/control the actual registration process, do the following:

  1. En la plantilla de script install_arc_agent.sh.tmpl, comente la sección run connect command y guarde el archivo.In the install_arc_agent.sh.tmpl script template, comment out the run connect command section and save the file.

    Captura de pantalla que muestra "main.tf" comentado para deshabilitar la incorporación automática de un agente de Azure Arc.

  2. Para obtener la dirección IP pública de la máquina virtual de AWS, ejecute terraform output.Get the public IP of the AWS VM by running terraform output.

    Captura de pantalla de una salida de Terraform.

  3. Aplique SSH a la máquina virtual mediante ssh ubuntu@xx.xx.xx.xx, donde xx.xx.xx.xx es la dirección IP del host.SSH the VM using the ssh ubuntu@xx.xx.xx.xx where xx.xx.xx.xx is the host IP.

    Captura de pantalla de una clave SSH que se conecta a un servidor de EC2.

  4. Exporte todas las variables de entorno de vars.sh.Export all the environment variables in vars.sh.

    Captura de pantalla de las variables de entorno exportadas en "vars.sh".

  5. Ejecute el siguiente comando:Run the following command:

    azcmagent connect --service-principal-id $TF_VAR_client_id --service-principal-secret $TF_VAR_client_secret --resource-group "arc-aws-demo" --tenant-id $TF_VAR_tenant_id --location "westus2" --subscription-id $TF_VAR_subscription_id
    

    Otra captura de pantalla del comando "azcmagent connect".

  6. Cuando termina, la máquina virtual se registra en Azure Arc y está visible en el grupo de recursos mediante Azure Portal.When complete, your VM will be registered with Azure Arc and visible in the resource group via the Azure portal.

Eliminar la implementaciónDelete the deployment

Para eliminar todos los recursos creados en esta demostración, use el comando terraform destroy --auto-approve tal y como se muestra a continuación.To delete all the resources you created as part of this demo use the terraform destroy --auto-approve command as shown below.

Captura de pantalla del comando "terraform destroy".

También puede eliminar la instancia de EC2 de AWS directamente desde la consola de AWS.Alternatively, you can delete the AWS EC2 instance directly by terminating it from the AWS console. Tenga en cuenta que la instancia tardará unos minutos en eliminarse realmente.Note that it will take a few minutes for the instance to actually be removed.

Captura de pantalla de cómo finalizar una instancia en la consola de AWS.

Si elimina la instancia manualmente, también debe eliminar *./scripts/install_arc_agent.sh, que crea el plan de Terraform.If you delete the instance manually, then you should also delete *./scripts/install_arc_agent.sh, which is created by the Terraform plan.