

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.

# Úselo AWS CodeBuild con Amazon Virtual Private Cloud
<a name="vpc-support"></a>

Por lo general, AWS CodeBuild no puede acceder a los recursos de una VPC. Para habilitar el acceso, debe proporcionar información de configuración adicional específica de VPC en la configuración de su CodeBuild proyecto. Esto incluye el ID de VPC, la subred de VPC IDs y el grupo de seguridad de VPC. IDs Las compilaciones habilitadas para VPC pueden acceder a los recursos que se encuentran dentro de la VPC. Para obtener más información acerca de cómo configurar una VPC en Amazon VPC, consulte la [Guía del usuario de Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Introduction.html).

**Topics**
+ [Casos de uso](#use-cases)
+ [Mejores prácticas para VPCs](#best-practices-for-vpcs)
+ [Limitaciones de VPCs](#vpc-limitations)
+ [Permita el acceso de Amazon VPC a sus proyectos CodeBuild](enabling-vpc-access-in-projects.md)
+ [Solución de problemas de la configuración de la VPC](troubleshooting-vpc.md)
+ [Uso de puntos de enlace de la VPC](use-vpc-endpoints-with-codebuild.md)
+ [AWS CodeBuild Utilícelo con un servidor proxy gestionado](run-codebuild-in-managed-proxy-server.md)
+ [Uso AWS CodeBuild con un servidor proxy](use-proxy-server.md)
+ [CloudFormationPlantilla de VPC de](cloudformation-vpc-template.md)

## Casos de uso
<a name="use-cases"></a>

La conectividad de VPC desde las AWS CodeBuild compilaciones permite:
+ Ejecutar pruebas de integración desde la compilación con los datos de una base de datos de Amazon RDS aislada en una subred privada.
+ Consulta datos en un ElastiCache clúster de Amazon directamente desde las pruebas.
+ Interactúe con los servicios web internos alojados en Amazon EC2, Amazon ECS o servicios que utilizan el equilibrador de carga Elastic.
+ Recuperar las dependencias de repositorios de artefactos internos y autoalojados, como PyPI para Python, Maven para Java y npm para Node.js.
+ Acceda a los objetos de un bucket de S3 configurado para permitir el acceso únicamente a través de un punto de conexión de Amazon VPC.
+ Consultar servicios web externos que requieren direcciones IP fijas a través de la dirección IP elástica de la gateway NAT o la instancia NAT asociada a la subred.

Sus compilaciones pueden tener acceso a cualquier recurso alojado en su VPC.

## Mejores prácticas para VPCs
<a name="best-practices-for-vpcs"></a>

Utilice esta lista de comprobación cuando configure una VPC con la que trabajar. CodeBuild
+ Configure su VPC con subredes públicas y privadas y una puerta de enlace NAT. La puerta de enlace NAT debe estar alojada en una subred pública. Para obtener más información, consulte [VPC son subredes públicas y privadas (NAT)](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html) en la *Guía del usuario de Amazon VPC*.
**importante**  
Necesita una puerta de enlace de NAT o una instancia de NAT para utilizarla CodeBuild con su VPC de forma que CodeBuild pueda llegar a los puntos finales públicos (por ejemplo, para ejecutar comandos de CLI al ejecutar compilaciones). No puede usar la puerta de enlace de Internet en lugar de una puerta de enlace NAT o una instancia de NAT porque CodeBuild no admite la asignación de direcciones IP elásticas a las interfaces de red que crea, y Amazon EC2 no admite la asignación automática de una dirección IP pública para ninguna interfaz de red creada fuera del lanzamiento de instancias de Amazon EC2. 
+ Incluya varias zonas de disponibilidad con su VPC.
+ Asegúrese de que sus grupos de seguridad no permiten el acceso de tráfico entrante (de entrada) a sus compilaciones. CodeBuild no tiene requisitos específicos para el tráfico saliente, pero debe permitir el acceso a todos los recursos de Internet necesarios para su compilación, como GitHub Amazon S3.

  Para obtener más información, consulte [Reglas del grupo de seguridad](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules) en la *Guía del usuario de Amazon VPC*. 
+ Configure subredes independientes para sus compilaciones.
+ Cuando configure sus CodeBuild proyectos para acceder a su VPC, elija solo subredes privadas. 

Para obtener más información acerca de cómo configurar una VPC en Amazon VPC, consulte la [Guía del usuario de Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Introduction.html).

Para obtener más información sobre cómo CloudFormation configurar una VPC para usar la función de CodeBuild VPC, consulte la. [CloudFormationPlantilla de VPC de](cloudformation-vpc-template.md)

## Limitaciones de VPCs
<a name="vpc-limitations"></a>
+ No se admite la conectividad de VPC desde CodeBuild la compartida. VPCs

# Permita el acceso de Amazon VPC a sus proyectos CodeBuild
<a name="enabling-vpc-access-in-projects"></a>

Incluya estos ajustes en la configuración de su VPC:
+ Para el ID de **VPC, elija el ID** de VPC que utilice. CodeBuild 
+ En el **caso de las subredes**, elija una subred privada con traducción de NAT que incluya o tenga rutas hacia los recursos que utilizan. CodeBuild
+ En el **caso de los grupos** de seguridad, elija los grupos de seguridad que se CodeBuild utilizan para permitir el acceso a los recursos del. VPCs



Si desea utilizar la consola para crear un proyecto de compilación, consulte [Creación de un proyecto de compilación (consola)](create-project.md#create-project-console). Al crear o cambiar el CodeBuild proyecto, en la **VPC**, elige el ID, las subredes y los grupos de seguridad de la VPC. 



Para usar el AWS CLI para crear un proyecto de compilación, consulte. [Crear un proyecto de compilación (AWS CLI)](create-project.md#create-project-cli) Si utiliza la función AWS CLI with CodeBuild, la función de servicio utilizada por el usuario de IAM CodeBuild para interactuar con los servicios en nombre del usuario de IAM debe tener una política adjunta. Para obtener información, consulte [Permitir el CodeBuild acceso a AWS los servicios necesarios para crear una interfaz de red de VPC](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-create-vpc-network-interface).

El *vpcConfig* objeto debe incluir su *vpcId**securityGroupIds*, y*subnets*.
+ *vpcId*: obligatorio. El ID de VPC que CodeBuild utiliza. Ejecute este comando para obtener una lista de todas las Amazon VPC de su IDs región:

  ```
  aws ec2 describe-vpcs
  ```
+ *subnets*: obligatorio. La subred IDs que incluye los recursos utilizados por. CodeBuild Ejecute este comando y obtenga lo siguiente: IDs

  ```
  aws ec2 describe-subnets --filters "Name=vpc-id,Values=<vpc-id>" --region us-east-1
  ```
**nota**  
Reemplace la `us-east-1` por su región.
+ *securityGroupIds*: obligatorio. El grupo de seguridad IDs utilizado por CodeBuild para permitir el acceso a los recursos del VPCs. Ejecute este comando para obtener lo IDs siguiente:

  ```
  aws ec2 describe-security-groups --filters "Name=vpc-id,Values=<vpc-id>" --region us-east-1
  ```
**nota**  
Reemplace la `us-east-1` por su región.

# Solución de problemas de la configuración de la VPC
<a name="troubleshooting-vpc"></a>

Utilice la información que aparece en el mensaje de error para ayudarle a identificar, diagnosticar y resolver los problemas.

A continuación, se indican algunas pautas que le ayudarán a solucionar un error frecuente de la VPC de CodeBuild: `Build does not have internet connectivity. Please check subnet network configuration`. 

1. [Asegúrese de que la gateway de Internet está conectada a la VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#Add_IGW_Attach_Gateway).

1. [Asegúrese de que la tabla de enrutamiento de su subred pública apunta a la gateway de Internet](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html#route-tables-internet-gateway).

1. [Asegúrese de que la red ACLs permita que el tráfico fluya](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules).

1. [Asegúrese de que los grupos de seguridad permiten el tráfico](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules).

1. [Solucione los problemas de la gateway NAT](https://docs.aws.amazon.com/vpc/latest/userguide/VPC-nat-gateway.html#nat-gateway-troubleshooting).

1. [Asegúrese de que la tabla de enrutamiento de las subredes privadas apunta a la gateway NAT](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html#route-tables-nat).

1. Asegúrese de que la función de servicio utilizada por el usuario de IAM CodeBuild para interactuar con los servicios en nombre del usuario de IAM tenga los permisos de [esta política](https://docs.aws.amazon.com/codebuild/latest/userguide/auth-and-access-control-iam-identity-based-access-control.html#customer-managed-policies-example-create-vpc-network-interface). Para obtener más información, consulte [CodeBuild Permiten interactuar con otros servicios AWS](setting-up-service-role.md). 

   Si faltan permisos, CodeBuild es posible que reciba un mensaje de error que diga:. `Unexpected EC2 error: UnauthorizedOperation` Este error puede producirse si CodeBuild no tiene los permisos de Amazon EC2 necesarios para trabajar con una VPC.

# Uso de puntos de enlace de la VPC
<a name="use-vpc-endpoints-with-codebuild"></a>

Puede mejorar la seguridad de sus compilaciones configurándolas AWS CodeBuild para usar un punto final de VPC de interfaz. Los puntos de enlace de la interfaz funcionan con una tecnología que puede utilizar para acceder de forma privada a Amazon EC2 CodeBuild y mediante direcciones IP privadas. PrivateLink PrivateLink restringe todo el tráfico de red entre las instancias gestionadas y Amazon EC2 a la red de Amazon. CodeBuild Las instancias administradas no tienen acceso a Internet. Asimismo, no necesita una gateway de Internet, ni un dispositivo NAT, ni una gateway privada virtual. No es necesario configurar PrivateLink, pero es recomendable. [Para obtener más información sobre PrivateLink los puntos de enlace de VPC, consulte ¿Qué es? AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html) .

## Antes de crear los puntos de enlace de la VPC
<a name="vpc-endpoints-before-you-begin"></a>

 Antes de configurar los puntos de enlace de VPC AWS CodeBuild, tenga en cuenta las siguientes restricciones y limitaciones. 

**nota**  
 Utilice una [puerta de enlace NAT](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html) si desea utilizarla CodeBuild con AWS servicios que no admiten las conexiones de Amazon VPC PrivateLink. 
+  Los puntos de conexión de VPC solo admiten DNS proporcionadas por Amazon a través de Amazon Route 53. Si desea utilizar su propio DNS, puede utilizar el enrutamiento de DNS condicional. Para obtener más información, consulte [Conjuntos de opciones de DHCP](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) en la *Guía del usuario de Amazon VPC*. 
+  En la actualidad, los puntos de enlace de la VPC no admiten las solicitudes entre regiones. Asegúrese de crear su punto de conexión en la misma AWS región que cualquier depósito de S3 que almacene las entradas y salidas de la compilación. Puede utilizar la consola Amazon S3 o el [get-bucket-location](https://docs.aws.amazon.com/cli/latest/reference/s3api/get-bucket-location.html)comando para encontrar la ubicación de su depósito. Utilice un punto de conexión de Amazon S3 específico de región para acceder al bucket (por ejemplo, `<bucket-name>.s3-us-west-2.amazonaws.com`). Para obtener más información sobre los puntos de conexión específicos de la región para Amazon S3, consulte [Amazon Simple Storage Service](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) en la *Referencia general de Amazon Web Services*. Si utilizas el AWS CLI para realizar solicitudes a Amazon S3, establece tu región predeterminada en la misma región en la que se creó el bucket o usa el `--region` parámetro en tus solicitudes.

## Cree puntos finales de VPC para CodeBuild
<a name="creating-vpc-endpoints"></a>

Siga las instrucciones de [Creación de un punto de conexión de interfaz](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint) para crear el punto de conexión `com.amazonaws.region.codebuild`. Este es un punto final de VPC para. AWS CodeBuild

![\[Configuración de un punto de conexión de VPC\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/vpc-endpoint.png)


 *region*representa el identificador de región de una AWS región compatible con CodeBuild, por ejemplo, la región EE.UU. Este (Ohio). `us-east-2` Para obtener una lista de AWS las regiones compatibles, consulte [CodeBuild](https://docs.aws.amazon.com/general/latest/gr/rande.html#codebuild_region)la *Referencia AWS general*. El punto final se rellena automáticamente con la región que especificó al iniciar sesión. AWS Si cambia la región, el punto de conexión de la VPC se actualizará en consecuencia. 

## Cree una política de puntos de conexión de VPC para CodeBuild
<a name="creating-vpc-endpoint-policy"></a>

 Puede crear una política para los puntos de enlace de Amazon VPC AWS CodeBuild en la que pueda especificar:
+ La entidad principal que puede realizar acciones.
+ Las acciones que se pueden realizar.
+ Los recursos en los que se pueden realizar acciones. 

La siguiente política de ejemplo especifica que todas las entidades principales solo pueden iniciar y consultar compilaciones para el proyecto `project-name`. 

```
{
    "Statement": [
        {
            "Action": [
                "codebuild:ListBuildsForProject",
                "codebuild:StartBuild",
                "codebuild:BatchGetBuilds"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:codebuild:region-ID:account-ID:project/project-name",
            "Principal": "*"
        }
    ]
}
```

 Para obtener más información, consulte [Control del acceso a los servicios con puntos de conexión de VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html) en la *Guía del usuario de Amazon VPC*. 

# AWS CodeBuild Utilícelo con un servidor proxy gestionado
<a name="run-codebuild-in-managed-proxy-server"></a>

 Para ejecutar flotas de capacidad AWS CodeBuild reservada en un servidor proxy administrado, debe configurar el servidor proxy para permitir o denegar el tráfico hacia y desde sitios externos mediante reglas de proxy. Tenga en cuenta que la ejecución de flotas de capacidad reservada en un servidor proxy administrado no es compatible con VPC, Windows o macOS.

**importante**  
Hay costos adicionales en función del tiempo que una configuración de proxy esté presente en la flota. Para obtener más información, consulte [https://aws.amazon.com/codebuild/pricing/](https://aws.amazon.com/codebuild/pricing/).

**Topics**
+ [Configuración de un proxy administrado para las flotas de capacidad reservada](#run-codebuild-in-managed-proxy-server-configure)
+ [Gestione una flota de capacidad CodeBuild reservada](#use-managed-server-run-acb-fleet)

## Configuración de un proxy administrado para las flotas de capacidad reservada
<a name="run-codebuild-in-managed-proxy-server-configure"></a>

 Si quiere configurar un servidor proxy administrado para su flota de capacidad reservada, debe habilitar esta característica al crear la flota en la consola o al utilizar la AWS CLI. Hay varias propiedades que debe definir:

**Definir configuraciones de proxy (opcional)**  
Configuraciones de proxy que aplican el control de acceso a la red a las instancias de capacidad reservada.

**Comportamiento predeterminado**  
Define el comportamiento del tráfico saliente.    
**Permitir**  
Permite el tráfico saliente a todos los destinos de forma predeterminada.  
**Denegar**  
Deniega el tráfico saliente a todos los destinos de forma predeterminada.

**Reglas de proxy**  
Especifica los dominios de destino a los que restringir el control de acceso a la red.

Para definir las configuraciones del proxy en la consola, consulte las instrucciones de [Creación de una flota de capacidad reservada](fleets.md#fleets.how-to). Para definir las configuraciones de proxy mediante el AWS CLI, puede hacerlo modificando la siguiente sintaxis de JSON y guardando los resultados:

```
"proxyConfiguration": {
    "defaultBehavior": "ALLOW_ALL" | "DENY_ALL",
    "orderedProxyRules": [
        {
            "type": "DOMAIN" | "IP",
            "effect": "ALLOW" | "DENY",
            "entities": [
                "destination"
            ]
        }
    ]
}
```

El archivo JSON puede ser similar a lo siguiente:

```
"proxyConfiguration": {
    "defaultBehavior": "DENY_ALL",
    "orderedProxyRules": [
        {
            "type": "DOMAIN",
            "effect": "ALLOW",
            "entities": [
                "github.com"
            ]
        }
    ]
}
```

## Gestione una flota de capacidad CodeBuild reservada
<a name="use-managed-server-run-acb-fleet"></a>

 Al ejecutar flotas de capacidad AWS CodeBuild reservada con su servidor proxy administrado, CodeBuild configurará automáticamente sus variables `HTTP_PROXY` y las de `HTTPS_PROXY` entorno con las direcciones proxy administradas. Si el software de dependencia tiene su propia configuración y no se ajusta a las variables de entorno, puede consultar estos valores y actualizar la configuración del software en los comandos de compilación para enrutar el tráfico de compilación de forma correcta a través del proxy administrado. Para obtener más información, consulte [Creación de un proyecto de compilación en AWS CodeBuild](create-project.md) y [Cambie la configuración del proyecto de compilación en AWS CodeBuild](change-project.md).

# Uso AWS CodeBuild con un servidor proxy
<a name="use-proxy-server"></a>

 Se puede utilizar AWS CodeBuild con un servidor proxy para regular el tráfico HTTP y HTTPS hacia y desde Internet. Para ejecutarlo CodeBuild con un servidor proxy, debe instalar un servidor proxy en una subred pública y CodeBuild en una subred privada en una VPC. 

Existen dos casos de uso principales para la ejecución CodeBuild en un servidor proxy: 
+  Elimina la necesidad de utilizar una gateway NAT o una instancia NAT en la VPC. 
+  Permite especificar las instancias del servidor proxy a las URLs que pueden acceder y aquellas URLs a las que el servidor proxy deniega el acceso.

 Se puede utilizar CodeBuild con dos tipos de servidores proxy. En ambos casos, el servidor proxy se ejecuta en una subred pública y CodeBuild en una subred privada. 
+  **Proxy explícito**: si utiliza un servidor proxy explícito, debe configurar y `NO_PROXY` establecer `HTTP_PROXY` las variables de `HTTPS_PROXY` entorno CodeBuild a nivel de proyecto. Para obtener más información, consulte [Cambie la configuración del proyecto de compilación en AWS CodeBuild](change-project.md) y [Creación de un proyecto de compilación en AWS CodeBuild](create-project.md). 
+  **Proxy transparente**: si utiliza un servidor proxy transparente, no se necesita ninguna configuración especial. 

**Topics**
+ [Configure los componentes necesarios para ejecutarse CodeBuild en un servidor proxy](use-proxy-server-transparent-components.md)
+ [Se ejecuta CodeBuild en un servidor proxy explícito](run-codebuild-in-explicit-proxy-server.md)
+ [Ejecute CodeBuild en un servidor proxy transparente](run-codebuild-in-transparent-proxy-server.md)
+ [Ejecución de un administrador de paquetes y otras herramientas en un servidor proxy](use-proxy-server-tools.md)

# Configure los componentes necesarios para ejecutarse CodeBuild en un servidor proxy
<a name="use-proxy-server-transparent-components"></a>

 Necesita estos componentes para ejecutarse AWS CodeBuild en un servidor proxy transparente o explícito: 
+  Una VPC. 
+  Una subred pública en la VPC para el servidor proxy. 
+  Una subred privada en la VPC para CodeBuild. 
+  Una gateway de Internet que permita la comunicación entre la VPC e Internet. 

 En el siguiente diagrama, se muestran cómo interactúan los componentes. 

![\[El diagrama muestra cómo interactúan los componentes.\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/codebuild-proxy-transparent.png)


## Configuración de una VPC, varias subredes y una gateway de red
<a name="use-proxy-server-transparent-setup"></a>

 Los siguientes pasos son necesarios para ejecutarse AWS CodeBuild en un servidor proxy transparente o explícito. 

1. Cree una VPC. Para obtener más información, consulte [Creación de una VPC](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC) en la *Guía del usuario de Amazon VPC*.

1. Cree dos subredes en la VPC. Una será una subred pública llamada `Public Subnet` en la que se ejecutará el servidor proxy. La otra es una subred privada denominada `Private Subnet` en la que CodeBuild se ejecuta. 

   Para obtener más información, consulte [Creación de una subred en la VPC](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#AddaSubnet).

1.  Cree una gateway de Internet y vincúlela a su VPC. Para obtener más información, consulte [Creación y asociación de una gateway de Internet](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#Add_IGW_Attach_Gateway). 

1.  Agregue una regla a la tabla de enrutamiento predeterminada que direccione el tráfico saliente desde la VPC (0.0.0.0/0) a la gateway de Internet. Para obtener más información, consulte [Adición y eliminación de rutas de una tabla de enrutamiento](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html#AddRemoveRoutes). 

1.  Agregue una regla al grupo de seguridad predeterminado de la VPC que permita la entrada de tráfico SSH (TCP 22) procedente de la VPC (0.0.0.0/0). 

1.  Siga las instrucciones que se indican en [Lanzar una instancia con el asistente de inicialización de instancias](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/launching-instance.html) en la *Guía del usuario de Amazon EC2* para lanzar una instancia de Amazon Linux. Cuando el asistente esté en ejecución, seleccione las siguientes opciones: 
   +  En **Elija un tipo de instancia**, seleccione una Imagen de máquina de Amazon (AMI) de Amazon Linux. 
   +  En **Subnet (Subred)**, seleccione la subred pública que creó anteriormente en este tema. Si utilizó el nombre recomendado, se llamará **Public Subnet** (Subred pública). 
   +  En **Auto-assign Public IP** (IP de asignación automática), elija **Enable** (Habilitar). 
   +  En la página **Configure Security Group (Configurar grupo de seguridad)**, en **Assign a security group (Asignar un grupo de seguridad)**, seleccione **Select an existing security group (Seleccionar un grupo de seguridad existente)**. A continuación, seleccione el grupo de seguridad predeterminado. 
   +  Cuando haga clic en **Launch (Lanzar)**, seleccione un par de claves existente o cree uno. 

    Seleccione la configuración predeterminada de todas las demás opciones. 

1.  Una vez ejecutada la instancia EC2, deshabilite las source/destination comprobaciones. Para obtener más información, consulte [Inhabilitar las Source/Destination comprobaciones](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck) en la Guía del *usuario de Amazon VPC*. 

1.  Cree una tabla de enrutamiento en la VPC. Agregue una regla a la tabla de enrutamiento que direccione el tráfico destinado a Internet al servidor proxy. Asocie esta tabla de enrutamiento con la subred privada. Esto es necesario para que las solicitudes salientes de las instancias de su subred privada, donde CodeBuild se ejecuta, se enruten siempre a través del servidor proxy. 

## Instalación y configuración de un servidor proxy
<a name="use-proxy-server-squid-install"></a>

 Existen muchos servidores proxy entre los que elegir. Aquí se utiliza un servidor proxy de código abierto, Squid, para demostrar cómo se AWS CodeBuild ejecuta en un servidor proxy. Puede emplear estos mismos conceptos con otros servidores proxy. 

 Para instalar Squid, utilice un repositorio yum ejecutando los siguientes comandos: 

```
sudo yum update -y
sudo yum install -y squid
```

 Después de instalar Squid, edite el archivo `squid.conf` siguiendo las instrucciones que se indican más adelante en este tema. 

## Configuración de Squid para el tráfico HTTPS
<a name="use-proxy-server-squid-configure-https"></a>

 En HTTPS, el tráfico HTTP se encapsula en una conexión Transport Layer Security (TLS). Squid utiliza una función llamada [SslPeekAndSplice](https://wiki.squid-cache.org/Features/SslPeekAndSplice)para recuperar la indicación del nombre del servidor (SNI) de la dirección TLS que contiene el servidor de Internet solicitado. Esta operación es necesaria, ya que Squid no necesita descifrar el tráfico HTTPS. Para habilitarla SslPeekAndSplice, Squid necesita un certificado. Cree este certificado con OpenSSL: 

```
sudo mkdir /etc/squid/ssl
cd /etc/squid/ssl
sudo openssl genrsa -out squid.key 2048
sudo openssl req -new -key squid.key -out squid.csr -subj "/C=XX/ST=XX/L=squid/O=squid/CN=squid"
sudo openssl x509 -req -days 3650 -in squid.csr -signkey squid.key -out squid.crt
sudo cat squid.key squid.crt | sudo tee squid.pem
```

**nota**  
 En el caso de HTTP, Squid no requiere configuración. En todos los mensajes de solicitud HTTP/1.1, puede recuperar el campo del encabezado de host, donde se especifica el host de Internet que se está solicitando. 

# Se ejecuta CodeBuild en un servidor proxy explícito
<a name="run-codebuild-in-explicit-proxy-server"></a>

 Para ejecutarlo AWS CodeBuild en un servidor proxy explícito, debe configurarlo para permitir o denegar el tráfico hacia y desde sitios externos y, a continuación, configurar las variables `HTTP_PROXY` y de `HTTPS_PROXY` entorno. 

**Topics**
+ [Configuración de Squid como un servidor proxy explícito](#use-proxy-server-explicit-squid-configure)
+ [Cree un proyecto CodeBuild](#use-proxy-server-explicit-create-acb-project)
+ [Archivo `squid.conf` de ejemplo de un servidor proxy explícito](#use-proxy-server-explicit-sample-squid-conf)

## Configuración de Squid como un servidor proxy explícito
<a name="use-proxy-server-explicit-squid-configure"></a>

 Si desea configurar el servidor proxy de Squid para que sea explícito, debe realizar las siguientes modificaciones en el archivo `/etc/squid/squid.conf`: 
+  Elimine las siguientes reglas de lista de control de acceso (ACL) predeterminadas. 

  ```
  acl localnet src 10.0.0.0/8     
  acl localnet src 172.16.0.0/12  
  acl localnet src 192.168.0.0/16 
  acl localnet src fc00::/7       
  acl localnet src fe80::/10
  ```

   Agregue lo siguiente en lugar de las reglas de ACL predeterminadas que ha eliminado. La primera línea admite las solicitudes procedentes de la VPC. Las dos líneas siguientes permiten que el servidor proxy acceda al destino URLs que podría estar utilizando AWS CodeBuild. Edite la expresión regular de la última línea para especificar los buckets de S3 o un CodeCommit repositorio en una AWS región. Por ejemplo:
  + Si la fuente es Amazon S3, use el comando **acl download\$1src dstdom\$1regex .\$1s3\$1.us-west-1\$1.amazonaws\$1.com** para conceder acceso a los buckets de S3 de la región `us-west-1`.
  +  Si su fuente es AWS CodeCommit, úsela `git-codecommit.<your-region>.amazonaws.com` para añadir una AWS región a una lista de permitidos. 

  ```
  acl localnet src 10.1.0.0/16 #Only allow requests from within the VPC
  acl allowed_sites dstdomain .github.com #Allows to download source from GitHub
  acl allowed_sites dstdomain .bitbucket.com #Allows to download source from Bitbucket
  acl download_src dstdom_regex .*\.amazonaws\.com #Allows to download source from Amazon S3 or CodeCommit
  ```
+  Reemplace `http_access allow localnet` por lo siguiente: 

  ```
  http_access allow localnet allowed_sites
  http_access allow localnet download_src
  ```
+ Si desea que la compilación cargue registros y artefactos, realice una de las siguientes acciones:

  1. Antes de la instrucción `http_access deny all`, inserte las siguientes instrucciones. CodeBuild Permiten acceder CloudWatch a Amazon S3. CloudWatch Es necesario acceder a para CodeBuild poder crear CloudWatch registros. El acceso a Amazon S3 es necesario para poder cargar artefactos y el almacenamiento en caché de Amazon S3. 
     + 

       ```
       https_port 3130 cert=/etc/squid/ssl/squid.pem ssl-bump intercept
       acl SSL_port port 443
       http_access allow SSL_port
       acl allowed_https_sites ssl::server_name .amazonaws.com
       acl step1 at_step SslBump1
       acl step2 at_step SslBump2
       acl step3 at_step SslBump3
       ssl_bump peek step1 all
       ssl_bump peek step2 allowed_https_sites
       ssl_bump splice step3 allowed_https_sites
       ssl_bump terminate step2 all
       ```
     + Después de guardar `squid.conf`, ejecute el comando siguiente: 

       ```
       sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130
       sudo service squid restart
       ```

  1.  Agregue `proxy` al archivo buildspec. Para obtener más información, consulte [Sintaxis de buildspec](build-spec-ref.md#build-spec-ref-syntax). 

     ```
     version: 0.2
     proxy:
       upload-artifacts: yes
       logs: yes
     phases:
       build:
         commands:
           - command
     ```

**nota**  
Si recibe un error de RequestError tiempo de espera, consulte[RequestError error de tiempo de espera cuando se ejecuta CodeBuild en un servidor proxy](troubleshooting.md#code-request-timeout-error).

Para obtener más información, consulte [Archivo `squid.conf` de ejemplo de un servidor proxy explícito](#use-proxy-server-explicit-sample-squid-conf) más adelante en este tema.

## Cree un proyecto CodeBuild
<a name="use-proxy-server-explicit-create-acb-project"></a>

 Para ejecutarlo AWS CodeBuild con su servidor proxy explícito, configure sus variables `HTTP_PROXY` y las de `HTTPS_PROXY` entorno con la dirección IP privada de la instancia EC2 que creó para el servidor proxy y el puerto 3128 a nivel de proyecto. La dirección IP privada será parecida a la siguiente: `http://your-ec2-private-ip-address:3128`. Para obtener más información, consulte [Creación de un proyecto de compilación en AWS CodeBuild](create-project.md) y [Cambie la configuración del proyecto de compilación en AWS CodeBuild](change-project.md).

 Utilice el comando siguiente para ver el registro de acceso del proxy de Squid: 

```
sudo tail -f /var/log/squid/access.log
```

## Archivo `squid.conf` de ejemplo de un servidor proxy explícito
<a name="use-proxy-server-explicit-sample-squid-conf"></a>

 A continuación, se incluye un ejemplo de un archivo `squid.conf` configurado para un servidor proxy explícito. 

```
  acl localnet src 10.0.0.0/16 #Only allow requests from within the VPC
  # add all URLS to be whitelisted for download source and commands to be run in build environment
  acl allowed_sites dstdomain .github.com    #Allows to download source from github
  acl allowed_sites dstdomain .bitbucket.com #Allows to download source from bitbucket
  acl allowed_sites dstdomain ppa.launchpad.net #Allows to run apt-get in build environment
  acl download_src dstdom_regex .*\.amazonaws\.com #Allows to download source from S3 or CodeCommit
  acl SSL_ports port 443
  acl Safe_ports port 80		# http
  acl Safe_ports port 21		# ftp
  acl Safe_ports port 443		# https
  acl Safe_ports port 70		# gopher
  acl Safe_ports port 210		# wais
  acl Safe_ports port 1025-65535	# unregistered ports
  acl Safe_ports port 280		# http-mgmt
  acl Safe_ports port 488		# gss-http
  acl Safe_ports port 591		# filemaker
  acl Safe_ports port 777		# multiling http
  acl CONNECT method CONNECT
  #
  # Recommended minimum Access Permission configuration:
  #
  # Deny requests to certain unsafe ports
  http_access deny !Safe_ports
  # Deny CONNECT to other than secure SSL ports
  http_access deny CONNECT !SSL_ports
  # Only allow cachemgr access from localhost
  http_access allow localhost manager
  http_access deny manager
  # We strongly recommend the following be uncommented to protect innocent
  # web applications running on the proxy server who think the only
  # one who can access services on "localhost" is a local user
  #http_access deny to_localhost
  #
  # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
  #
  # Example rule allowing access from your local networks.
  # Adapt localnet in the ACL section to list your (internal) IP networks
  # from where browsing should be allowed
  http_access allow localnet allowed_sites
  http_access allow localnet download_src
  http_access allow localhost
  # Add this for CodeBuild to access CWL end point, caching and upload artifacts S3 bucket end point
  https_port 3130 cert=/etc/squid/ssl/squid.pem ssl-bump intercept
  acl SSL_port port 443
  http_access allow SSL_port
  acl allowed_https_sites ssl::server_name .amazonaws.com
  acl step1 at_step SslBump1
  acl step2 at_step SslBump2
  acl step3 at_step SslBump3
  ssl_bump peek step1 all
  ssl_bump peek step2 allowed_https_sites
  ssl_bump splice step3 allowed_https_sites
  ssl_bump terminate step2 all
  # And finally deny all other access to this proxy
  http_access deny all
  # Squid normally listens to port 3128
  http_port 3128
  # Uncomment and adjust the following to add a disk cache directory.
  #cache_dir ufs /var/spool/squid 100 16 256
  # Leave coredumps in the first cache dir
  coredump_dir /var/spool/squid
  #
  # Add any of your own refresh_pattern entries above these.
  #
  refresh_pattern ^ftp:		1440	20%	10080
  refresh_pattern ^gopher:	1440	0%	1440
  refresh_pattern -i (/cgi-bin/|\?) 0	0%	0
  refresh_pattern .		0	20%	4320
```

# Ejecute CodeBuild en un servidor proxy transparente
<a name="run-codebuild-in-transparent-proxy-server"></a>

 Para que funcione AWS CodeBuild en un servidor proxy transparente, debe configurar el servidor proxy para que pueda acceder a los sitios web y dominios con los que interactúa. 

**Topics**
+ [Configuración de Squid como un servidor proxy transparente](#use-proxy-server-transparent-squid-configure)
+ [Crea un proyecto CodeBuild](#use-proxy-server-transparent-create-acb-project)

## Configuración de Squid como un servidor proxy transparente
<a name="use-proxy-server-transparent-squid-configure"></a>

 Si desea configurar un servidor proxy para que sea transparente, debe concederle acceso a los dominios y sitios web que desee. Para funcionar AWS CodeBuild con un servidor proxy transparente, debe concederle acceso a`amazonaws.com`. También debes permitir el acceso a otros CodeBuild usos de sitios web. Estos varían en función de cómo cree sus CodeBuild proyectos. Algunos ejemplos de sitios web son los de repositorios como Bitbucket GitHub, Yum y Maven. Para conceder a Squid acceso a determinados dominios y sitios web, utilice un comando similar al siguiente para actualizar el archivo `squid.conf`. Este comando de ejemplo concede acceso a `amazonaws.com`, `github.com` y `bitbucket.com`. Puede editar este ejemplo para conceder acceso a otros sitios web. 

```
cat | sudo tee /etc/squid/squid.conf ≪EOF
visible_hostname squid
#Handling HTTP requests
http_port 3129 intercept
acl allowed_http_sites dstdomain .amazonaws.com
#acl allowed_http_sites dstdomain domain_name [uncomment this line to add another domain]
http_access allow allowed_http_sites
#Handling HTTPS requests
https_port 3130 cert=/etc/squid/ssl/squid.pem ssl-bump intercept
acl SSL_port port 443
http_access allow SSL_port
acl allowed_https_sites ssl::server_name .amazonaws.com
acl allowed_https_sites ssl::server_name .github.com
acl allowed_https_sites ssl::server_name .bitbucket.com
#acl allowed_https_sites ssl::server_name [uncomment this line to add another website]
acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl step3 at_step SslBump3
ssl_bump peek step1 all
ssl_bump peek step2 allowed_https_sites
ssl_bump splice step3 allowed_https_sites
ssl_bump terminate step2 all
http_access deny all
EOF
```

 Las solicitudes entrantes procedentes de las instancias de la subred privada deben redirigirse a los puertos de Squid. Squid escucha el tráfico HTTP en el puerto 3129 (en lugar de en el 80) y el tráfico HTTPS en el puerto 3130 (en lugar de en el 443). Utilice el comando **iptables** para direccionar el tráfico: 

```
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3129
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130
sudo service iptables save
sudo service squid start
```

## Crea un proyecto CodeBuild
<a name="use-proxy-server-transparent-create-acb-project"></a>

 Después de configurar el servidor proxy, puede usarlo AWS CodeBuild en una subred privada sin necesidad de realizar más configuraciones. Todas las solicitudes HTTP y HTTPS pasan por el servidor proxy público. Utilice el comando siguiente para ver el registro de acceso del proxy de Squid: 

```
sudo tail -f /var/log/squid/access.log
```

# Ejecución de un administrador de paquetes y otras herramientas en un servidor proxy
<a name="use-proxy-server-tools"></a>

Utilice los siguientes procedimientos para ejecutar un administrador de paquetes y otras herramientas en un servidor proxy.

**Para ejecutar una herramienta, como un administrador de paquetes, en un servidor proxy**

1.  Agregue la herramienta a la lista de permitidos en su servidor proxy agregando instrucciones en el archivo `squid.conf`. 

1.  Agregue una línea al archivo buildspec que apunte al punto de conexión privado del servidor proxy. 

 En los siguientes ejemplos, se muestra cómo hacerlo con `apt-get`, `curl` y `maven`. Si utiliza una herramienta diferente, se aplicarán los mismos principios. Añádelo a una lista de permitidos del `squid.conf` archivo y añade un comando al archivo buildspec para identificar el punto CodeBuild final del servidor proxy. 

**Para ejecutar `apt-get` en un servidor proxy**

1. Agregue las siguientes instrucciones en el archivo `squid.conf` para incluir `apt-get` en la lista de permitidos del servidor proxy. Las primeras tres líneas permiten que ejecutar `apt-get` en el entorno de compilación.

   ```
   acl allowed_sites dstdomain ppa.launchpad.net # Required for apt-get to run in the build environment
   acl apt_get dstdom_regex .*\.launchpad.net # Required for CodeBuild to run apt-get in the build environment
   acl apt_get dstdom_regex .*\.ubuntu.com    # Required for CodeBuild to run apt-get in the build environment
   http_access allow localnet allowed_sites
   http_access allow localnet apt_get
   ```

1. Agregue la siguiente instrucción en el archivo buildspec para que los comandos `apt-get` busquen la configuración del proxy en `/etc/apt/apt.conf.d/00proxy`.

   ```
   echo 'Acquire::http::Proxy "http://<private-ip-of-proxy-server>:3128"; Acquire::https::Proxy "http://<private-ip-of-proxy-server>:3128"; Acquire::ftp::Proxy "http://<private-ip-of-proxy-server>:3128";' > /etc/apt/apt.conf.d/00proxy
   ```

**Para ejecutar `curl` en un servidor proxy**

1.  Agregue lo siguiente al archivo `squid.conf` para incluir `curl` en la lista de permitidos del entorno de compilación. 

   ```
   acl allowed_sites dstdomain ppa.launchpad.net # Required to run apt-get in the build environment
   acl allowed_sites dstdomain google.com # Required for access to a webiste. This example uses www.google.com.
   http_access allow localnet allowed_sites
   http_access allow localnet apt_get
   ```

1.  Agregue la siguiente instrucción al archivo buildspec, de modo que `curl` utilice el servidor proxy privado para acceder al sitio web que agregó a `squid.conf`. En este ejemplo, el sitio web es `google.com`. 

   ```
   curl -x <private-ip-of-proxy-server>:3128 https://www.google.com
   ```

**Para ejecutar `maven` en un servidor proxy**

1.  Agregue lo siguiente al archivo `squid.conf` para incluir `maven` en la lista de permitidos del entorno de compilación. 

   ```
   acl allowed_sites dstdomain ppa.launchpad.net # Required to run apt-get in the build environment
   acl maven dstdom_regex .*\.maven.org # Allows access to the maven repository in the build environment
   http_access allow localnet allowed_sites
   http_access allow localnet maven
   ```

1. Agregue la siguiente instrucción al archivo buildspec. 

   ```
   maven clean install -DproxySet=true -DproxyHost=<private-ip-of-proxy-server> -DproxyPort=3128
   ```

# CloudFormationPlantilla de VPC de
<a name="cloudformation-vpc-template"></a>

CloudFormation le permite crear y aprovisionar implementaciones de infraestructura de AWS de manera predecible y repetida utilizando archivos de plantilla para crear y eliminar una colección de recursos como una única unidad (una *pila*). Para obtener más información, consulte la [Guía del usuario de CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

A continuación, se muestra una plantilla de YAML de CloudFormation para configurar una VPC que va a utilizar AWS CodeBuild. Este archivo también está disponible en [samples.zip](./samples/samples.zip).

```
Description:  This template deploys a VPC, with a pair of public and private subnets spread
  across two Availability Zones. It deploys an internet gateway, with a default
  route on the public subnets. It deploys a pair of NAT gateways (one in each AZ),
  and default routes for them in the private subnets.

Parameters:
  EnvironmentName:
    Description: An environment name that is prefixed to resource names
    Type: String

  VpcCIDR:
    Description: Please enter the IP range (CIDR notation) for this VPC
    Type: String
    Default: 10.192.0.0/16

  PublicSubnet1CIDR:
    Description: Please enter the IP range (CIDR notation) for the public subnet in the first Availability Zone
    Type: String
    Default: 10.192.10.0/24

  PublicSubnet2CIDR:
    Description: Please enter the IP range (CIDR notation) for the public subnet in the second Availability Zone
    Type: String
    Default: 10.192.11.0/24

  PrivateSubnet1CIDR:
    Description: Please enter the IP range (CIDR notation) for the private subnet in the first Availability Zone
    Type: String
    Default: 10.192.20.0/24

  PrivateSubnet2CIDR:
    Description: Please enter the IP range (CIDR notation) for the private subnet in the second Availability Zone
    Type: String
    Default: 10.192.21.0/24

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VpcCIDR
      EnableDnsSupport: true
      EnableDnsHostnames: true
      Tags:
        - Key: Name
          Value: !Ref EnvironmentName

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: !Ref EnvironmentName

  InternetGatewayAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      InternetGatewayId: !Ref InternetGateway
      VpcId: !Ref VPC

  PublicSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select [ 0, !GetAZs '' ]
      CidrBlock: !Ref PublicSubnet1CIDR
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName} Public Subnet (AZ1)

  PublicSubnet2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select [ 1, !GetAZs  '' ]
      CidrBlock: !Ref PublicSubnet2CIDR
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName} Public Subnet (AZ2)

  PrivateSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select [ 0, !GetAZs  '' ]
      CidrBlock: !Ref PrivateSubnet1CIDR
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName} Private Subnet (AZ1)

  PrivateSubnet2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select [ 1, !GetAZs  '' ]
      CidrBlock: !Ref PrivateSubnet2CIDR
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName} Private Subnet (AZ2)

  NatGateway1EIP:
    Type: AWS::EC2::EIP
    DependsOn: InternetGatewayAttachment
    Properties:
      Domain: vpc

  NatGateway2EIP:
    Type: AWS::EC2::EIP
    DependsOn: InternetGatewayAttachment
    Properties:
      Domain: vpc

  NatGateway1:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt NatGateway1EIP.AllocationId
      SubnetId: !Ref PublicSubnet1

  NatGateway2:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt NatGateway2EIP.AllocationId
      SubnetId: !Ref PublicSubnet2

  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName} Public Routes

  DefaultPublicRoute:
    Type: AWS::EC2::Route
    DependsOn: InternetGatewayAttachment
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway

  PublicSubnet1RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref PublicRouteTable
      SubnetId: !Ref PublicSubnet1

  PublicSubnet2RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref PublicRouteTable
      SubnetId: !Ref PublicSubnet2


  PrivateRouteTable1:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName} Private Routes (AZ1)

  DefaultPrivateRoute1:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PrivateRouteTable1
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId: !Ref NatGateway1

  PrivateSubnet1RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref PrivateRouteTable1
      SubnetId: !Ref PrivateSubnet1

  PrivateRouteTable2:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName} Private Routes (AZ2)

  DefaultPrivateRoute2:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PrivateRouteTable2
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId: !Ref NatGateway2

  PrivateSubnet2RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref PrivateRouteTable2
      SubnetId: !Ref PrivateSubnet2

  NoIngressSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: "no-ingress-sg"
      GroupDescription: "Security group with no ingress rule"
      VpcId: !Ref VPC

Outputs:
  VPC:
    Description: A reference to the created VPC
    Value: !Ref VPC

  PublicSubnets:
    Description: A list of the public subnets
    Value: !Join [ ",", [ !Ref PublicSubnet1, !Ref PublicSubnet2 ]]

  PrivateSubnets:
    Description: A list of the private subnets
    Value: !Join [ ",", [ !Ref PrivateSubnet1, !Ref PrivateSubnet2 ]]

  PublicSubnet1:
    Description: A reference to the public subnet in the 1st Availability Zone
    Value: !Ref PublicSubnet1

  PublicSubnet2:
    Description: A reference to the public subnet in the 2nd Availability Zone
    Value: !Ref PublicSubnet2

  PrivateSubnet1:
    Description: A reference to the private subnet in the 1st Availability Zone
    Value: !Ref PrivateSubnet1

  PrivateSubnet2:
    Description: A reference to the private subnet in the 2nd Availability Zone
    Value: !Ref PrivateSubnet2

  NoIngressSecurityGroup:
    Description: Security group with no ingress rule
    Value: !Ref NoIngressSecurityGroup
```