📚
"AWS Hands-on for Beginners - Network編#1"をAWS CLIで構築する3
前回
今回はIAMロールの作成とEC2インスタンスの起動をAWS CLIで実装していく。構成図
IAMロール
- IAMロール名
ROLE_NAME="handson-ssm"
- IAMロールの作成
aws iam create-role \
--role-name ${ROLE_NAME} \
--assume-role-policy-document \
'{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}'
- ポリシーをロールにアタッチ
aws iam attach-role-policy \
--role-name ${ROLE_NAME} \
--policy-arn arn:aws:iam::aws:policy/AmazonSSMFullAccess
インスタンスプロファイル
- インスタンスプロファイルの作成
INSTANCE_PROFILE_NAME="handson-ssm"
aws iam create-instance-profile \
--instance-profile-name ${INSTANCE_PROFILE_NAME}
- インスタンスプロファイルにロールを追加
aws iam add-role-to-instance-profile \
--instance-profile-name ${INSTANCE_PROFILE_NAME} \
--role-name ${ROLE_NAME}
セキュリティグループ
- セキュリティグループ名
SG_TAG_NAME="handson-sg"
- セキュリティグループの説明
SG_DESCRIPTION="handson Security Group."
- VPC ID
VPC_ID=$( \
aws ec2 describe-vpcs \
--filters Name=tag:Name,Values=handson \
--query "Vpcs[].VpcId" \
--output text \
)
セキュリティグループの作成
aws ec2 create-security-group \
--group-name ${SG_TAG_NAME} \
--description "${SG_DESCRIPTION}" \
--vpc-id ${VPC_ID}
セキュリティグループにルールを追加
- ルールを追加するセキュリティグループID
SG_ID=$( \
aws ec2 describe-security-groups \
--filters Name=vpc-id,Values=${VPC_ID} \
Name=group-name,Values=${SG_TAG_NAME} \
--query "SecurityGroups[].GroupId" \
--output text
)
- 許可するトラフィックのプロトコル
PROTOCOL="tcp"
- 許可するトラフィックのポート
PORT="80"
- 許可するIPアドレス範囲
CIDR="0.0.0.0/0"
- セキュリティグループタグ名
SG_TAG_SPECIFICATIONS="ResourceType=security-group-rule,Tags=[{Key=Name,Value=handson-sg-rule}]"
ルールを追加する
aws ec2 authorize-security-group-ingress \
--group-id ${SG_ID} \
--protocol ${PROTOCOL} \
--port ${PORT} \
--cidr ${CIDR} \
--tag-specifications ${SG_TAG_SPECIFICATIONS}
EC2
各種変数の設定
- VPC ID
VPC_TAG_NAME="handson"
VPC_ID=$( \
aws ec2 describe-vpcs \
--filters Name=tag:Name,Values=${VPC_TAG_NAME} \
--query "Vpcs[].VpcId" \
--output text \
)
- AMI ID
AMI_ID="ami-0ab3794db9457b60a"
- インスタンスタイプ
INSTANCE_TYPE="t2.micro"
- サブネットID
SUBNET_TAG_NAME=Public-subnet-a
SUBNET_ID=$( \
aws ec2 describe-subnets \
--filters Name=vpc-id,Values=${VPC_ID} \
Name=tag:Name,Values=${SUBNET_TAG_NAME} \
--query "Subnets[].SubnetId" \
--output text \
)
- セキュリティグループID
SG_TAG_NAME="handson-sg"
SG_ID=$( \
aws ec2 describe-security-groups \
--filters Name=vpc-id,Values=${VPC_ID} \
Name=group-name,Values=${SG_TAG_NAME} \
--query "SecurityGroups[].GroupId" \
--output text
)
- タグネーム
EC2_TAG_NAME="web"
EC2_TAG_SPECIFICATIONS="ResourceType=instance,Tags=[{Key=Name,Value=${EC2_TAG_NAME}}]"
- ユーザーデータ
cat << EOF > userdata.bash
#!/bin/bash
yum -y update
yum -y install httpd
systemctl enable httpd.service
systemctl start httpd.service
EOF
EC2インスタンスの起動
aws ec2 run-instances \
--image-id ${AMI_ID} \
--instance-type ${INSTANCE_TYPE} \
--subnet-id ${SUBNET_ID} \
--security-group-ids ${SG_ID} \
--tag-specifications ${EC2_TAG_SPECIFICATIONS} \
--user-data file://userdata.bash \
--iam-instance-profile Name=${INSTANCE_PROFILE_NAME} \
--associate-public-ip-address
EC2が立ち上がったらwebにアクセスできることを確認する。
参考
Discussion