これはAWS Certificate Manager (ACM)入門ハンズオン資料の一部です。
最初から続けて行っている場合「0.準備」の各項は作業不要です。第1項へ進んでください。
前提条件
デフォルトVPCとサブネットが存在すること
us-east-1 リージョンにデフォルトVPCと、デフォルトVPCの各AZにサブネットが1つずつ存在すること。
アカウントを作成後、VPCに変更削除をしていなければ問題ありません。
(クラシックEC2が利用可能な古いアカウントは対象外です。無料で新規アカウントを作成してください)
何らかの変更を加えている方はVPCの知識があると思われますので適宜設定してください。
必要な権限
トラブル防止の為、全ての操作が可能なクレデンシャル(アカウント)を原則として使用してください。
AWS CLI
以下のバージョンで動作確認済
- AWS CLI 1.10.63
aws --version
aws-cli/1.10.63 Python/2.7.11 Darwin/15.6.0 botocore/1.4.53
古い場合は次のコマンドを実行して最新版に更新しましょう。
sudo -H pip install -U awscli
- 準備
=======
0.1. リージョンの決定
今回はバージニアリージョン(us-east-1)で作業してください。
export AWS_DEFAULT_REGION='us-east-1'
0.2. 変数の確認
プロファイルが想定のものになっていることを確認します。
aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************2LMA shared-credentials-file
secret_key ****************VXyK shared-credentials-file
region us-east-1 config-file ~/.aws/config
- VPC環境の情報取得
===========
1.1. VPC IDの取得
VPC_ID=` aws ec2 describe-vpcs \
--filters Name=isDefault,Values=true \
--query 'Vpcs[].VpcId' \
--output text ` && echo ${VPC_ID}
vpc-xxxxxxxx
ここで出力結果がこのように出ない方は、デフォルトVPCが存在しないか値を正しく取得できていません。
そのままでは以後の作業ができませんから、すぐにチューターまたは講師に声を掛けてください。
1.2. Subnet IDの取得
aws ec2 describe-subnets \
--query "Subnets[?VpcId==\`${VPC_ID}\`].[SubnetId,CidrBlock]" --output text
subnet-77777777 172.31.48.0/20
subnet-55555555 172.31.32.0/20
subnet-11111111 172.31.0.0/20
subnet-33333333 172.31.16.0/20
出力結果は左がsubnet id、右がそのサブネットのCIDRブロックです。
172.31.0.0/20のSubnet idを変数 SUBNET_ID1 へ、172.31.16.0/20のものをSUBNET_ID2 へ、コピーペーストして変数へ格納します。
SUBNET_ID1="subnet-11111111"
SUBNET_ID2="subnet-33333333"
- Webサーバ(EC2インスタンス)の作成
===========
2.1. 鍵ペアの作成
鍵ペア ec2-handson を作成します。
秘密鍵ファイルは ~/.ssh/ec2-handson.pem に保存されます。
まずは既にファイルが存在しないか確認します。
EC2_KEY_NAME="ec2-handson"
FILE_SSH_KEY="${HOME}/.ssh/${EC2_KEY_NAME}.pem"
ls ${FILE_SSH_KEY}
ls: cannot access /home/hoge/.ssh/ec2-handson.pem: No such file or directory
もしもファイルが既に存在した場合は、 EC2_KEY_NAME を別な物に変更してやり直してください。
問題無ければ鍵ペアの作成を行います。
aws ec2 create-key-pair --key-name ${EC2_KEY_NAME} --query 'KeyMaterial' \
--output text > ${FILE_SSH_KEY} && cat ${FILE_SSH_KEY} && chmod 600 ${FILE_SSH_KEY}
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAg4AFnT934UdMmuSADElYSWzOQ/XpXUc0570zKwtDB3RXS9Fi8YP8J5jv6QRl
adC9842sHMld7gxF2oqg2zDa82t0usKo27dutwziH+XK/HTOerza7FAGGwZM1vBz1WE5sEar1oWr
DhWxXgJ1IXznORRPNzE697ljJjFYD/xlmh50pyn0e86ZuydXttlV8SinXEG0W67Ks/H/mfZLoAa6
.....(本当はもっと長い)
Kfx3RPKQlvaDpXOO60pIdn31RV16wxrxqTBxZ161XM6GMR1ltAp0FmQ9FQC76vBwgsDtxBidkz5e
AqUB9GoLQ8npFPJBF+sRcDGD6EeHdI4fn2JhQXB+WOU5AoGBAKvXu+Xm1Kx6TSAsRchCyUdZmF2y
MfRletfQDp2Hbth3SnNu2MaFQs8C+ODyx7XTx/13LW247AGVsSfq63jovntOL7PRuFA=
-----END RSA PRIVATE KEY-----
2.2. セキュリティグループの作成
セキュリティグループ ec2-handson-sg を作成します。
SG_NAME="ec2-handson-sg"
SG_ID=`aws ec2 create-security-group --group-name ${SG_NAME} \
--description ${SG_NAME} --output text` && echo ${SG_ID}
sg-59c3e63d
ALBからのみアクセス可能なよう、VPC内からのHTTP接続をセキュリティグループに追加します。
aws ec2 authorize-security-group-ingress --group-id ${SG_ID} --protocol 'tcp' --port 80 --cidr 172.31.0.0/19
返り値なし
2.3. EC2インスタンス起動用userdataの作成
AMAZON Linuxを起動する際、nginxを自動的にインストールして起動するためのuserdataファイルを作成します。
USERDATA_FILENAME="userdata"
cat > ${USERDATA_FILENAME} << EOF
#!/bin/bash
yum -y install nginx
chkconfig nginx on
service nginx start
EOF
cat ${USERDATA_FILENAME}
#!/bin/bash
yum -y install nginx
chkconfig nginx on
service nginx start
2.4. EC2インスタンスの起動
作成したuserdataを用いてEC2インスタンスを起動します。
今回はAmazon Linuxを使用します。
インスタンスタイプ t2.micro 、使用するAMIを ami-b73b63a0 としています。
EC2_INSTANCE_TYPE="t2.micro"
EC2_IMAGE_ID="ami-b73b63a0"
EC2_INSTANCE_ID=`aws ec2 run-instances --user-data file://${USERDATA_FILENAME} \
--image-id ${EC2_IMAGE_ID} --instance-type ${EC2_INSTANCE_TYPE} \
--key-name ${EC2_KEY_NAME} --security-group-ids ${SG_ID} --subnet-id ${SUBNET_ID1} \
--query Instances[].InstanceId --output text` && echo ${EC2_INSTANCE_ID}
i-00938c820b919d12d
インスタンスIDが出力されなければ起動に失敗しています。確認してください。