<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Javier Terán González</title>
    <description>The latest articles on Forem by Javier Terán González (@javiteran).</description>
    <link>https://forem.com/javiteran</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F918095%2F17bda05d-42f2-45eb-926a-05b2a3230c4c.jpeg</url>
      <title>Forem: Javier Terán González</title>
      <link>https://forem.com/javiteran</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/javiteran"/>
    <language>en</language>
    <item>
      <title>AWS CloudFormation Introducción. 1. VPC IPv4/IPv6. IaC. AWS Academy.</title>
      <dc:creator>Javier Terán González</dc:creator>
      <pubDate>Sat, 01 Feb 2025 19:06:18 +0000</pubDate>
      <link>https://forem.com/aws-builders/aws-cloudformation-introduccion-1-vpc-ipv4ipv6-iac-aws-academy-5fg2</link>
      <guid>https://forem.com/aws-builders/aws-cloudformation-introduccion-1-vpc-ipv4ipv6-iac-aws-academy-5fg2</guid>
      <description>&lt;p&gt;He comenzado una seria de vídeos sobre AWS CloudFormation en los que intentaré reflejar la potencia que tiene este servicio para automatizar la creación de entornos. &lt;br&gt;
En mi caso también es muy potente para la creación de tareas, pruebas y exámenes para mis alumnos utilizando la plataforma de AWS Academy.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ucQQ7mo-g3Y"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Ya entiendo que actualmente todo el mundo está con Terraform, CDK, pulumi o yo que se. Pero CloudFormation se puede utilizar directamente en nuestra consola de un Learning Lab utilizando git y aws-cli de forma muy sencilla. Y eso me ha gustado mucho. (Ya lo mostraré en otro vídeo).&lt;/p&gt;

&lt;h2&gt;
  
  
  Funciones utilizadas y para que sirven
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ii9byofoo54gyu0n8w2.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ii9byofoo54gyu0n8w2.PNG" alt="Funciones utilizadas y para que sirven" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub
&lt;/h2&gt;

&lt;p&gt;Si quieres ver el código que voy haciendo sobre el tema en GitHub:&lt;br&gt;
&lt;a href="https://github.com/javiteran/AWS_CloudFormation/" rel="noopener noreferrer"&gt;https://github.com/javiteran/AWS_CloudFormation/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas recursos recomendables
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://catalog.workshops.aws/cfn101/" rel="noopener noreferrer"&gt;AWS CloudFormation Workshop&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Recursos utilizados en la creación de una VPC
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    Type: AWS::EC2::VPC
    Type: AWS::EC2::VPCCidrBlock
    Type: AWS::EC2::Subnet
    Type: AWS::EC2::InternetGateway
    Type: AWS::EC2::VPCGatewayAttachment
    Type: AWS::EC2::RouteTable
    Type: AWS::EC2::Route
    Type: AWS::EC2::SubnetRouteTableAssociation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Código del ejemplo del vídeo.
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWSTemplateFormatVersion: '2010-09-09'
Description: &amp;gt;
    Creacion de una VPC, 4 subredes publicas y privadas, internet gateway y tabla de rutas con IPv4 e IPv6
    Autor: Javier Teran Gonzalez. https://www.youtube.com/javiteran
    Fecha creacion:     30/01/2025
    Version: 1.00

#Parametros del proyecto. No son obligatorios
Parameters:
    NombreProyecto:
        Description: 'Nombre del proyecto'
        Type: String
        Default: 'SRI24'         
    NN:
        Type: Number
        Description: 'Numero de alumno'
        Default: 15
        ConstraintDescription: 'Debe estar en el rango del [1-50]'
        MinValue: 1
        MaxValue: 50

#Recursos del proyecto        
Resources:
    VPC:
        Type: AWS::EC2::VPC
        Properties:
            CidrBlock: 10.24.0.0/16
            EnableDnsHostnames: true
            EnableDnsSupport: true
            Tags:
                -   Key: Name
                    Value: !Sub '${NombreProyecto}${NN}-vpc'
    IPv6CidrBlock:
        Type: AWS::EC2::VPCCidrBlock
        Properties:
            VpcId: !Ref VPC
            AmazonProvidedIpv6CidrBlock: true

    # SubRedes publicas
    SubredPublica1:
        Type: AWS::EC2::Subnet
        Properties:
            VpcId: !Ref VPC
            CidrBlock: !Sub '10.24.1${NN}.0/25'
            Ipv6CidrBlock:  !Select [1, !Cidr [!Select [0, !GetAtt 'VPC.Ipv6CidrBlocks'], 256, 64]]
            #Ipv6CidrBlock: !GetAtt 'VPC.Ipv6CidrBlocks.0'
            AssignIpv6AddressOnCreation: true
            AvailabilityZone: !Select [ 0, !GetAZs '' ]
            Tags:
                -   Key: Name
                    Value: !Sub '${NombreProyecto}${NN}-SubredPublica1'

    SubredPublica2:
        Type: AWS::EC2::Subnet
        Properties:
            VpcId: !Ref VPC
            CidrBlock: !Sub '10.24.1${NN}.128/25'
            Ipv6CidrBlock:  !Select [2, !Cidr [!Select [0, !GetAtt 'VPC.Ipv6CidrBlocks'], 256, 64]]
            AssignIpv6AddressOnCreation: true
            AvailabilityZone: !Select [ 1, !GetAZs '' ]
            Tags:
                -   Key: Name
                    Value: !Sub '${NombreProyecto}${NN}-SubredPublica2'

    # SubRedes privadas

    SubredPrivada1:
        Type: AWS::EC2::Subnet
        Properties:
            VpcId: !Ref VPC
            CidrBlock: !Sub '10.24.2${NN}.0/25'
            Ipv6CidrBlock:  !Select [3, !Cidr [!Select [0, !GetAtt 'VPC.Ipv6CidrBlocks'], 256, 64]]
            AssignIpv6AddressOnCreation: true
            AvailabilityZone: !Select [ 0, !GetAZs '' ]
            Tags:
                -   Key: Name
                    Value: !Sub '${NombreProyecto}${NN}-SubredPrivada1'

    SubredPrivada2:
        Type: AWS::EC2::Subnet
        Properties:
            VpcId: !Ref VPC
            CidrBlock: !Sub '10.24.2${NN}.128/25'
            Ipv6CidrBlock:  !Select [4, !Cidr [!Select [0, !GetAtt 'VPC.Ipv6CidrBlocks'], 256, 64]]
            AssignIpv6AddressOnCreation: true
            AvailabilityZone: !Select [ 1, !GetAZs '' ]
            Tags:
                -   Key: Name
                    Value: !Sub '${NombreProyecto}${NN}-SubredPrivada2'

    # Internet Gateway y EgressOnlyInternetGateway
    InternetGateway:
        Type: AWS::EC2::InternetGateway
        Properties:
            Tags:
                -   Key: Name
                    Value: !Sub '${NombreProyecto}${NN}-igw'

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

    # Tabla de rutas publica
    TablaRutasPublica:
        Type: AWS::EC2::RouteTable
        Properties:
            VpcId: !Ref VPC
            Tags:
                -   Key: Name
                    Value: !Sub '${NombreProyecto}${NN}-rtb-publica'

    # Tablas de rutas privadas
    TablaRutasPrivada1:
        Type: AWS::EC2::RouteTable
        Properties:
            VpcId: !Ref VPC
            Tags:
                -   Key: "Name"
                    Value: !Sub '${NombreProyecto}${NN}-rtb-privada1'

    TablaRutasPrivada2:
        Type: AWS::EC2::RouteTable
        Properties:
            VpcId: !Ref VPC
            Tags:
                -   Key: "Name"
                    Value: !Sub '${NombreProyecto}${NN}-rtb-privada2'

    # Rutas por defecto para la tabla de rutas publica. Tanto IPv4 como IPv6
    DefaultRouteIPv4:
        Type: AWS::EC2::Route
        DependsOn: VPCGatewayAttachment
        Properties:
            RouteTableId: !Ref TablaRutasPublica
            DestinationCidrBlock: 0.0.0.0/0
            GatewayId: !Ref InternetGateway

    DefaultRouteIPv6:
        Type: AWS::EC2::Route
        DependsOn: VPCGatewayAttachment
        Properties:
            RouteTableId: !Ref TablaRutasPublica
            DestinationIpv6CidrBlock: ::/0
            GatewayId: !Ref InternetGateway

    # Asociacion de subredes publicas con tabla de rutas
    SubnetRouteTableAssociation1:
        Type: AWS::EC2::SubnetRouteTableAssociation
        Properties:
            SubnetId: !Ref SubredPublica1
            RouteTableId: !Ref TablaRutasPublica

    SubnetRouteTableAssociation2:
        Type: AWS::EC2::SubnetRouteTableAssociation
        Properties:
            SubnetId: !Ref SubredPublica2
            RouteTableId: !Ref TablaRutasPublica

    # Asociacion de subredes privadas con sus tablas de rutas
    SubnetRouteTableAssociation3:
        Type: AWS::EC2::SubnetRouteTableAssociation
        Properties:
            SubnetId: !Ref SubredPrivada1
            RouteTableId: !Ref TablaRutasPrivada1

    SubnetRouteTableAssociation4:
        Type: AWS::EC2::SubnetRouteTableAssociation
        Properties:
            SubnetId: !Ref SubredPrivada2
            RouteTableId: !Ref TablaRutasPrivada2

Outputs:
    Proyecto:
        Description: Nombre del proyecto
        Value: !Sub '${NombreProyecto}${NN}'
        Export:
            Name:  "Proyecto"
    VPCId:
        Description: "VPC ID"
        Value: !Ref VPC
        Export:
            Name: "MiVPCID"  
    SubredPublica1Id:
        Description: "SubredPublica1 ID"
        Value: !Ref SubredPublica1
    SubredPublica2Id:
        Description: "SubredPublica2 ID"
        Value: !Ref SubredPublica2
    SubredPrivada1Id:
        Description: "SubredPrivada1 ID"
        Value: !Ref SubredPrivada1
        Export:
            Name: "MiSubredPrivada1ID"  # Exporta el ID de la SubredPrivada1
    SubredPrivada2Id:
        Description: "SubredPrivada2 ID"
        Value: !Ref SubredPrivada2
        Export:
            Name: "MiSubredPrivada2ID"  # Exporta el ID de la SubredPrivada2
# Se utilizan los export para poder importar el ID de la VPC en otro stack/pila que quieras ejecutar después de esta pila.
# Ej: En la plantilla destino utilizar ---&amp;gt;   VpcId: !ImportValue MiVPCID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;@AWS_Edu&lt;/p&gt;

&lt;p&gt;Espero que os sirva. Un saludo.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Microsoft Visio. 03. Diagrama de red en AWS</title>
      <dc:creator>Javier Terán González</dc:creator>
      <pubDate>Sat, 11 Nov 2023 20:41:58 +0000</pubDate>
      <link>https://forem.com/aws-builders/microsoft-visio-03-diagrama-de-red-en-aws-ece</link>
      <guid>https://forem.com/aws-builders/microsoft-visio-03-diagrama-de-red-en-aws-ece</guid>
      <description>&lt;p&gt;Si queremos seguir las buenas prácticas generando diagramas de red o de aplicaciones en AWS podemos utilizar la herramienta Microsoft Visio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creación de diagramas AWS en youtube
&lt;/h2&gt;

&lt;p&gt;Muestro en el siguiente vídeo una pequeña introducción de como obtener las formas/iconos necesarios para poder hacer un diagrama fácilmente.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/b8oCvVddaJI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Architecture Icons:
&lt;/h2&gt;

&lt;p&gt;Aquí están los iconos, recomendaciones y una presentación proporcionada por AWS para realizar sus diagramas.&lt;br&gt;
&lt;a href="https://aws.amazon.com/es/architecture/icons/" rel="noopener noreferrer"&gt;https://aws.amazon.com/es/architecture/icons/&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Ejemplos de diagramas de red en AWS:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://d1.awsstatic.com/architecture-diagrams/ArchitectureDiagrams/IPv6-reference-architectures-for-AWS-and-hybrid-networks-ra.pdf?did=wp_card&amp;amp;trk=wp_card" rel="noopener noreferrer"&gt;Dual Stack and IPv6-only Amazon VPC Reference Architectures&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://aws.amazon.com/es/blogs/networking-and-content-delivery/dual-stack-ipv6-architectures-for-aws-and-hybrid-networks/" rel="noopener noreferrer"&gt;Dual-stack IPv6 architectures for AWS and hybrid networks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://d1.awsstatic.com/architecture-diagrams/ArchitectureDiagrams/web-application-architecture-on-aws-ra.pdf?did=wp_card&amp;amp;trk=wp_card" rel="noopener noreferrer"&gt;Web Application Architecture on AWS&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Espero que os resulte interesante.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>CantabriaSkills2023 Cloud y AWS Jam</title>
      <dc:creator>Javier Terán González</dc:creator>
      <pubDate>Tue, 16 May 2023 10:36:34 +0000</pubDate>
      <link>https://forem.com/aws-builders/cantabriaskills2023-cloud-y-aws-jam-1o3k</link>
      <guid>https://forem.com/aws-builders/cantabriaskills2023-cloud-y-aws-jam-1o3k</guid>
      <description>&lt;p&gt;Se ha celebrado en &lt;strong&gt;#CantabriaSkills2023&lt;/strong&gt; la primera &lt;strong&gt;Skill de Cloud&lt;/strong&gt; de nuestra comunidad.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Few1orojt7jz9pcvoajqh.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Few1orojt7jz9pcvoajqh.PNG" alt="CantabriaSkills2023" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Participaron en la prueba 12 estudiantes de Informática de Formación Profesional de los CFGM de SMR, CFGS de ASIR, CFGS de DAM y CFGS de DAW del &lt;strong&gt;&lt;a href="https://www.educantabria.es/web/ies-alisal" rel="noopener noreferrer"&gt;IES Alisal&lt;/a&gt;, IES Augusto González de Linares e IES Ataulfo Argenta&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ AWS Jam
&lt;/h2&gt;

&lt;p&gt;Han tenido que resolver 12 retos reales en la nube de AWS (Amazon Web Services) utilizando para ello una plataforma llamada AWS JAM &lt;a href="https://jam.awsevents.com/" rel="noopener noreferrer"&gt;https://jam.awsevents.com/&lt;/a&gt; . Es una plataforma de "juegos" maravillosa para realizar este tipo de prueba. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Los jurados estamos encantados con ella.&lt;/li&gt;
&lt;li&gt;A los estudiantes les ha entusiasmado, enganchado y han aprendido mucho con ella.&lt;/li&gt;
&lt;li&gt;También ha sido genial para las personas que han visitado las pruebas ya que mostraba en tiempo real la clasificación y mucha mas información de todo el progreso.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjv9h9fv5ks2uaqsbrduw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjv9h9fv5ks2uaqsbrduw.png" alt="Retos" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Formación
&lt;/h2&gt;

&lt;p&gt;Los participantes se han formado utilizando: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/es/training/awsacademy/" rel="noopener noreferrer"&gt;AWS Academy &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://explore.skillbuilder.aws/learn" rel="noopener noreferrer"&gt;AWS Skill Builder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/es/training/digital/aws-cloud-quest/" rel="noopener noreferrer"&gt;AWS Cloud Quest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Otros. ;-)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Retos
&lt;/h2&gt;

&lt;p&gt;El AWS JAM ha constado de 12 retos con dos grados de dificultad (Inicial y Medio).&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hwyu8somoavjzsdcklc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hwyu8somoavjzsdcklc.png" alt="Desafios" width="800" height="591"&gt;&lt;/a&gt;&lt;br&gt;
 La prueba empezó a las 10:00 horas, hubo un descanso de dos horas para comer y a las 15:00 horas se continuó hasta las 19:00 horas. Así que la competición duró 7 horas. &lt;/p&gt;

&lt;p&gt;Estoy muy orgulloso de cómo han trabajado los participantes en la prueba. Fueron 7 horas de trabajo sin descanso, 7 horas de concentración absoluta para intentar sacar adelante el mayor número de retos y con un comportamiento ejemplar en la prueba. Les dí la enhorabuena y las gracias por su genial participación, actitud y entusiasmo. Estoy encantado por ello.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffax25zldq0rgighfc1zb.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffax25zldq0rgighfc1zb.PNG" alt="Seguimiento1" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26foadx7i8fzelqc194y.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26foadx7i8fzelqc194y.PNG" alt="Seguimiento2" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Clasificación
&lt;/h2&gt;

&lt;p&gt;Como se ve en la clasificación final, la competición ha tenido un nivel muy alto. El alumnado ha demostrado un alto conocimiento de la plataforma de AWS y han realizado la mayoría de los retos. &lt;br&gt;
La competición estuvo muy reñida y se utilizó hasta el último segundo para completar la clasificación final.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Enhorabuena especial a Sergio, Asier e Irving como primeros clasificados.&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy25636lexf3g1w5cfore.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy25636lexf3g1w5cfore.PNG" alt="ClasificacionFinal" width="800" height="659"&gt;&lt;/a&gt;&lt;br&gt;
Esperemos que el año que viene se celebre Spains Skill Cloud y Sergio pueda ir a "defender" a nuestra pequeña Comunidad Autónoma de Cantabria.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Agradecimientos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Gracias a la organización de CantabriaSkills2023 por permitirme iniciar los trámites para realizar por primera vez esta prueba.&lt;/li&gt;
&lt;li&gt;Muchas gracias a las compañeras Ángela del Barrio, Estíbaliz Martínez y al compañero David Rodríguez que han participado en el jurado conmigo.&lt;/li&gt;
&lt;li&gt;Gracias especiales a Iñaki Bilbao por dar pasos de gigante para que pudiésemos tener el AWS JAM y a Mike Erickson por la configuración final del JAM y por su soporte. Sin ellos no hubiese sido posible.&lt;/li&gt;
&lt;li&gt;También tengo que dar las gracias a compañeros docentes de la Comunidad de Aragón, Comunidad Valenciana y Comunidad del País Vasco. &lt;/li&gt;
&lt;li&gt;Seguro que se me olvida alguien en esta lista. :-(&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⁉️ Siguiente Objetivo
&lt;/h2&gt;

&lt;p&gt;Entre todos y con Iñaki estamos intentando que haya Spain Skill Cloud. Je, ahora mismo no se si hemos completado todos los pasos para conseguirlo.&lt;/p&gt;

&lt;h2&gt;
  
  
  💥 🌞 💯 Conclusión
&lt;/h2&gt;

&lt;p&gt;En definitiva. Fue una jornada genial en la que cumplimos, con creces, todo lo esperado para ese día. ✅&lt;/p&gt;

&lt;p&gt;-- #fp #aws #skills #challenges #jam #awsjam #Innovacion&lt;/p&gt;

</description>
      <category>functional</category>
      <category>cantabriaskills2023</category>
      <category>awsjam</category>
      <category>retos</category>
    </item>
    <item>
      <title>Una historia navideña de AWS Community Builders</title>
      <dc:creator>Javier Terán González</dc:creator>
      <pubDate>Tue, 20 Dec 2022 11:31:48 +0000</pubDate>
      <link>https://forem.com/aws-builders/una-historia-navidena-de-aws-community-builders-1229</link>
      <guid>https://forem.com/aws-builders/una-historia-navidena-de-aws-community-builders-1229</guid>
      <description>&lt;h1&gt;
  
  
  AWS Community Builders Holidays posts 2022
&lt;/h1&gt;

&lt;p&gt;🎄 Una historia navideña de AWS Community Builders, esta es la edición de Javier Terán, consulte las otras publicaciones de mis compañeros AWS Community Builders sobre por qué les encanta el programa y aprenda más sobre ellos también.🎄&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿Qué es lo que más te sorprende del programa Community Builders?
&lt;/h1&gt;

&lt;p&gt;Me sorprende la pasión de todos los componentes del grupo y el alto nivel de conocimientos que ponen a disposición de toda la comunidad. Muchos de ellos están implicados en eventos de todo tipo en cualquier lugar del mundo.&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿Cuál es su experiencia con AWS?
&lt;/h1&gt;

&lt;p&gt;Mi experiencia en AWS se centra en enseñar contenidos en la nube en mis clases de Ciclos Formativos de Grado Superior en el Administración de Sistemas Informáticos en Red. Intento que mis alumnos estén al día sobre nuevas tecnologías y que cuando lleguen al mundo empresarial tengas los suficientes conocimientos para integrarse en cualquier equipo.&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿Cuál es el mayor beneficio que ve del programa?
&lt;/h1&gt;

&lt;p&gt;El ver este intercambio de información entre todos, conocer gente muy implicada y la auto-presión por intentar estar a la altura y compartir tus conocimientos dentro de tus pequeñas posibilidades.&lt;/p&gt;

&lt;p&gt;¿Cuál es el próximo artículo de recompensa que te gustaría obtener?&lt;br&gt;
Una mochila de Community Builders o una chaqueta de montaña de Community Builders&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿Qué vas a cenar hoy? ¡Comparte la receta!
&lt;/h1&gt;

&lt;p&gt;🍞 Tostadas de pan que hará mi madre. Un dulce muy rico bañado en huevo, almíbar y el resto de la receta no lo conozco. 😃&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿Hay algo más que le gustaría decir sobre el programa Community Builders en 2022?
&lt;/h1&gt;

&lt;p&gt;Estoy encantado por haber sido admitido en este programa ✨. Me ayuda a conocer como funcionan todos los servicios de AWS en aplicaciones reales. También me está permitiendo conocer gente con la que colaborar.&lt;br&gt;
Agradecer a todo el equipo de AWS esta oportunidad y desearles unas Felices Navidades.. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;😀 Escribo en Español por si puede ayudar a alguien a conocer esta magnífica comunidad. Espero que eso no sea un problema para el resto de participantes del programa.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cbchristmas2022</category>
      <category>awscommunity</category>
    </item>
    <item>
      <title>AWS Academy. Tarea en Learning Lab con AWS Cli</title>
      <dc:creator>Javier Terán González</dc:creator>
      <pubDate>Sun, 11 Dec 2022 09:11:56 +0000</pubDate>
      <link>https://forem.com/aws-builders/aws-academy-tarea-en-learning-lab-con-aws-cli-14hj</link>
      <guid>https://forem.com/aws-builders/aws-academy-tarea-en-learning-lab-con-aws-cli-14hj</guid>
      <description>&lt;h2&gt;
  
  
  💫 Tareas en AWS Academy con AWS CLI
&lt;/h2&gt;

&lt;p&gt;Cuando utilizamos AWS Academy y su Learner Lab puede interesarnos personalizar el entorno de los alumnos.&lt;/p&gt;

&lt;p&gt;Muestro una posible solución de automatización de la creación de entornos de tareas/pruebas con AWS CLI.&lt;/p&gt;

&lt;p&gt;Es una propuesta inicial que puede servir como idea, para todos los profesores, de generación de laboratorios y tareas que se puedan compartir y usar entre todos nosotros.&lt;/p&gt;

&lt;p&gt;Simplemente se utiliza AWS Cli y GitHub como repositorio de los scripts.&lt;/p&gt;

&lt;p&gt;Este es mi primer artículo en esta comunidad y quizás no es de un nivel muy avanzado. Pero para mi si ha sido bastante complicado.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ Referencia de comandos AWS CLI
&lt;/h2&gt;

&lt;p&gt;En este repositorio, Amazon, nos proporciona muchos ejemplos del Cli de AWS para lanzar casi todos sus servicios&lt;/p&gt;

&lt;p&gt;&lt;a href="https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/index.html#cli-aws-ec2" rel="noopener noreferrer"&gt;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/index.html#cli-aws-ec2&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ Mi repositorio javiteran/AWS_Cli
&lt;/h2&gt;

&lt;p&gt;Aquí está el código que he utilizado para lanzar el laboratorio y todas sus configuraciones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/javiteran/AWS_Cli" rel="noopener noreferrer"&gt;https://github.com/javiteran/AWS_Cli&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Acceso a la grabación de prueba del entorno:
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/zdevHbajB2s"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  💥 Consola de configuración del entorno en el Learner Lab
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fliv3iter9nfe8p9agidz.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fliv3iter9nfe8p9agidz.PNG" alt="Consola configuración entorno LearnerLab.PNG" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔨 Creación de entorno de tareas 00AWSLab01.sh
&lt;/h2&gt;

&lt;p&gt;Para lanzar un ejemplo de laboratorio se puede hacer lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/javiteran/AWS_Cli.git
cd AWS_Cli
sh 00AWSLab01.sh 21 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este script creará:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Una VPC.&lt;/li&gt;
&lt;li&gt;Una subred pública.&lt;/li&gt;
&lt;li&gt;Una puerta de enlace de internet.&lt;/li&gt;
&lt;li&gt;La tabla de enrutamiento de la subred para permitir conectarse a internet.&lt;/li&gt;
&lt;li&gt;Un grupo de seguridad para Ubuntu y otro para Windows.&lt;/li&gt;
&lt;li&gt;Se abrirán los puertos 80, 22 y 3389 para Ubuntu y Windows respectivamente. (y el 53 para DNS como práctica inicial).&lt;/li&gt;
&lt;li&gt;Se permitirá todo el tráfico entre las instancias de la VPC.&lt;/li&gt;
&lt;li&gt;Una instancia EC2 con Windows Server 2022.&lt;/li&gt;
&lt;li&gt;Una instancia EC2 con Ubuntu Server 22.04.&lt;/li&gt;
&lt;li&gt;En Ubuntu y Windows se instalarán servicios y roles como DNS para probar la instalación en la creación.&lt;/li&gt;
&lt;li&gt;Direcciones IPs públicas para las instancias EC2.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🕐Salida de la ejecución del comando
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs85k742o8p2lnyk38g3k.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs85k742o8p2lnyk38g3k.PNG" alt="Ejecución del comando" width="800" height="990"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅Consola con los servicios instalados
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm5ldug0wcgmv3r2ytb9d.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm5ldug0wcgmv3r2ytb9d.PNG" alt="Instancia EC2 creada" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi040iza1nrta0iaycgit.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi040iza1nrta0iaycgit.PNG" alt="Grupos de seguridad" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Código
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###############################################################################
#       Creación de una VPC, subredes, 
#       internet gateway y tabla de rutas
#      Además creará :
#            - una instancia EC2 Ubuntu Server 22.04
#            - una instancia EC2 Windows Server 2022
#      con IPs elásticas
#      en AWS con AWS CLI
#
# Utilizado para AWS Academy Learning Lab
#
# Autor: Javier Terán González
# Fecha: 06/12/2022
###############################################################################
## Tratamiento de variables de entrada

# Error si el número de parámetros menor o igual que 0
if [ $# -le 0 ]; then
    echo "Hay que introducir el número de alumno NN. (Entre 01 y 99)."
    exit 1
fi
# Error si el parámetro no está entre 01 y 99
if  [ "$1" -gt 0 ] &amp;amp;&amp;amp; [ "$1" -le 99 ]; then
    echo "Correcto. Es un número"
else
    echo "Hay que introducir el número de alumno NN. (Entre 01 y 99)." 
    exit 1
fi
#echo "Hola $@!"
NN=$1
echo "Alumno: " $NN;
###############################################################################
AWS_VPC_CIDR_BLOCK=10.22.0.0/16
AWS_Subred_CIDR_BLOCK=10.22.1$NN.0/24
AWS_IP_UbuntuServer=10.22.1$NN.100
AWS_IP_WindowsServer=10.22.1$NN.200
AWS_Proyecto=SRI$NN

echo "######################################################################"
echo "Creación de una VPC, subredes, internet gateway y tabla de rutas."
echo "Además creará una instancia EC2 Ubuntu Server 22.04 y una instancia EC2 Windows Server 2022 con IPs elásticas en AWS con AWS CLI"
echo "Se van a crear con los siguientes valores:"
echo "Alumno:                " $NN
echo "AWS_VPC_CIDR_BLOCK:    " $AWS_VPC_CIDR_BLOCK
echo "AWS_Subred_CIDR_BLOCK: " $AWS_Subred_CIDR_BLOCK
echo "AWS_IP_UbuntuServer:   " $AWS_IP_UbuntuServer
echo "AWS_IP_WindowsServer:  " $AWS_IP_WindowsServer
echo "AWS_Proyecto:          " $AWS_Proyecto
echo "######################################################################"
###############################################################################
## Crear una VPC (Virtual Private Cloud) con su etiqueta
## La VPC tendrá un bloque IPv4 proporcionado por el usuario y uno IPv6 de AWS ???
echo "############## Crear VPC, Subred, Rutas, Gateway #####################"
echo "######################################################################"
echo "Creando VPC..."

AWS_ID_VPC=$(aws ec2 create-vpc \
  --cidr-block $AWS_VPC_CIDR_BLOCK \
  --amazon-provided-ipv6-cidr-block \
  --tag-specification ResourceType=vpc,Tags=[{Key=Name,Value=$AWS_Proyecto-vpc}] \
  --query 'Vpc.{VpcId:VpcId}' \
  --output text)

## Habilitar los nombres DNS para la VPC
aws ec2 modify-vpc-attribute \
  --vpc-id $AWS_ID_VPC \
  --enable-dns-hostnames "{\"Value\":true}"

## Crear una subred publica con su etiqueta
echo "Creando Subred..."
AWS_ID_SubredPublica=$(aws ec2 create-subnet \
  --vpc-id $AWS_ID_VPC --cidr-block $AWS_Subred_CIDR_BLOCK \
  --availability-zone us-east-1a \
  --tag-specifications ResourceType=subnet,Tags=[{Key=Name,Value=$AWS_Proyecto-subred-publica}] \
  --query 'Subnet.{SubnetId:SubnetId}' \
  --output text)

## Habilitar la asignación automática de IPs públicas en la subred pública
aws ec2 modify-subnet-attribute \
  --subnet-id $AWS_ID_SubredPublica \
  --map-public-ip-on-launch

## Crear un Internet Gateway (Puerta de enlace) con su etiqueta
echo "Creando Internet Gateway..."
AWS_ID_InternetGateway=$(aws ec2 create-internet-gateway \
  --tag-specifications ResourceType=internet-gateway,Tags=[{Key=Name,Value=$AWS_Proyecto-igw}] \
  --query 'InternetGateway.{InternetGatewayId:InternetGatewayId}' \
  --output text)

## Asignar el Internet gateway a la VPC
aws ec2 attach-internet-gateway \
--vpc-id $AWS_ID_VPC \
--internet-gateway-id $AWS_ID_InternetGateway

## Crear una tabla de rutas
echo "Creando tabla de rutas..."
AWS_ID_TablaRutas=$(aws ec2 create-route-table \
--vpc-id $AWS_ID_VPC \
--query 'RouteTable.{RouteTableId:RouteTableId}' \
--output text )

## Crear la ruta por defecto a la puerta de enlace IPv4 (Internet Gateway)
echo "     Ruta por defecto IPv4 0.0.0.0/0..."
aws ec2 create-route \
  --route-table-id $AWS_ID_TablaRutas \
  --destination-cidr-block 0.0.0.0/0 \
  --gateway-id $AWS_ID_InternetGateway

## Crear la ruta por defecto a la puerta de enlace IPv4 (Internet Gateway)
echo "     Ruta por defecto IPv6 ::/0..."
aws ec2 create-route --route-table-id  $AWS_ID_TablaRutas \
  --destination-ipv6-cidr-block ::/0 \
  --gateway-id $AWS_ID_InternetGateway

## Asociar la subred pública con la tabla de rutas
AWS_ROUTE_TABLE_ASSOID=$(aws ec2 associate-route-table  \
  --subnet-id $AWS_ID_SubredPublica \
  --route-table-id $AWS_ID_TablaRutas \
  --output text)

## Añadir etiqueta a la ruta por defecto
AWS_DEFAULT_ROUTE_TABLE_ID=$(aws ec2 describe-route-tables \
  --filters "Name=vpc-id,Values=$AWS_ID_VPC" \
  --query 'RouteTables[?Associations[0].Main != `flase`].RouteTableId' \
  --output text) &amp;amp;&amp;amp;
aws ec2 create-tags \
--resources $AWS_DEFAULT_ROUTE_TABLE_ID \
--tags "Key=Name,Value=$AWS_Proyecto ruta por defecto"

## Añadir etiquetas a la tabla de rutas
aws ec2 create-tags \
--resources $AWS_ID_TablaRutas \
--tags "Key=Name,Value=$AWS_Proyecto-rtb-public"


###############################################################################
###############################################################################
###############################################################################
####################       UBUNTU SERVER     ##################################
###############################################################################
###############################################################################
###############################################################################
## Crear un grupo de seguridad Ubuntu Server
echo "########################### Ubuntu Server ############################"
echo "######################################################################"
echo "Creando grupo de seguridad Ubuntu Server..."
AWS_ID_GrupoSeguridad_Ubuntu=$(aws ec2 create-security-group \
  --vpc-id $AWS_ID_VPC \
  --group-name $AWS_Proyecto-us-sg \
  --description "$AWS_Proyecto-us-sg" \
  --output text)

echo "ID Grupo de seguridad de ubuntu: " $AWS_ID_GrupoSeguridad_Ubuntu

echo "Añadiendo reglas de seguridad al grupo de seguridad Ubuntu Server..."
## Abrir los puertos de acceso a la instancia
aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Ubuntu \
  --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow SSH"}]}]'

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Ubuntu \
  --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow HTTP"}]}]'

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Ubuntu \
  --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 53, "ToPort": 53, "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow DNS(TCP)"}]}]'

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Ubuntu \
  --ip-permissions '[{"IpProtocol": "UDP", "FromPort": 53, "ToPort": 53, "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow DNS(UDP)"}]}]'

## Añadirle etiqueta al grupo de seguridad
echo "Añadiendo etiqueta al grupo de seguridad Ubuntu Server..."
aws ec2 create-tags \
--resources $AWS_ID_GrupoSeguridad_Ubuntu \
--tags "Key=Name,Value=$AWS_Proyecto-us-sg" 

###############################################################################
## Crear una instancia EC2  (con una imagen de ubuntu 22.04 del 04/07/2022)
echo ""
echo "Creando instancia EC2 Ubuntu  ##################################"
AWS_AMI_Ubuntu_ID=ami-052efd3df9dad4825
AWS_EC2_INSTANCE_ID=$(aws ec2 run-instances \
  --image-id $AWS_AMI_Ubuntu_ID \
  --instance-type t2.micro \
  --key-name vockey \
  --monitoring "Enabled=false" \
  --security-group-ids $AWS_ID_GrupoSeguridad_Ubuntu \
  --subnet-id $AWS_ID_SubredPublica \
  --user-data file://datosusuarioUbuntu.txt \
  --private-ip-address $AWS_IP_UbuntuServer \
  --tag-specifications ResourceType=instance,Tags=[{Key=Name,Value=$AWS_Proyecto-us}] \
  --query 'Instances[0].InstanceId' \
  --output text)

#echo $AWS_EC2_INSTANCE_ID
###############################################################################
## Crear IP Estatica para la instancia Ubuntu. (IP elastica)
echo "Creando IP elastica Ubuntu"
AWS_IP_Fija_UbuntuServer=$(aws ec2 allocate-address --output text)
echo $AWS_IP_Fija_UbuntuServer 

## Recuperar AllocationId de la IP elastica
AWS_IP_Fija_UbuntuServer_AllocationId=$(echo $AWS_IP_Fija_UbuntuServer | awk '{print $1}')
echo $AWS_IP_Fija_UbuntuServer_AllocationId

## Añadirle etiqueta a la ip elástica de Ubuntu
aws ec2 create-tags \
--resources $AWS_IP_Fija_UbuntuServer_AllocationId \
--tags Key=Name,Value=$AWS_Proyecto-us-ip

###############################################################################
## Asociar la ip elastica a la instancia Ubuntu
echo "Esperando a que la instancia esté disponible para asociar la IP elastica"
sleep 100
aws ec2 associate-address --instance-id $AWS_EC2_INSTANCE_ID --allocation-id $AWS_IP_Fija_UbuntuServer_AllocationId



###############################################################################
###############################################################################
###############################################################################
####################       WINDOWS SERVER     #################################
###############################################################################
###############################################################################
###############################################################################
echo "########################### Windows Server ###########################"
echo "######################################################################"

## Crear un grupo de seguridad Windows Server
echo "Creando grupo de seguridad Windows Server..."
AWS_ID_GrupoSeguridad_Windows=$(aws ec2 create-security-group \
  --vpc-id $AWS_ID_VPC \
  --group-name $AWS_Proyecto-ws-sg \
  --description "$AWS_Proyecto-ws-sg" \
  --output text)

echo "ID Grupo de seguridad de windows: " $AWS_ID_GrupoSeguridad_Windows

## Abrir los puertos de acceso a la instancia
echo "Añadiendo reglas de seguridad al grupo de seguridad Windows Server..."
aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Windows \
  --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 3389, "ToPort": 3389, "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow RDP"}]}]'

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Windows \
  --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 53,   "ToPort": 53,   "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow DNS(TCP)"}]}]'

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Windows \
  --ip-permissions '[{"IpProtocol": "UDP", "FromPort": 53,   "ToPort": 53,   "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow DNS(UDP)"}]}]'

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Windows \
  --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 80,   "ToPort": 80,   "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow HTTP"}]}]'


## Añadirle etiqueta al grupo de seguridad
echo "Añadiendo etiqueta al grupo de seguridad Windows Server..."
aws ec2 create-tags \
--resources $AWS_ID_GrupoSeguridad_Windows \
--tags "Key=Name,Value=$AWS_Proyecto-ws-sg" 

###############################################################################
## Crear una instancia EC2  (con una imagen de Windows Server 2022 del 22/10/2022)
echo ""
echo "Creando instancia EC2 Windows  ##################################"
AWS_AMI_Windows_ID=ami-07a53499a088e4a8c
AWS_EC2_INSTANCE_ID=$(aws ec2 run-instances \
  --image-id $AWS_AMI_Windows_ID \
  --instance-type t2.micro \
  --key-name vockey \
  --monitoring "Enabled=false" \
  --security-group-ids $AWS_ID_GrupoSeguridad_Windows \
  --subnet-id $AWS_ID_SubredPublica \
  --user-data file://datosusuarioWindows.txt \
  --private-ip-address $AWS_IP_WindowsServer \
  --tag-specifications ResourceType=instance,Tags=[{Key=Name,Value=$AWS_Proyecto-ws}] \
  --query 'Instances[0].InstanceId' \
  --output text)

#En datos de usuario ponemos powershell para instalar el rol DNS y deshabilitar el firewall

#echo $AWS_EC2_INSTANCE_ID
###############################################################################
## Crear IP Estatica para la instancia Windows. (IP elastica)
echo "Creando IP elastica Windows"
AWS_IP_Fija_WindowsServer=$(aws ec2 allocate-address --output text)
echo $AWS_IP_Fija_WindowsServer 

## Recuperar AllocationId de la IP elastica
AWS_IP_Fija_WindowsServer_AllocationId=$(echo $AWS_IP_Fija_WindowsServer | awk '{print $1}')
echo $AWS_IP_Fija_WindowsServer_AllocationId

## Añadirle etiqueta a la ip elástica de Windows
aws ec2 create-tags \
--resources $AWS_IP_Fija_WindowsServer_AllocationId \
--tags "Key=Name,Value=$AWS_Proyecto-ws-ip" 

###############################################################################
## Asociar la ip elastica a la instancia Windows
echo "Esperando a que la instancia esté disponible para asociar la IP elastica. Tardará 2 minutos..."
sleep 120
aws ec2 associate-address --instance-id $AWS_EC2_INSTANCE_ID --allocation-id $AWS_IP_Fija_WindowsServer_AllocationId



###############################################################################
echo "Permitir todo el tráfico entre los grupos de seguridad de las instancias"
aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Ubuntu \
  --source-group $AWS_ID_GrupoSeguridad_Windows \
  --protocol all

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Windows \
  --source-group $AWS_ID_GrupoSeguridad_Ubuntu \
  --protocol all
###############################################################################
## Mostrar las ips publicas de las instancias
echo "Mostrando las ips publicas de las instancias"
AWS_EC2_INSTANCE_PUBLIC_IP=$(aws ec2 describe-instances \
--query "Reservations[*].Instances[*].PublicIpAddress" \
--output=text) &amp;amp;&amp;amp;
echo $AWS_EC2_INSTANCE_PUBLIC_IP
###############################################################################
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚠Hacer lo mismo con Python3 y Boto3
&lt;/h2&gt;

&lt;p&gt;Puedes buscar documentación para hacer los mismo con python3 en la siguiente web. &lt;a href="https://boto3.amazonaws.com/v1/documentation/api/latest/guide/examples.html" rel="noopener noreferrer"&gt;https://boto3.amazonaws.com/v1/documentation/api/latest/guide/examples.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
    </item>
    <item>
      <title>AWS Academy. Preparar tarea en Learning Lab con AWS Cli</title>
      <dc:creator>Javier Terán González</dc:creator>
      <pubDate>Fri, 09 Dec 2022 12:10:08 +0000</pubDate>
      <link>https://forem.com/javiteran/aws-academy-preparar-tarea-en-learning-lab-con-aws-cli-3p72</link>
      <guid>https://forem.com/javiteran/aws-academy-preparar-tarea-en-learning-lab-con-aws-cli-3p72</guid>
      <description>&lt;h2&gt;
  
  
  💫 Tareas en AWS Academy con AWS CLI
&lt;/h2&gt;

&lt;p&gt;Cuando utilizamos AWS Academy y su Learner Lab puede interesarnos personalizar el entorno de los alumnos.&lt;/p&gt;

&lt;p&gt;Muestro una posible solución de automatización de la creación de entornos de tareas/pruebas con AWS CLI.&lt;/p&gt;

&lt;p&gt;Es una propuesta inicial que puede servir como idea, para todos los profesores, de generación de laboratorios y tareas que se puedan compartir y usar entre todos nosotros.&lt;/p&gt;

&lt;p&gt;Simplemente se utiliza AWS Cli y GitHub como repositorio de los scripts.&lt;/p&gt;

&lt;p&gt;Este es mi primer artículo en esta comunidad y quizás no es de un nivel muy avanzado. Pero para mi si ha sido bastante complicado.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ Referencia de comandos AWS CLI
&lt;/h2&gt;

&lt;p&gt;En este repositorio, Amazon, nos proporciona muchos ejemplos del Cli de AWS para lanzar casi todos sus servicios&lt;/p&gt;

&lt;p&gt;&lt;a href="https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/index.html#cli-aws-ec2" rel="noopener noreferrer"&gt;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/index.html#cli-aws-ec2&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ Mi repositorio javiteran/AWS_Cli
&lt;/h2&gt;

&lt;p&gt;Aquí está el código que he utilizado para lanzar el laboratorio y todas sus configuraciones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/javiteran/AWS_Cli" rel="noopener noreferrer"&gt;https://github.com/javiteran/AWS_Cli&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Acceso a la grabación de prueba del entorno:
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/zdevHbajB2s"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  💥 Consola de configuración del entorno en el Learner Lab
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fliv3iter9nfe8p9agidz.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fliv3iter9nfe8p9agidz.PNG" alt="Consola configuración entorno LearnerLab.PNG" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔨 Creación de entorno de tareas 00AWSLab01.sh
&lt;/h2&gt;

&lt;p&gt;Para lanzar un ejemplo de laboratorio se puede hacer lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/javiteran/AWS_Cli.git
cd AWS_Cli
sh 00AWSLab01.sh 21 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este script creará:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Una VPC.&lt;/li&gt;
&lt;li&gt;Una subred pública.&lt;/li&gt;
&lt;li&gt;Una puerta de enlace de internet.&lt;/li&gt;
&lt;li&gt;La tabla de enrutamiento de la subred para permitir conectarse a internet.&lt;/li&gt;
&lt;li&gt;Un grupo de seguridad para Ubuntu y otro para Windows.&lt;/li&gt;
&lt;li&gt;Se abrirán los puertos 80, 22 y 3389 para Ubuntu y Windows respectivamente. (y el 53 para DNS como práctica inicial).&lt;/li&gt;
&lt;li&gt;Se permitirá todo el tráfico entre las instancias de la VPC.&lt;/li&gt;
&lt;li&gt;Una instancia EC2 con Windows Server 2022.&lt;/li&gt;
&lt;li&gt;Una instancia EC2 con Ubuntu Server 22.04.&lt;/li&gt;
&lt;li&gt;En Ubuntu y Windows se instalarán servicios y roles como DNS para probar la instalación en la creación.&lt;/li&gt;
&lt;li&gt;Direcciones IPs públicas para las instancias EC2.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🕐Salida de la ejecución del comando
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs85k742o8p2lnyk38g3k.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs85k742o8p2lnyk38g3k.PNG" alt="Ejecución del comando" width="800" height="990"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅Consola con los servicios instalados
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm5ldug0wcgmv3r2ytb9d.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm5ldug0wcgmv3r2ytb9d.PNG" alt="Instancia EC2 creada" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi040iza1nrta0iaycgit.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi040iza1nrta0iaycgit.PNG" alt="Grupos de seguridad" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Código
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###############################################################################
#       Creación de una VPC, subredes, 
#       internet gateway y tabla de rutas
#      Además creará :
#            - una instancia EC2 Ubuntu Server 22.04
#            - una instancia EC2 Windows Server 2022
#      con IPs elásticas
#      en AWS con AWS CLI
#
# Utilizado para AWS Academy Learning Lab
#
# Autor: Javier Terán González
# Fecha: 06/12/2022
###############################################################################
## Tratamiento de variables de entrada

# Error si el número de parámetros menor o igual que 0
if [ $# -le 0 ]; then
    echo "Hay que introducir el número de alumno NN. (Entre 01 y 99)."
    exit 1
fi
# Error si el parámetro no está entre 01 y 99
if  [ "$1" -gt 0 ] &amp;amp;&amp;amp; [ "$1" -le 99 ]; then
    echo "Correcto. Es un número"
else
    echo "Hay que introducir el número de alumno NN. (Entre 01 y 99)." 
    exit 1
fi
#echo "Hola $@!"
NN=$1
echo "Alumno: " $NN;
###############################################################################
AWS_VPC_CIDR_BLOCK=10.22.0.0/16
AWS_Subred_CIDR_BLOCK=10.22.1$NN.0/24
AWS_IP_UbuntuServer=10.22.1$NN.100
AWS_IP_WindowsServer=10.22.1$NN.200
AWS_Proyecto=SRI$NN

echo "######################################################################"
echo "Creación de una VPC, subredes, internet gateway y tabla de rutas."
echo "Además creará una instancia EC2 Ubuntu Server 22.04 y una instancia EC2 Windows Server 2022 con IPs elásticas en AWS con AWS CLI"
echo "Se van a crear con los siguientes valores:"
echo "Alumno:                " $NN
echo "AWS_VPC_CIDR_BLOCK:    " $AWS_VPC_CIDR_BLOCK
echo "AWS_Subred_CIDR_BLOCK: " $AWS_Subred_CIDR_BLOCK
echo "AWS_IP_UbuntuServer:   " $AWS_IP_UbuntuServer
echo "AWS_IP_WindowsServer:  " $AWS_IP_WindowsServer
echo "AWS_Proyecto:          " $AWS_Proyecto
echo "######################################################################"
###############################################################################
## Crear una VPC (Virtual Private Cloud) con su etiqueta
## La VPC tendrá un bloque IPv4 proporcionado por el usuario y uno IPv6 de AWS ???
echo "############## Crear VPC, Subred, Rutas, Gateway #####################"
echo "######################################################################"
echo "Creando VPC..."

AWS_ID_VPC=$(aws ec2 create-vpc \
  --cidr-block $AWS_VPC_CIDR_BLOCK \
  --amazon-provided-ipv6-cidr-block \
  --tag-specification ResourceType=vpc,Tags=[{Key=Name,Value=$AWS_Proyecto-vpc}] \
  --query 'Vpc.{VpcId:VpcId}' \
  --output text)

## Habilitar los nombres DNS para la VPC
aws ec2 modify-vpc-attribute \
  --vpc-id $AWS_ID_VPC \
  --enable-dns-hostnames "{\"Value\":true}"

## Crear una subred publica con su etiqueta
echo "Creando Subred..."
AWS_ID_SubredPublica=$(aws ec2 create-subnet \
  --vpc-id $AWS_ID_VPC --cidr-block $AWS_Subred_CIDR_BLOCK \
  --availability-zone us-east-1a \
  --tag-specifications ResourceType=subnet,Tags=[{Key=Name,Value=$AWS_Proyecto-subred-publica}] \
  --query 'Subnet.{SubnetId:SubnetId}' \
  --output text)

## Habilitar la asignación automática de IPs públicas en la subred pública
aws ec2 modify-subnet-attribute \
  --subnet-id $AWS_ID_SubredPublica \
  --map-public-ip-on-launch

## Crear un Internet Gateway (Puerta de enlace) con su etiqueta
echo "Creando Internet Gateway..."
AWS_ID_InternetGateway=$(aws ec2 create-internet-gateway \
  --tag-specifications ResourceType=internet-gateway,Tags=[{Key=Name,Value=$AWS_Proyecto-igw}] \
  --query 'InternetGateway.{InternetGatewayId:InternetGatewayId}' \
  --output text)

## Asignar el Internet gateway a la VPC
aws ec2 attach-internet-gateway \
--vpc-id $AWS_ID_VPC \
--internet-gateway-id $AWS_ID_InternetGateway

## Crear una tabla de rutas
echo "Creando tabla de rutas..."
AWS_ID_TablaRutas=$(aws ec2 create-route-table \
--vpc-id $AWS_ID_VPC \
--query 'RouteTable.{RouteTableId:RouteTableId}' \
--output text )

## Crear la ruta por defecto a la puerta de enlace IPv4 (Internet Gateway)
echo "     Ruta por defecto IPv4 0.0.0.0/0..."
aws ec2 create-route \
  --route-table-id $AWS_ID_TablaRutas \
  --destination-cidr-block 0.0.0.0/0 \
  --gateway-id $AWS_ID_InternetGateway

## Crear la ruta por defecto a la puerta de enlace IPv4 (Internet Gateway)
echo "     Ruta por defecto IPv6 ::/0..."
aws ec2 create-route --route-table-id  $AWS_ID_TablaRutas \
  --destination-ipv6-cidr-block ::/0 \
  --gateway-id $AWS_ID_InternetGateway

## Asociar la subred pública con la tabla de rutas
AWS_ROUTE_TABLE_ASSOID=$(aws ec2 associate-route-table  \
  --subnet-id $AWS_ID_SubredPublica \
  --route-table-id $AWS_ID_TablaRutas \
  --output text)

## Añadir etiqueta a la ruta por defecto
AWS_DEFAULT_ROUTE_TABLE_ID=$(aws ec2 describe-route-tables \
  --filters "Name=vpc-id,Values=$AWS_ID_VPC" \
  --query 'RouteTables[?Associations[0].Main != `flase`].RouteTableId' \
  --output text) &amp;amp;&amp;amp;
aws ec2 create-tags \
--resources $AWS_DEFAULT_ROUTE_TABLE_ID \
--tags "Key=Name,Value=$AWS_Proyecto ruta por defecto"

## Añadir etiquetas a la tabla de rutas
aws ec2 create-tags \
--resources $AWS_ID_TablaRutas \
--tags "Key=Name,Value=$AWS_Proyecto-rtb-public"


###############################################################################
###############################################################################
###############################################################################
####################       UBUNTU SERVER     ##################################
###############################################################################
###############################################################################
###############################################################################
## Crear un grupo de seguridad Ubuntu Server
echo "########################### Ubuntu Server ############################"
echo "######################################################################"
echo "Creando grupo de seguridad Ubuntu Server..."
AWS_ID_GrupoSeguridad_Ubuntu=$(aws ec2 create-security-group \
  --vpc-id $AWS_ID_VPC \
  --group-name $AWS_Proyecto-us-sg \
  --description "$AWS_Proyecto-us-sg" \
  --output text)

echo "ID Grupo de seguridad de ubuntu: " $AWS_ID_GrupoSeguridad_Ubuntu

echo "Añadiendo reglas de seguridad al grupo de seguridad Ubuntu Server..."
## Abrir los puertos de acceso a la instancia
aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Ubuntu \
  --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow SSH"}]}]'

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Ubuntu \
  --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow HTTP"}]}]'

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Ubuntu \
  --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 53, "ToPort": 53, "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow DNS(TCP)"}]}]'

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Ubuntu \
  --ip-permissions '[{"IpProtocol": "UDP", "FromPort": 53, "ToPort": 53, "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow DNS(UDP)"}]}]'

## Añadirle etiqueta al grupo de seguridad
echo "Añadiendo etiqueta al grupo de seguridad Ubuntu Server..."
aws ec2 create-tags \
--resources $AWS_ID_GrupoSeguridad_Ubuntu \
--tags "Key=Name,Value=$AWS_Proyecto-us-sg" 

###############################################################################
## Crear una instancia EC2  (con una imagen de ubuntu 22.04 del 04/07/2022)
echo ""
echo "Creando instancia EC2 Ubuntu  ##################################"
AWS_AMI_Ubuntu_ID=ami-052efd3df9dad4825
AWS_EC2_INSTANCE_ID=$(aws ec2 run-instances \
  --image-id $AWS_AMI_Ubuntu_ID \
  --instance-type t2.micro \
  --key-name vockey \
  --monitoring "Enabled=false" \
  --security-group-ids $AWS_ID_GrupoSeguridad_Ubuntu \
  --subnet-id $AWS_ID_SubredPublica \
  --user-data file://datosusuarioUbuntu.txt \
  --private-ip-address $AWS_IP_UbuntuServer \
  --tag-specifications ResourceType=instance,Tags=[{Key=Name,Value=$AWS_Proyecto-us}] \
  --query 'Instances[0].InstanceId' \
  --output text)

#echo $AWS_EC2_INSTANCE_ID
###############################################################################
## Crear IP Estatica para la instancia Ubuntu. (IP elastica)
echo "Creando IP elastica Ubuntu"
AWS_IP_Fija_UbuntuServer=$(aws ec2 allocate-address --output text)
echo $AWS_IP_Fija_UbuntuServer 

## Recuperar AllocationId de la IP elastica
AWS_IP_Fija_UbuntuServer_AllocationId=$(echo $AWS_IP_Fija_UbuntuServer | awk '{print $1}')
echo $AWS_IP_Fija_UbuntuServer_AllocationId

## Añadirle etiqueta a la ip elástica de Ubuntu
aws ec2 create-tags \
--resources $AWS_IP_Fija_UbuntuServer_AllocationId \
--tags Key=Name,Value=$AWS_Proyecto-us-ip

###############################################################################
## Asociar la ip elastica a la instancia Ubuntu
echo "Esperando a que la instancia esté disponible para asociar la IP elastica"
sleep 100
aws ec2 associate-address --instance-id $AWS_EC2_INSTANCE_ID --allocation-id $AWS_IP_Fija_UbuntuServer_AllocationId



###############################################################################
###############################################################################
###############################################################################
####################       WINDOWS SERVER     #################################
###############################################################################
###############################################################################
###############################################################################
echo "########################### Windows Server ###########################"
echo "######################################################################"

## Crear un grupo de seguridad Windows Server
echo "Creando grupo de seguridad Windows Server..."
AWS_ID_GrupoSeguridad_Windows=$(aws ec2 create-security-group \
  --vpc-id $AWS_ID_VPC \
  --group-name $AWS_Proyecto-ws-sg \
  --description "$AWS_Proyecto-ws-sg" \
  --output text)

echo "ID Grupo de seguridad de windows: " $AWS_ID_GrupoSeguridad_Windows

## Abrir los puertos de acceso a la instancia
echo "Añadiendo reglas de seguridad al grupo de seguridad Windows Server..."
aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Windows \
  --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 3389, "ToPort": 3389, "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow RDP"}]}]'

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Windows \
  --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 53,   "ToPort": 53,   "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow DNS(TCP)"}]}]'

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Windows \
  --ip-permissions '[{"IpProtocol": "UDP", "FromPort": 53,   "ToPort": 53,   "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow DNS(UDP)"}]}]'

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Windows \
  --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 80,   "ToPort": 80,   "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow HTTP"}]}]'


## Añadirle etiqueta al grupo de seguridad
echo "Añadiendo etiqueta al grupo de seguridad Windows Server..."
aws ec2 create-tags \
--resources $AWS_ID_GrupoSeguridad_Windows \
--tags "Key=Name,Value=$AWS_Proyecto-ws-sg" 

###############################################################################
## Crear una instancia EC2  (con una imagen de Windows Server 2022 del 22/10/2022)
echo ""
echo "Creando instancia EC2 Windows  ##################################"
AWS_AMI_Windows_ID=ami-07a53499a088e4a8c
AWS_EC2_INSTANCE_ID=$(aws ec2 run-instances \
  --image-id $AWS_AMI_Windows_ID \
  --instance-type t2.micro \
  --key-name vockey \
  --monitoring "Enabled=false" \
  --security-group-ids $AWS_ID_GrupoSeguridad_Windows \
  --subnet-id $AWS_ID_SubredPublica \
  --user-data file://datosusuarioWindows.txt \
  --private-ip-address $AWS_IP_WindowsServer \
  --tag-specifications ResourceType=instance,Tags=[{Key=Name,Value=$AWS_Proyecto-ws}] \
  --query 'Instances[0].InstanceId' \
  --output text)

#En datos de usuario ponemos powershell para instalar el rol DNS y deshabilitar el firewall

#echo $AWS_EC2_INSTANCE_ID
###############################################################################
## Crear IP Estatica para la instancia Windows. (IP elastica)
echo "Creando IP elastica Windows"
AWS_IP_Fija_WindowsServer=$(aws ec2 allocate-address --output text)
echo $AWS_IP_Fija_WindowsServer 

## Recuperar AllocationId de la IP elastica
AWS_IP_Fija_WindowsServer_AllocationId=$(echo $AWS_IP_Fija_WindowsServer | awk '{print $1}')
echo $AWS_IP_Fija_WindowsServer_AllocationId

## Añadirle etiqueta a la ip elástica de Windows
aws ec2 create-tags \
--resources $AWS_IP_Fija_WindowsServer_AllocationId \
--tags "Key=Name,Value=$AWS_Proyecto-ws-ip" 

###############################################################################
## Asociar la ip elastica a la instancia Windows
echo "Esperando a que la instancia esté disponible para asociar la IP elastica. Tardará 2 minutos..."
sleep 120
aws ec2 associate-address --instance-id $AWS_EC2_INSTANCE_ID --allocation-id $AWS_IP_Fija_WindowsServer_AllocationId



###############################################################################
echo "Permitir todo el tráfico entre los grupos de seguridad de las instancias"
aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Ubuntu \
  --source-group $AWS_ID_GrupoSeguridad_Windows \
  --protocol all

aws ec2 authorize-security-group-ingress \
  --group-id $AWS_ID_GrupoSeguridad_Windows \
  --source-group $AWS_ID_GrupoSeguridad_Ubuntu \
  --protocol all
###############################################################################
## Mostrar las ips publicas de las instancias
echo "Mostrando las ips publicas de las instancias"
AWS_EC2_INSTANCE_PUBLIC_IP=$(aws ec2 describe-instances \
--query "Reservations[*].Instances[*].PublicIpAddress" \
--output=text) &amp;amp;&amp;amp;
echo $AWS_EC2_INSTANCE_PUBLIC_IP
###############################################################################
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚠Hacer lo mismo con Python3 y Boto3
&lt;/h2&gt;

&lt;p&gt;Puedes buscar documentación para hacer los mismo con python3 en la siguiente web. &lt;a href="https://boto3.amazonaws.com/v1/documentation/api/latest/guide/examples.html" rel="noopener noreferrer"&gt;https://boto3.amazonaws.com/v1/documentation/api/latest/guide/examples.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
  </channel>
</rss>
