Help us understand the problem. What is going on with this article?

[JAWS-UG CLI] ACM入門 #7 EC2によるWebコンテンツの作成

More than 3 years have passed since last update.

これは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. 準備

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

1. 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"

2. 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が出力されなければ起動に失敗しています。確認してください。

zakky
旅人。 いつかは旅人CTO。 AWS Certified Advanced Networking Speciality, Security Speciality, Solution Architect Professional
http://ntuser.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした