Je souhaite transférer plusieurs adresses IP Elastic entre des comptes AWS de la même Région AWS.
Brève description
Lorsque vous transférez une adresse IP Elastic, une liaison en deux étapes s’effectue entre le compte source et le compte de transfert. Le compte source peut être un compte AWS standard ou un compte AWS Organizations. Lorsque le compte source commence le transfert, le compte de transfert a 7 jours pour l’accepter. Dans le cas contraire, l’adresse IP Elastic revient à son propriétaire d’origine.
AWS n’informe pas le compte de transfert des demandes de transfert d’adresses IP Elastic en attente. Pour faciliter le transfert dans les délais impartis, le propriétaire du compte source doit informer le propriétaire du compte de transfert de cette demande.
Pour transférer plusieurs adresses IP Elastic à la fois, utilisez un script bash sous Linux.
Remarque : Pour transférer une adresse IP Elastic unique entre des comptes, consultez Comment transférer une adresse IP Elastic entre des comptes AWS d'une même région ?
Résolution
Remarque : Si vous recevez des erreurs lors de l'exécution des commandes de l'interface de la ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente de l'interface de la ligne de commande AWS.
Transférer les adresses IP (propriétaire du compte source)
1. Vérifiez que vous avez configuré vos informations d'identification de l'interface de la ligne de commande AWS pour le compte source. Vérifiez également que vous disposez des autorisations AWS Identity and Access Management (IAM) pour autoriser les appels d'API ec2:DescribeAddresses et ec2:EnableAddressTransfer.
2. Ajoutez les adresses IP Elastic à un fichier texte, à raison d'une adresse par ligne. Dans l'exemple de script bash suivant, ce fichier texte est nommé eips.txt.
3. Créez un script bash similaire à l'exemple suivant, nommé EIPTransfer.sh :
#! /bin/bash
ARRAY=()
while read line
do
ARRAY+=($line)
done < $1
now_start="$(date)"
echo "Starting the loop to enable transfer of the provided EIPs in Region: $2 from AWS account: $3 to AWS account: $4 at $now_start" >> EIPTransfer-results-"`date +"%d-%m-%Y"`".txt
for i in "${ARRAY[@]}"
do
echo "Trying to get the AllocationId for ${i}" >> EIPTransfer-results-"`date +"%d-%m-%Y"`".txt
EIPAlloc=`aws ec2 describe-addresses --filters "Name=public-ip,Values=${i}" --query "Addresses[].AllocationId" --region $2 --output text`
if [[ "$EIPAlloc" == *"eipalloc"* ]]; then
echo "Trying to enable transfer for ${i} with allocation-id $EIPAlloc" >> EIPTransfer-results-"`date +"%d-%m-%Y"`".txt
aws ec2 enable-address-transfer --allocation-id ${EIPAlloc} --transfer-account-id $4 --region $2 --output text >> EIPTransfer-results-"`date +"%d-%m-%Y"`".txt 2>&1
else
echo "No allocation-id found for EIP ${i}" >> EIPTransfer-results-"`date +"%d-%m-%Y"`".txt
fi
done
now_end="$(date)"
echo "All done! Exiting the script at $now_end!" >> EIPTransfer-results-"`date +"%d-%m-%Y"`".txt
## usage sh EIPTransfer.sh eips.txt xx-region-y srcaccount dstaccount
4. Pour exécuter ce script, exécutez la commande suivante :
sh EIPTransfer.sh eips.txt xx-region-y srcaccount dstaccount
5. Consultez le journal d'EIPTransfer pour détecter d'éventuelles erreurs. Le journal s'appelle EIPTransfer-results-DATE.txt.
Remarque : Dans ce nom de fichier, DATE est la date à laquelle vous exécutez le script.
Accepter le transfert (titulaire du compte de transfert)
1. Vérifiez que vous avez configuré vos informations d'identification de l'interface de la ligne de commande AWS pour le compte de transfert. Vérifiez également que vous disposez des autorisations IAM nécessaires pour autoriser l'appel d'API ec2:AcceptAddressTransfer.
2. Ajoutez les adresses IP Elastic à un fichier texte, à raison d'une adresse par ligne. Dans l'exemple de script bash suivant, ce fichier texte est nommé eips.txt.
3. Créez un script bash similaire à l'exemple suivant, nommé EIPAccept.sh :
#! /bin/bash
ARRAY=()
while read line
do
ARRAY+=($line)
done < $1
now_start="$(date)"
echo "Starting the loop to accept transfer of the provided EIPs in Region: $2 from AWS account: $3 to AWS account: $4 at $now_start" >> EIPAccept-results-"`date +"%d-%m-%Y"`".txt
for i in "${ARRAY[@]}"
do
echo "Trying to accept the EIP transfer for ${i} from account $3" >> EIPAccept-results-"`date +"%d-%m-%Y"`".txt
aws ec2 accept-address-transfer --address ${i} --region $2 --output text >> EIPAccept-results-"`date +"%d-%m-%Y"`".txt 2>&1
done
now_end="$(date)"
echo "All done! Exiting the script at $now_end!" >> EIPAccept-results-"`date +"%d-%m-%Y"`".txt
## usage sh EIPAccept.sh eips.txt xx-region-y srcaccount dstaccount
4. Pour exécuter ce script, exécutez la commande suivante :
sh EIPAccept.sh eips.txt xx-region-y srcaccount dstaccount
5. Consultez le journal EIPAccept pour détecter d'éventuelles erreurs. Ce journal s'appelle EIPAccept-results-DATE.txt.
Remarque : Dans ce nom de fichier, DATE est la date à laquelle vous exécutez le script.