Pubblicato il 20/01/2024 da alnao nella categoria AWS

Con il servizio ElasticIP è possibile creare e gestire indirizzi IPv4 di tipo pubblico e statico per le risorse presenti nel Cloud che dispongono di indirizzi dinamici come le istanze EC2 eseguite nelle subnet pubbliche. Gli indirizzi ip configurati con questo servizio hanno alcune caratteristiche: sono statici e non possono cambiare nel tempo, vengono assegnati ad una regione e non possono essere spostati, assegnando un indirizzo IP elastico ad una istanze EC2 vengono rilasciati tutti gli IP pubblici dinamici se presenti come specificato nella guida ufficiale ma se si associa un IP elastico ad un’istanza che aveva un nome DNS pubblico, questo cambierà per corrispondere al nuovo indirizzo.

Un indirizzo IP elastico dissociato rimane assegnato all’account finché non viene rilasciato esplicitamente ed è prevista una piccola tariffa oraria per gli indirizzi IP elastici che non sono associati a un’istanza in esecuzione. Un indirizzo IP viene assegnato ad un account AWS e rimane assegnato finchè non è rilasciato, grazie a questo servizio è possibile mascherare il guasto di un’istanza o di un software rimappando rapidamente l’indirizzo su un’altra istanza, in alternativa, è possibile specificare l’indirizzo IP in un record DNS per un dominio, in modo che il dominio punti alla tua istanza.

Per ulteriori informazioni, è possibile consultare la documentazione ufficiale per l’intagazione di ElasticIP con i DNS. ElasticIP è un servizio di rete ma è studiato per essere integrato con EC2 quindi si trova nella console e nelle varie configurazioni dentro al servizio di Elastic Cloud Conputing, spesso viene raffigurato con l’icona di una freccia anche se questo non è un logo ufficiale.


Con i comandi da riga di comando CLI è possibile gestire tutti gli IP con il comando specifico il cui comando principale permette di allocale un IP:

aws ec2 allocate-address

ed ovviamente è disposnibile il comando per consultare la lista degli IP gestiti tramite questo servizio:

aws ec2 describe-addresses

dove è possibile vedere anche in quale VPC e quale IP privato corrisponde l’indirizzo pubblico gestito.

Sono disponibili anche i comandi per disassociare e rilasciare un IP:

aws ec2 disassociate-address --public-ip 198.X.Y.Z
aws ec2 disassociate-address --association-id eipassoc-xxxxx
aws ec2 release-address --public-ip 198.X.Y.Z

Con la libreria SDK è possibile gestire gli indirizzi gestiti con il servizio ElasticIP, in particolare i metodi principali sono tre: elenco, impostazione e rilascio

def get_elastic_addresses(profile_name):
  boto3.setup_default_session(profile_name=profile_name)
  ec2 = boto3.client('ec2')
  filters = [] #[{'Name': 'domain', 'Values': ['vpc']}]
  response = ec2.describe_addresses(Filters=filters)
  if 'Addresses' in response:
    return response['Addresses']
  return []
def allocate_address(profile_name,vpc,instance):
  boto3.setup_default_session(profile_name=profile_name)
  ec2 = boto3.client('ec2')
  try:
    allocation = ec2.allocate_address(Domain=vpc)
    response = ec2.associate_address(AllocationId=allocation['AllocationId'],InstanceId=instance)
    return response
  except ClientError as e:
    print(e)
    return e
def release_address(profile_name,allocationId):
  boto3.setup_default_session(profile_name=profile_name)
  ec2 = boto3.client('ec2')
  try:
    response = ec2.release_address(AllocationId='ALLOCATION_ID')
    return response
  except ClientError as e:
    print(e)
    return e

maggiori dettagli e la descrizione di tutti i parametri di questi comandi possono essere trovati nella pagina ufficiale.


Con CloudFormation è possibile gestire gli indirizzi con il servizio ElasticIP, come indicato nell’esempio disponibile nel sito ufficiale, il tipo di risorsa dedicato è di tipo EIP, per esempio:

Resources:
  EC2Instance:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: "../Esempio02istanzeEC2/template.yaml"
      Parameters:
      SubnetId: !Ref SubnetId
      VpcId: !Ref VpcId
      KeyName: !Ref KeyName
      InstanceType: !Ref InstanceType
      SSHLocation: !Ref SSHLocation
  EIP:
    Type: AWS::EC2::EIP
    Properties:
      InstanceId: !GetAtt EC2Instance.Outputs.InstanceId
Outputs:
  InstanceEIPAddress:
    Description: IP address from Elastic IP
    Value: !Ref EIP
  InstanceId:
    Description: InstanceId of the newly created EC2 instance
    Value: !GetAtt EC2Instance.Outputs.InstanceId

L’esempio completo funzionante può essere trovato al solito repository:

https://github.com/alnao/AWSCloudFormationExamples/tree/master/Esempio17elasticIP
MENU