# [AWS] EC2

## Introduction

**EC2** pour *Elastic Compute Cloud* est un service web d'Amazon permettant de déployer des instances dîtes <span style="text-decoration: underline;">as a service</span>.

## [![ec2-1.webp](https://wiki.neopipe.fr/uploads/images/gallery/2023-08/scaled-1680-/ec2-1.webp)](https://wiki.neopipe.fr/uploads/images/gallery/2023-08/ec2-1.webp)

## Installation des prérequis

Deux paquets sont nécessaire à la manipulation des instances et des fichiers JSON pour AWS : **aws-cli** et **jq**.

Ils sont tous deux à installer selon votre OS.

## Types d'instances

La liste complète des types d'instances est disponible ici : [https://aws.amazon.com/fr/ec2/instance-types/](https://aws.amazon.com/fr/ec2/instance-types/)

## Liste AMI

Pour explorer la liste des AMI : [https://us-east-1.console.aws.amazon.com/ec2/home?region=us-east-1#LaunchInstances:](https://us-east-1.console.aws.amazon.com/ec2/home?region=us-east-1#LaunchInstances:)

<table border="1" id="bkmrk-images-id-ami-amazon" style="border-collapse: collapse; width: 100%; height: 148.984px;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">**Images**</td><td class="align-center" style="height: 29.7969px;">**ID**</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">AMI Amazon Linux 2023</td><td class="align-center" style="height: 29.7969px;">ami-0f34c5ae932e6f0e4</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">Ubuntu 22.04</td><td class="align-center" style="height: 29.7969px;">ami-053b0d53c279acc90</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">Debian 11</td><td class="align-center" style="height: 29.7969px;">ami-01e5ff16fd6e8c542</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">RHEL 9</td><td class="align-center" style="height: 29.7969px;">ami-02978b79564e08f2f</td></tr></tbody></table>

## Déploiement en CLI

#### Création d'une clé d'accès SSH

```bash
aws ec2 create-key-pair --key-name <ACCESS_KEY_LABEL> --query 'KeyMaterial' --output text > <KEY.pem>
```

#### Configuration des accès IAM

Depuis la console IAM, créer un utilisateur CLI ayant les droits puis récupérer l'**ACCESS KEY ID** ainsi que l'**ACCESS SECRET KEY** (affichable uniquement à la création) :

- [https://docs.aws.amazon.com/powershell/latest/userguide/pstools-appendix-sign-up.html](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-appendix-sign-up.html)

Puis, configurer les paramètres d'AWS grâce aux commandes suivantes :

```bash
aws configure set aws_access_key_id <ACCESS_KEY_ID>
```

```bash
aws configure set aws_secret_access_key <ACCESS_SECRET_KEY>
```

La liste des régions est consultable à cette adresse :

- [https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html)

<span style="text-decoration: underline;">Ex :</span> **us-east-1**

```bash
aws configure set default.region <REGION>
```

```bash
aws configure set output json
```

#### Déploiement de l'instance

```bash
aws ec2 run-instances --image-id <AMI_ID> --instance-type <INSTANCE_TYPE> --security-group-ids <SG_ID> --key-name <ACCESS_KEY_LABEL> > <OUTPUT>.json
```

- **&lt;AMI\_ID&gt;** : Image à utiliser (Amazon Linux, Ubuntu, Debian, Windows Server).
- **&lt;INSTANCE\_TYPE&gt;** : Configuration de l'instance (ex : t2.micro).
- **&lt;ACCESS\_KEY\_LABEL&gt;** : Label de la clé d'accès SSH créé précédemment.
- **&lt;SG\_ID&gt;** : ID du [groupe de sécurité](https://us-east-1.console.aws.amazon.com/ec2/home?region=us-east-1#SecurityGroups:) configurable depuis la console EC2.
- **&lt;OUTPUT&gt;** : Nom du fichier de sortie (important pour récupérer les informations de l'instance).

## Informations sur l'instance

Avec l'ID de l'instance stockée dans le fichier json, il est possible d'obtenir l'adresse IP public de l'instance grâce à la commande suivante :

```bash
aws ec2 describe-instances --instance-ids $( jq -r '.Instances[0].InstanceId' <OUTPUT>.json ) | jq -r '.Reservations[0].Instances[0].PublicIpAddress'
```