VPC があります。これで、ec2-instances を作成して構成するスクリプトができました。構成は、インストール中のパブリック IP に依存します。問題は、再起動後にインスタンスの構成が間違っていることです。パブリック IP は変更されましたが、構成には古いパブリック IP が含まれているためです。特定の VPC 内のインスタンスへの Elastic IP の自動割り当てを定義する方法はありますか? (作成後すぐにエラスティック IP を割り当てます)
4 に答える
通常、最初にインスタンスを作成したものからユーザーデータを使用するのではなく、EC2 インスタンス内から Elastic IP を設定しますが、外部スクリプトから同じことを実行できない理由はわかりません。
アプリケーションの起動時にユーザーデータに渡すスクリプトを次に示します。
このスクリプトは、他の (親) スクリプトによって作成された変数に依存していることに注意してください。
REGION = インスタンスを起動したリージョンを保持する
文字列 RESOURCE_ID = 新しく起動したインスタンスの ID を保持する
文字列 IP = 元のパブリック IP アドレスを保持する文字列
最初の起動からの応答内でこれらの変数を取得できるはずです。
追加の機能を作成する必要があります。これは、インスタンスを既に起動していることを前提としていますが、ほとんどの場合、これで十分です。
Elastic IP アドレスの起動と割り当ての間にインスタンスを再起動する必要はありません。実際、そうすると、あなたが言ったように、パブリック IP アドレスを「失う」可能性があります (ただし、コンソールからの単純な再起動でパブリック IP が保持されると思います)。
#!/bin/bash
EIPID=`aws ec2 allocate-address --domain vpc --region ${REGION} | grep -m 1 'AllocationId' | awk -F : '{print $2}' | sed 's|^ "||' | sed 's|"||'`
IP=`ec2metadata --public-ipv4`
EIP=${IP}
if [ -n "$EIPID" ]
then
conf=`aws ec2 associate-address --instance-id ${RESOURCE_ID} --allocation-id ${EIPID} --region ${REGION} | grep -m 1 'AssociationId' | awk -F : '{print $2}' | sed 's|^ "||' | sed 's|"||'`
if [ -n "$conf" ]
then
while [ "$IP" == "$EIP" ]
do
EIP=`ec2metadata --public-ipv4`
sleep 2
done
echo "Elastic IP ${EIPID} successfully mapped";
echo "ELASTIC_IP=\"${EIP}\"" | sudo tee -a /etc/environment
else
echo "Failed to map Elastic IP Address: ${EIPID}";
fi
else
echo "Failed to acquire Elastic IP address: ${EIPID}";
fi
EIP を EC2 インスタンスに自動的にアタッチするための VPC 内の機能はありません。
使い慣れた AWS API 言語を使用して、独自のスクリプトを作成し、独自の自動化を行う必要があります。
1) 準備: Elastic IP を割り当て、EIP-id を書き留める
2) EIP-id を EC2 IP 割り当て作業に関連付ける: AWS API スクリプトを使用して EC2 インスタンスを作成および起動し、EC2 インスタンス ID (またはインスタンス インターフェイス ID) を取得します。次に、同じスクリプトで、API ec2 Associate-Address (名前は、使用する AWS API 言語によって若干異なります) を使用して、EIP-id を EC2 インスタンス ID (またはインスタンス インターフェイス ID) にアタッチします。
API を使用している場合、実際には「ec2 describe_addresse」を使用して、どのインスタンスにも関連付けられていないアイドル状態の EIP-id を動的に見つけることができます。
また、EC2 を時々停止して再起動する場合は、自動化を事前に検討する必要があります。EC2 インスタンスはエラスティック IP を保持しません。
2つの方法があります
1) で公開されている API メソッドを使用します。http://docs.aws.amazon.com/cli/latest/reference/ec2/associate-address.htmlaws ec2 associate-address
を参照してください。
2) スクリプトの代わりに cloudformation を使用http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-ec2.html#scenario-ec2-eipを参照