Tutorial de Java para AWS Cloud9 - AWS Cloud9

AWS Cloud9 ya no está disponible para nuevos clientes. Los clientes existentes de AWS Cloud9 pueden seguir utilizando el servicio con normalidad. Más información

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Tutorial de Java para AWS Cloud9

Este tutorial le permite configurar y ejecutar LAMP (Linux, Apache HTTP Server, MySQL y PHP) en un entorno de desarrollo de AWS Cloud9.

El uso de este tutorial y la creación de esta muestra puede generar cargos en su Cuenta de AWS. Entre estos se incluyen posibles cargos por servicios de AWS como Amazon Elastic Compute Cloud (Amazon EC2). Para obtener más información, consulte Precios de Amazon EC2.

Requisitos previos

Antes de utilizar este ejemplo, asegúrese de que su configuración cumpla los siguientes requisitos:

  • Debe tener un entorno de desarrollo de AWS Cloud9 EC2. En este ejemplo, se da por hecho que ya tiene un entorno de EC2 que está conectado a una instancia de Amazon EC2 que ejecuta Amazon Linux o Ubuntu Server. Si tiene otro tipo de entorno o sistema operativo, es posible que tenga que adaptar las instrucciones de este ejemplo para configurar herramientas relacionadas. Para obtener más información, consulte Crear un entorno en AWS Cloud9.

  • Ya tiene abierto el IDE de AWS Cloud9 para el entorno existente. Al abrir un entorno, AWS Cloud9 abre el IDE de ese entorno en el navegador web. Para obtener más información, consulte Apertura de un entorno en AWS Cloud9.

Paso 1: Instalar las herramientas

En este paso, instalará las siguientes herramientas:

  • Apache HTTP Server, un host de servidor web.

  • PHP, un lenguaje de script especialmente indicado para el desarrollo web y que se puede incrustar en HTML.

  • MySQL, un sistema de administración de bases de datos.

Luego, para finalizar este paso, debe iniciar Apache HTTP Server y después MySQL.

  1. Asegúrese de que las últimas actualizaciones de seguridad y correcciones de errores están instaladas en la instancia. Para ello, en una sesión del terminal del IDE de AWS Cloud9, ejecute el comando yum update (para Amazon Linux) o apt update para (Ubuntu Server). (Para iniciar una nueva sesión del terminal, en la barra de menús, seleccione Window [Ventana], New Terminal [Nuevo terminal]).

    Para Amazon Linux:

    sudo yum -y update

    Para Ubuntu Server:

    sudo apt -y update
  2. Compruebe si Apache HTTP Server ya está instalado. Para ello, ejecute el comando httpd -v (para Amazon Linux) o apache2 -v (para Ubuntu Server).

    Si está instalado, el resultado contendrá el número de versión de Apache HTTP Server.

    Si aparece un error, instale Apache HTTP Server ejecutando el comando install.

    Para Amazon Linux:

    sudo yum install -y httpd24

    Para Ubuntu Server:

    sudo apt install -y apache2
  3. Confirme si PHP ya está instalado ejecutando el comando php -v.

    Si es así, el resultado contendrá el número de versión de PHP.

    Si aparece un error, instale PHP ejecutando el comando install.

    Para Amazon Linux:

    sudo yum install -y php56

    Para Ubuntu Server:

    sudo apt install -y php libapache2-mod-php php-xml
  4. Confirme si MySQL ya está instalado ejecutando el comando mysql --version.

    Si es así, el resultado contendrá el número de versión de MySQL.

    Si aparece un error, instale MySQL ejecutando el comando install.

    Para Amazon Linux:

    sudo yum install -y mysql-server

    Para Ubuntu Server:

    sudo apt install -y mysql-server
  5. Después de instalar Apache HTTP Server, PHP y MySQL, inicie Apache HTTP Server y, a continuación, confirme que se ha iniciado ejecutando el siguiente comando.

    Para Amazon Linux (es posible que tenga que ejecutar el comando dos veces):

    sudo service httpd start && sudo service httpd status

    Para Ubuntu Server (para volver a la línea de comandos, pulse q):

    sudo service apache2 start && sudo service apache2 status
  6. Inicie MySQL y, a continuación, confirme que se ha iniciado ejecutando el siguiente comando.

    Para Amazon Linux:

    sudo service mysqld start && sudo service mysqld status

    Para Ubuntu Server (para volver a la línea de comandos, pulse q):

    sudo service mysql start && sudo service mysql status

Paso 2: Configurar MySQL

En este paso, configurará MySQL para seguir las prácticas de seguridad recomendadas de MySQL. Estas prácticas recomendadas de seguridad incluyen establecer una contraseña para las cuentas raíz y eliminar las cuentas raíz a las que se puede acceder desde fuera del host local. Otras prácticas recomendadas a tener en cuenta son eliminar los usuarios anónimos, eliminar la base de datos de prueba y eliminar los privilegios que permiten a cualquier persona acceder a las bases de datos con nombres que comiencen por test_.

Para terminar este paso, practique el inicio y la salida del cliente de línea de comandos de MySQL.

  1. Implemente las prácticas de seguridad recomendadas de MySQL para la instalación de MySQL. Para ello, ejecute el siguiente comando en una sesión del terminal en el IDE de AWS Cloud9.

    sudo mysql_secure_installation
  2. Cuando se le solicite, responda a las siguientes preguntas.

    Para Amazon Linux:

    1. Enter current password for root (enter for none) (Ingrese la contraseña raíz actual [Intro para ninguna]: pulse Enter (sin contraseña).

    2. Set root password (Establecer la contraseña raíz): escriba Y y, a continuación, pulse Enter.

    3. New password (Nueva contraseña): escriba una contraseña y, a continuación, pulse Enter.

    4. Re-enter new password (Volver a ingresar la nueva contraseña): escriba la contraseña de nuevo y, a continuación, pulse Enter. (Asegúrese de almacenar la contraseña en un lugar seguro para usarla más adelante).

    5. Remove anonymous users (Eliminar usuarios anónimos): escriba Y y, a continuación, pulse Enter.

    6. Disallow root login remotely (No permitir el inicio de sesión raíz de forma remota): escriba Y y, a continuación, pulse Enter.

    7. Remove test database and access to it (Eliminar la base de datos de prueba y acceder a ella): escriba Y y, a continuación, pulse Enter.

    8. Reload privilege tables now (Volver a cargar tablas de privilegios ahora): escriba Y y, a continuación, pulse Enter.

    Para Ubuntu Server:

    1. Would you like to set up VALIDATE PASSWORD plugin (¿Quiere configurar el complemento VALIDATE PASSWORD?): escriba y y, a continuación, pulse Enter.

    2. There are three levels of password validation policy (Existen tres niveles de política de validación de contraseñas): escriba 0, 1, o 2 y, a continuación, pulse Enter.

    3. New password (Nueva contraseña): escriba una contraseña y, a continuación, pulse Enter.

    4. Re-enter new password (Volver a introducir la nueva contraseña): escriba la contraseña de nuevo y, a continuación, pulse Enter. Asegúrese de guardar la contraseña en un lugar seguro para usarla más adelante.

    5. Do you wish to continue with the password provided (¿Desea continuar con la contraseña proporcionada?): escriba y y, a continuación, pulse Enter.

    6. Remove anonymous users (Eliminar usuarios anónimos): escriba y y, a continuación, pulse Enter.

    7. Disallow root login remotely (No permitir el inicio de sesión raíz de forma remota): escriba y y, a continuación, pulse Enter.

    8. Remove test database and access to it (Eliminar la base de datos de prueba y acceder a ella): escriba y y, a continuación, pulse Enter.

    9. Reload privilege tables now (Volver a cargar tablas de privilegios ahora): escriba y y, a continuación, pulse Enter.

  3. Para interactuar directamente con MySQL, inicie el cliente de línea de comandos de MySQL como usuario raíz mediante la ejecución del siguiente comando. Cuando se le solicite, escriba la contraseña del usuario raíz que ha definido anteriormente y, a continuación, pulse Enter. El símbolo cambia a mysql> mientras se encuentra en el cliente de línea de comandos de MySQL.

    sudo mysql -uroot -p
  4. Para salir del cliente de línea de comandos de MySQL, ejecute el siguiente comando. El símbolo vuelve a cambiar a $.

    exit;

Paso 3: Configurar un sitio web

En este paso, configurará la raíz del sitio web predeterminado para Apache HTTP Server con los propietarios y los permisos de acceso recomendados. Seguidamente, creará una página web basada en PHP dentro de esa raíz del sitio web predeterminado.

A continuación, habilitará el tráfico web entrante para ver esa página web mediante la configuración del grupo de seguridad de Amazon EC2 y la lista de control de acceso de red (ACL de red) en Amazon Virtual Private Cloud (Amazon VPC) que están asociados a este entorno de EC2. Cada entorno de EC2 debe estar asociado a un grupo de seguridad de Amazon EC2 y a una ACL de red de Amazon VPC. Sin embargo, aunque la ACL de red predeterminada de una Cuenta de AWS permite todo el tráfico de entrada y salida del entorno, el grupo de seguridad predeterminado permite únicamente el tráfico entrante mediante SSH a través del puerto 22. Para obtener más información, consulte Configuración de VPC para entornos de desarrollo AWS Cloud9.

Para finalizar este paso, debe ver correctamente la página web desde fuera del IDE de AWS Cloud9.

  1. Configure la raíz del sitio web predeterminado para Apache HTTP Server (/var/www/html) con los propietarios y los permisos de acceso recomendados. Para ello, ejecute los seis comandos siguientes, de uno en uno, en el orden que se indica a continuación, desde una sesión del terminal en el IDE de AWS Cloud9. Para entender lo que hace cada comando, lea la información que aparece detrás del comando # en cada comando.

    Para Amazon Linux:

    sudo groupadd web-content # Create a group named web-content. sudo usermod -G web-content -a ec2-user # Add the user ec2-user (your default user for this environment) to the group web-content. sudo usermod -G web-content -a apache # Add the user apache (Apache HTTP Server) to the group web-content. sudo chown -R ec2-user:web-content /var/www/html # Change the owner of /var/www/html and its files to user ec2-user and group web-content. sudo find /var/www/html -type f -exec chmod u=rw,g=rx,o=rx {} \; # Change all file permissions within /var/www/html to user read/write, group read-only, and others read/execute. sudo find /var/www/html -type d -exec chmod u=rwx,g=rx,o=rx {} \; # Change /var/www/html directory permissions to user read/write/execute, group read/execute, and others read/execute.

    Para Ubuntu Server:

    sudo groupadd web-content # Create a group named web-content. sudo usermod -G web-content -a ubuntu # Add the user ubuntu (your default user for this environment) to the group web-content. sudo usermod -G web-content -a www-data # Add the user www-data (Apache HTTP Server) to the group web-content. sudo chown -R ubuntu:web-content /var/www/html # Change the owner of /var/www/html and its files to user ubuntu and group web-content. sudo find /var/www/html -type f -exec chmod u=rw,g=rx,o=rx {} \; # Change all file permissions within /var/www/html to user read/write, group read-only, and others read/execute. sudo find /var/www/html -type d -exec chmod u=rwx,g=rx,o=rx {} \; # Change /var/www/html directory permissions to user read/write/execute, group read/execute, and others read/execute.
  2. Cree una página web basada en PHP denominada index.php en la carpeta raíz del sitio web predeterminado para Apache HTTP Server (que es /var/www/html) ejecutando el siguiente comando.

    Para Amazon Linux:

    sudo touch /var/www/html/index.php && sudo chown -R ec2-user:web-content /var/www/html/index.php && sudo chmod u=rw,g=rx,o=rx /var/www/html/index.php && sudo printf '%s\n%s\n%s' '<?php' ' phpinfo();' '?>' >> /var/www/html/index.php

    El comando anterior de Amazon Linux también cambia el propietario del archivo a ec2-user, el grupo del archivo a web-content y los permisos del archivo a lectura/escritura para el usuario y a lectura/ejecución para el grupo y otros usuarios.

    Para Ubuntu Server:

    sudo touch /var/www/html/index.php && sudo chown -R ubuntu:web-content /var/www/html/index.php && sudo chmod u=rw,g=rx,o=rx /var/www/html/index.php && sudo printf '%s\n%s\n%s' '<?php' ' phpinfo();' '?>' >> /var/www/html/index.php

    El comando anterior de Ubuntu Server cambia también el propietario del archivo a ubuntu, cambia el grupo del archivo a web-content y cambia los permisos del archivo a lectura/escritura para el usuario y a lectura/ejecución para el grupo y otros usuarios.

    Si se ejecuta correctamente, los comandos anteriores crean el archivo index.php con el siguiente contenido.

    <?php phpinfo(); ?>
  3. Habilite el tráfico web entrante a través del puerto 80 para ver la nueva página web. Para ello, configure la ACL de red en Amazon VPC y el grupo de seguridad en Amazon EC2 que están asociados a este entorno de EC2. Para ello, ejecute los ocho comandos siguientes, de uno en uno, en el orden que se indica a continuación. Para entender lo que hace cada comando, lea la información que aparece detrás del comando # en cada comando.

    importante

    La ejecución de los siguientes comandos permite el tráfico web entrante a través del puerto 80 para todos los entornos de EC2 de instancias de Amazon EC2 que están asociados al grupo de seguridad y a la ACL de red de este entorno. Esto podría provocar la habilitación inesperada del tráfico web entrante a través del puerto 80 para entornos de EC2 e instancias de Amazon EC2 distintos del actual.

    nota

    Los comandos del segundo al cuarto siguientes habilitan el grupo de seguridad para permitir el tráfico web entrante a través del puerto 80. Si tiene un grupo de seguridad predeterminado, que solo permite el tráfico SSH a través del puerto 22, debe ejecutar el primer comando y después los comandos del segundo al cuarto. Sin embargo, si tiene un grupo de seguridad personalizado que ya permite el tráfico web entrante a través del puerto 80, puede omitir la ejecución de estos comandos.

    Los comandos del quinto al octavo siguientes habilitan la ACL de red para permitir el tráfico web entrante a través del puerto 80. Si tiene una ACL de red predeterminada, que ya permite todo el tráfico entrante a través de todos los puertos, puede pasar por alto la ejecución de dichos comandos. Sin embargo, supongamos que tiene una ACL de red personalizada que no habilita el tráfico web entrante a través del puerto 80. A continuación, ejecute el primer comando seguido de los comandos quinto a octavo.

    MY_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) # Get the ID of the instance for the environment, and store it temporarily. MY_SECURITY_GROUP_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SecurityGroups[0].GroupId' --output text) # Get the ID of the security group associated with the instance, and store it temporarily. aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --protocol tcp --cidr 0.0.0.0/0 --port 80 # Add an inbound rule to the security group to allow all incoming IPv4-based traffic over port 80. aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --ip-permissions IpProtocol=tcp,Ipv6Ranges='[{CidrIpv6=::/0}]',FromPort=80,ToPort=80 # Add an inbound rule to the security group to allow all incoming IPv6-based traffic over port 80. MY_SUBNET_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SubnetId' --output text) # Get the ID of the subnet associated with the instance, and store it temporarily. MY_NETWORK_ACL_ID=$(aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=$MY_SUBNET_ID --query 'NetworkAcls[].Associations[0].NetworkAclId' --output text) # Get the ID of the network ACL associated with the subnet, and store it temporarily. aws ec2 create-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --protocol tcp --rule-action allow --rule-number 10000 --cidr-block 0.0.0.0/0 --port-range From=80,To=80 # Add an inbound rule to the network ACL to allow all IPv4-based traffic over port 80. Advanced users: change this suggested rule number as desired. aws ec2 create-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --protocol tcp --rule-action allow --rule-number 10100 --ipv6-cidr-block ::/0 --port-range From=80,To=80 # Add an inbound rule to the network ACL to allow all IPv6-based traffic over port 80. Advanced users: change this suggested rule number as desired.
  4. Obtenga la URL al archivo index.php en la raíz del servidor web. Para ello, ejecute el siguiente comando y utilice una nueva pestaña del navegador web o un navegador web distinto desde el IDE de AWS Cloud9 para ir a la URL que se muestra. Si se ejecuta correctamente, la página web muestra información acerca de Apache HTTP Server, MySQL, PHP y otra configuración relacionada.

    MY_PUBLIC_IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) && echo http://$MY_PUBLIC_IP/index.php # Get the URL to the index.php file within the web server root.

Paso 4: Limpiar

Supongamos que desea seguir utilizando este entorno, pero desea deshabilitar el tráfico web entrante a través del puerto 80. En ese caso, ejecute los ocho comandos siguientes, uno por uno, en el orden que se indica a continuación, para eliminar las reglas de tráfico entrante correspondientes que configuró anteriormente en el grupo de seguridad y en la ACL de red que están asociados al entorno. Para entender lo que hace cada comando, lea la información que aparece detrás del comando # en cada comando.

importante

La ejecución de los siguientes comandos desactiva el tráfico web entrante a través del puerto 80 para todos los entornos de EC2 y las instancias de Amazon EC2 que están asociados al grupo de seguridad y a la ACL de red de este entorno. Esto podría provocar la desactivación inesperada del tráfico web entrante a través del puerto 80 para entornos de EC2 e instancias de Amazon EC2 distintos del actual.

nota

Los comandos del quinto al octavo siguientes eliminan las reglas existentes para impedir que la ACL de red permita el tráfico web entrante a través del puerto 80. Si tiene una ACL de red predeterminada, que ya permite todo el tráfico entrante a través de todos los puertos, puede omitir la ejecución de dichos comandos. Sin embargo, supongamos que tiene una ACL de red personalizada con reglas existentes que permiten el tráfico web entrante a través del puerto 80 y desea eliminar esas reglas. En ese caso, ejecute el primer comando seguido de los comandos quinto a octavo.

MY_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) # Get the ID of the instance for the environment, and store it temporarily. MY_SECURITY_GROUP_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SecurityGroups[0].GroupId' --output text) # Get the ID of the security group associated with the instance, and store it temporarily. aws ec2 revoke-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --protocol tcp --cidr 0.0.0.0/0 --port 80 # Delete the existing inbound rule from the security group to block all incoming IPv4-based traffic over port 80. aws ec2 revoke-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --ip-permissions IpProtocol=tcp,Ipv6Ranges='[{CidrIpv6=::/0}]',FromPort=80,ToPort=80 # Delete the existing inbound rule from the security group to block all incoming IPv6-based traffic over port 80. MY_SUBNET_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SubnetId' --output text) # Get the ID of the subnet associated with the instance, and store it temporarily. MY_NETWORK_ACL_ID=$(aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=$MY_SUBNET_ID --query 'NetworkAcls[].Associations[0].NetworkAclId' --output text) # Get the ID of the network ACL associated with the subnet, and store it temporarily. aws ec2 delete-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --rule-number 10000 # Delete the existing inbound rule from the network ACL to block all IPv4-based traffic over port 80. Advanced users: if you originally created this rule with a different number, change this suggested rule number to match. aws ec2 delete-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --rule-number 10100 # Delete the existing inbound rule from the network ACL to block all IPv6-based traffic over port 80. Advanced users: if you originally created this rule with a different number, change this suggested rule number to match.

Si ha terminado de usar este entorno, elimínelo para evitar que se apliquen cargos continuos en su Cuenta de AWS. Para obtener instrucciones, consulte Eliminación de un entorno en AWS Cloud9.