AWS Book - izudon/izudon.github.io GitHub Wiki
2.5
各リソースの削除
イメージ
EC2 スナップショット
$ aws ec2 delete-snapshot ¥
--snapshot-id ${SNAPSHOTID}
AMI
$ aws ec2 deregister-image ¥
--image-id ${AMIID}
IAM
IAM ロール
$ aws iam delete-role ¥
--role-name aws-loadmap-ec2-role
IAM ロール と IAM ポリシ の 関連付け
$ aws iam detach-role-policy ¥
--role-name aws-loadmap-ec2-role ¥
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
インスタンスプロファイル
$ aws iam delete-instance-profile ¥
--instance-profile-name aws-loadmap-ec2-instance-profile
インスタンスプロファイルと IAM ロールの関連付け
$ aws iam remove-role-from-instance-profile ¥
--instance-profile-name aws-loadmap-ec2-instance-profile
ネットワーク
VPC
$ aws ec2 delete-vpc ¥
--vpc-id ${VPCID}
ルートテーブル
$ aws ec2 delete-route-table ¥
--route table-id ${ROUTETBLID}
サブネット
$ aws ec2 delete-subnet ¥
--subnet-id ${PUBSUBID1A}
$ aws ec2 delete-subnet ¥
--subnet-id ${PUBSUBID1C}
$ aws ec2 delete-subnet ¥
--subnet-id ${PRVSUBID1A}
$ aws ec2 delete-subnet ¥
--subnet-id ${PRVSUBID1A}
インターネットゲートウェイ
削除
$ aws ec2 delete-internet-gateway ¥
--internet-gateway-id ${GTWYID}
VPC から デタッチ
$ aws ec2 detach-internet-gateway ¥
--internet-gateway-id ${GTWYID}
--vpc-id ${VPCID}
detach
で合っている(detouch
ではない )
セキュリティグループ
ALB で 使用分
$ aws ec2 delete-security-group ¥
--group-id ${SGID}
EC2 で 使用分
$ aws ec2 delete-security-group ¥
--group-id ${SGID}
RDS で 使用分
$ aws ec2 delete-security-group ¥
--group-id ${SGID}
Auto Scaling
起動テンプレート
$ aws ec2 delete-launch-template ¥
--launch-template-id ${対象起動テンプレートID}
Auto Scaling グループ
$ aws autoscaling delete-auto-scaling-group ¥
--auto-scaling-group-name aws-loadmap-asg
EC2
EIP
$ aws ec2 releace-address ¥
--allocation-id ${EIP割り当てID}
$ aws ec2 releace-address ¥
--allocation-id ${EIP割り当てID}
インスタンス
$ aws ec2 dterminate-instances ¥
--instance-ids ${INSTANCEID1} ${INSTANCEID2}
ALB
ターゲットグループ
$ aws elbv2 delete-target-group ¥
--target-group-arn ${TGTGRPID}
ALB
$ aws elbv2 delete-load-balancer ¥
--load-balancer-arn ${ELBID}
DB
DBサブネットグループ
$ aws rds delete-db-subnet-group ¥
--db-subnet-group-name aws-loadmap-rds-subnet-group
DBクラスタ
$ aws rds delete-db-cluster ¥
--db-cluster-identifier aws-loadmap-aurora-cluster ¥
--skip-final-snapshot
DBインスタンス
$ aws rds delete-db-instance ¥
--sb-instance-identifier aws-loadmap-aurora-instance-1
$ aws rds delete-db-instance ¥
--sb-instance-identifier aws-loadmap-aurora-instance-2
2.4
データベースの構築
5. MySQL のインストールと起動
$ sudo yum install -y mysql
4. インスタンス
接続
$ aws ssm start-session ¥
--target ${INSTANCEID}
確認
$ aws rds describe-db-instances ¥
--db-instance-identifier aws-loadmap-aurora-instance-1
$ aws rds describe-db-instances ¥
--db-instance-identifier aws-loadmap-aurora-instance-2
DBInstanceStatus
がavailable
になるまで待つ。
作成
$ aws rds create-db-instance ¥
--db-instance-identifier aws-loadmap-aurora-instance-1 ¥
--db-cluster-identifier aws-loadmap-aurora-cluster ¥
--engine aurora-mysql ¥
--db-instance-class db.t4g.medium ¥
--tags "Key=Name, Value=aws-loadmap-aurora-instance-1"
$ aws rds create-db-instance ¥
--db-instance-identifier aws-loadmap-aurora-instance-2 ¥
--db-cluster-identifier aws-loadmap-aurora-cluster ¥
--engine aurora-mysql ¥
--db-instance-class db.t4g.medium ¥
--tags "Key=Name, Value=aws-loadmap-aurora-instance-2"
3. DBクラスタ
確認
$ aws rds describe-db-clusters ¥
--db-cluster-identifier aws-loadmap-aurora-cluster
-
{ "DBClusters": [ : "Status": "available", //<- 確認 : "Endpoint": "aws-loadmap-aurora-cluster.XXX.ap-northeast-1.rds.amazonaws.com", //<- 確認 "ReaderEndpoint": "aws-loadmap-aurora-cluster.XXX.ap-northeast-1.rds.amazonaws.com", //<- 確認 : ] }
作成
$ aws rds create-db-cluster ¥
--db-cluster-identifier aws-loadmap-aurora-cluster ¥
--engine aurora-mysql ¥
--engine-version 8.0 ¥
--master-username ${user-name} ¥
--master-user-password ${password} ¥
--db-subnet-group-name aws-loadmap-rds-subnet-group ¥
--vpc-security-group-ids ${DBSGID} ¥
--tags "Key=Name, Value=aws-loadmap-aurora-cluster"
2. セキュリティグループ
ルールの追加
$ aws ec2 authorize-security-group-ingress ¥
--group-id ${DBSGID} ¥
--protocol tcp ¥
--port 3306 ¥
--source-group ${EC2SGID}
作成
$ aws ec2 create-security-group ¥
--description "Security group for aws loadmap aurora" ¥
--group-name "aws-loadmap-aurora-sg" ¥
--vpc-id "${VPCID}" ¥
--tag-specifications "ResourceType=security-group, Tags=[{Key=Name, Value=aws-loadmap-aurora-sg}]"
1. DBサブネットグループ
確認
$ aws rds describe-db-subnet-groups ¥
--db-subnet-group-name aws-loadmap-rds-subnet-group
-
{ "DBSubnetGroups": [ { : "SubnetGroupStatus": "Complete", //<- 確認 "Subnets": [ { : "SubnetStatus": "Active" //<- 確認 }, { : "SubnetStatus": "Active" //<- 確認 } ], : } ] }
作成
$ aws rds create-db-subnet-group ¥
--db-subnet-group-name aws-loadmap-rds-subnet-group ¥
--db-subnet-group-description "Rds subnet group for aws loadmap" ¥
--subnet-ids '["${PRVSUBID1A}","${PRVSUBID1C}"]'
2.3
サーバの構築
14. Auto Scaling グループ
予定数0にして終了(節約のため)
$ aws autoscaling update-auto-scaling-group ¥
--auto-scaling-group-name aws-loadmap-asg ¥
--min-size 0 ¥
--desired-capacity 0
確認
$ aws ec2 describe-instances ¥
--query "Reservations[].Instances[].InstanceId" ¥
--filter "Name=instance-state-code,Values=16"
予定数5に変更
$ aws autoscaling update-auto-scaling-group ¥
--auto-scaling-group-name aws-loadmap-asg ¥
--max-size 5 ¥
--desired-capacity 5
確認
$ aws ec2 describe-instances ¥
--query "Reservations[].Instances[].InstanceId" ¥
--filter "Name=instance-state-code,Values=16"
予定数2で起動
$ aws autoscaling create-auto-scaling-group ¥
--launch-template LaunchTemplateId=${LTMPLTID},Version='$Latest' ¥
--auto-scaling-group-name aws-loadmap-asg ¥
--min-size 1 ¥
--desired-capacity 2 ¥
--max-size 2 ¥
--vpc-zone-identifier "${PUBSUBID1A}, ${PUBSUBID1C}"
13. 起動テンプレート
ID の 確認
$ aws ec2 describe-launch-templates ¥
--launch-template-names aws-loadmap-template ¥
--query "LaunchTemplates[].LaunchTemplateId"
-
[ "lt-xxxxxxxxxxxxx" ]
作成
$ aws ec2 create-launch-template ¥
--launch-template-name aws-loadmap-template ¥
--launch-template-data file://launch-template.json
設定ファイル
launch-template.json
{
"IamInstanceProfile": {
"Name": "ami-loadmap-ec2-instance-profile"
},
"ImageId": "ami-0e3861265a3a335cc",
"InstanceType": "t3.micro",
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"VolumeSize": 8,
"DeleteOnTermination": true,
"VolumeType": "gp3"
}
}
],
"SecurityGroupIds": [
"${SGRPID}"
],
"TagSpecifications": [
{
"ResourceType": "instance",
"Tags": [
{
"Key": "Name",
"Value": "aws-loadmap-asg-instance"
}
]
}
]
}
12. EIP
EIP を EC2 インスタンスに関連付け
$ aws ec2 associate-address ¥
--instance-id ${ec2-1 のインスタンスID} ¥
--allocation-id ${eip-1 の AllocationId}
$ aws ec2 associate-address ¥
--instance-id ${ec2-2 のインスタンスID} ¥
--allocation-id ${eip-2 の AllocationId}
EIP を AWSアカウントに 割当
$ aws ec2 allocate-address ¥
--tag-specifications "ResourceType=elastic-ip, Tags=[{Key=Name, Value=aws-loadmap-eip-1}]"
$ aws ec2 allocate-address ¥
--tag-specifications "ResourceType=elastic-ip, Tags=[{Key=Name, Value=aws-loadmap-eip-2}]"
PublicIp
,AllocationId
の値をメモ。
10. ALB >> ブラウザから確認
ブラウザから確認
http://aws-loadmap-alb-123456789.ap-notheast-1.elb.amazon.aws.com
DNS名の確認
$ aws slbv2 describe-load-balancers ¥
--names aws-loadmap-alb ¥
--query LoadBalancers[].DNSName
9. ALB >> ターゲットグループ
ヘルスチェック
$ aws slbv2 describe-target-health ¥
--target-group-arn ${TGARN}
リスナの作成
- リスナ=どのような通信をターゲットグループに転送するのかの設定
$ aws elbv2 create-listener ¥
--load-balancer-arn ${ALBARN} ¥
--protocol HTTP ¥
--port 80 ¥
--default-actions Type=forward,TargetGroupArn=${TGARN}
インスタンス2台の登録
$ aws elbv2 register-targets ¥
--target-group-arn ${TGARN} ¥
--targets Id=${INSTANCEID1} Id=${INSTANCEID2}
確認(ターゲットグループID)
$ aws elbv2 describe-target-groups ¥
--names aws-loadmap-alb-tg ¥
--query TargetGroups[].TargetGroupArn
作成
$ aws elbv2 create-target-group ¥
--name aws-loadmap-alb-tg ¥
--protocol HTTP ¥
--port 80
--vpc-id "${VPCID}" ¥
--health-check-interval-seconds 10 ¥
--health-check-timeout-seconds 3 ¥
--healty-threshold-count 2 ¥
--tags Key=Name,Value=aws-loadmap-alb-sg
8. ALB
確認
$ aws slbv2 describe-load-balancers ¥
--names aws-loadmap-alb ¥
--query "LoadBalancers[].[LoadBalancerArn,State]"
作成
$ aws elbv2 create-load-balancer ¥
--name aws-loadmap-alb ¥
--subnets ${PUBSUBID1A} ${PUBSUBID1C} ¥
--security-groups ${ALBSGID} ¥
--tags Key=Name,Value=aws-loadmap-alb
- 10分ほどかかる。
7. ALB >> セキュリティグループ
設定(ALB -> EC2 接続を許可(セキュリティグループで))
$ aws ec2 authorize-security-group-ingress ¥
--group-id ${SGRPID} ¥
--protocol tcp ¥
--port 80 ¥
--source-group ${ALBSGID}
設定(読者 -> ALB 接続を許可(IPアドレスで))
$ aws ec2 authorize-security-group-ingress ¥
--group-id ${ALBSGID} ¥
--protocol tcp ¥
--port 80 ¥
--cidr ${読者のパブリックIP}/32
作成
$ aws ec2 create-security-group ¥
--description "Security group for aws loadmap alb" ¥
--group-name "aws-loadmap-alb-sg" ¥
--vpc-id "${VPCID}" ¥
--tag-specifications "ResourceType=security-group, Tags=[{Key=Name, Value=aws-loadmap-alb-sg}]"
6. イメージ(AMI)
接続[2台目]
$ aws ssm start-session ¥
--target ${INSTANCEID}
確認(インスタンスID)[2台目]
$ aws ec2 describe-instances ¥
--filters "Name=tag:Name, Values=aws-loadmap-ec2-1" ¥
--query "Reservations[].Instances[].InstanceId"
[
"i-xxxxxxxxxxxxxx"
]
イメージから起動[2台目]
$ aws ec2 run-instances ¥
--image-id ${AMIID} ¥
--count 1 ¥
--instance-type t3.micro ¥
--security-group-ids ${SGRPID} ¥
--subnet-id ${PUBSUBNETID} ¥
--iam-instance-profile Name=aws-loadmap-ec2-instance-profile ¥
--block-device-mappings "DeviceName=/dev/xvdz, Ebs={VolumeSize=8, DeleteOnTermination=true, VolumeType=gp3}" ¥
--tag-specifications "ResourceType=instance, Tags=[{Key=Name, Value=aws-loadmap-ec2-2}]"
確認(イメージID)
$ aws ec2 describe-images ¥
--filters "Name=tag:Name, Values=aws-loadmap-ec2-ami" ¥
--query "Images[].ImageId"
確認(状態)
$ aws ec2 describe-images ¥
--filters "Name=tag:Name, Values=aws-loadmap-ec2-ami" ¥
--query "Images[].State"
作成
$ aws ec2 create-image ¥
--instance-id ${INSTANCEID} ¥
--name "aws-loadmap-ec2-ami" ¥
--description "AMI for aws loadmap" ¥
--tag-specifications "ResourceType=image, Tags=[{Key=Name, Value=aws-loadmap-ec2-ami}]"
5. 接続〜Apacheの起ち上げ
ブラウザから確認
http://x.x.x.x
パブリック IP アドレスの確認
$ aws ec2 describe-instances ¥
--instance-ids ${INSTANCEID} ¥
--query "Reservations[].Instances[].PublicIpAddress"
退出
$ exit
Apache の起動
$ sudo systemctl start httpd
Apache の インストール
$ sudo yum install -y httpd
$ sudo yum update -y
IP アドレス(パブリック/プライベート)の確認
$ ip addr show
接続
$ aws ssm start-session ¥
--target ${INSTANCEID}
4. インスタンス
確認(プライベートIPアドレス)
$ aws ec2 describe-instances ¥
--instance-ids ${INSTANCEID} ¥
--query "Reservations[].Instances[].PrivateAddress" ¥
[ "10.0.x.x" ]
確認(ステータス)
$ aws ec2 describe-instance-status ¥
--instance-ids ${INSTANCEID}
{
"InstanceStatuses": [
{
:
"InstanceState": {
"Code": 16,
"Name": "running"
},
"InstanceStatus": {
"Details": [
{
"Name": "reachability",
"Status": "passed"
}
],
"Status": "ok"
},
"SystemStatus": {
"Details": [
{
"Name": "reachability",
"Status": "passed"
}
],
"Status": "ok"
}
}
]
}
確認(インスタンスID)
$ aws ec2 describe-instances ¥
--filters "Name=tag:Name, Values=aws-loadmap-ec2-1" ¥
--query "Reservations[].Instances[].InstanceId"
[
"i-xxxxxxxxxxxxxx"
]
起動
$ aws ec2 run-instances ¥
--image-id ami-0e3861265a3a335cc ¥
--count 1
--instance-type t3.micro ¥
--security-group-ids ${SGRPID} ¥
--subnet-id ${PUBSUBNETID} ¥
--iam-instance-profile Name=aws-loadmap-ec2-instance-profile ¥
--block-device-mappings "DeviceName=/dev/xvda,Ebs={VolumeSize=8, DeleteOnTermination=true, VolumeType=gp3}" ¥
--tag-specifications "ResourceType=instance, Tags=[{Key=Name, Value=aws-loadmap-ec2-1}]"
最新の Amazon Linux2 の AMI ID の確認
$ aws ssm get-parameters ¥
--names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 ¥
--query "Parameters[].Value"
3. インスタンスプロファイル
確認
$ aws iam get-instance-profile ¥
--instance-profile-name aws-loadmap-ec2-instance-profile ¥
--query "InstanceProfile.Roles[].[RoleName,AssumeRolePolicyDocument]"
IAM ロール の 引渡し
$ aws iam add-role-to-instance-profile ¥
--instance-profile-name aws-loadmap-ec2-instance-profile ¥
--role-name aws-loadmap-ec2-role
作成
$ aws iam create-instance-profile ¥
--instance-profile-name aws-loadmap-ec2-instance-profile
2. IAM ロール
確認
$ aws iam list-attached-role-policies ¥
--role-name aws-loadmap-ec2-role
IAM ロール に 権限 を 設定
$ aws iam attach-role-policy ¥
--role-name aws-loadmap-ec2-role ¥
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
IAM ロール を IAM ポリシー から 作成
$ aws iam create-role ¥
--role-name aws-loadmap-ec2-role ¥
--assume-role-policy-document file://ec2-role-trust-policy.json
IAM ポリシー プロファイルの作成
ec2-role-trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "ec2.amazonaws.com" },
"Action": "sts:AssumeRole"
}
]
}
1. セキュリティグループ
確認
$ aws ec2 describe-security-groups ¥
--filters "Name=tag:Name, Values=aws-loadmap-ec2-sg" ¥
--query "SecurityGroups[].IpPermissions"
設定(80番ポートを許可)
$ aws ec2 authorize-security-group-ingress ¥
--group-id ${SGRPID} ¥
--protocol tcp ¥
--port 80 ¥
--cidr ${読者のパブリックIP}/32
作成
$ aws ec2 create-security-group ¥
--description "Security group for aws loadmap ec2" ¥
--group-name "aws-loadmap-ec2-sg" ¥
--vpc-id "${VPCID}" ¥
--tag-specifications "ResourceType=security-group, Tags=[{Key=Name, Value=aws-loadmap-ec2-sg}]"
2.2
ネットワークの構築
5. パブリックサブネットへの設定
EC2 起動時にパブリックIPアドレスを拾うよう設定
$ aws ec2 modify-subnet-attribute ¥
--subnet-id ${PUBSUBID1A} ¥
--map-public-ip-on-launch
$ aws ec2 modify-subnet-attribute ¥
--subnet-id ${PUBSUBID1C} ¥
--map-public-ip-on-launch
パブリックサブネットへルートテーブルをアタッチ
$ aws ec2 associate-route-table ¥
--subnet-id ${PUBSUBID1A} ¥
--route-table-id ${ROUTETBLID} ¥
$ aws ec2 associate-route-table ¥
--subnet-id ${PUBSUBID1C} ¥
--route-table-id ${ROUTETBLID} ¥
4. ルートテーブル
確認 - ルート to インターネット
$ aws ec2 describe-route-tables ¥
--filters "Name=route-table-id, Values=${ROUTETBLID}" ¥
--query "RouteTables[].Routes" ¥
--output table
作成 - ルート to インターネット
$ aws ec2 create-route ¥
--route-table-id ${ROUTETBLID} ¥
--destination-cidr-block 0.0.0.0/0 ¥
--gateway-id ${IGWYID}
確認 - ルートテーブル
$ aws ec2 describe-route-tables ¥
--filters "Name=route-table-id, Values=${ROUTETBLID}" ¥
--query "RouteTables[].Routes"
--output table
作成 - ルートテーブル
$ aws ec2 create-route-table ¥
--vpc-id ${VPCID} ¥
--tag-specifications 'ResourceType=route-table, Tags=[{Key=Name, value=aws-loadmap-public-route-table}]'
3. インターネットゲートウェイ
VPC に 適用
$ aws ec2 attach-internet-gateway ¥
--internet-gateway-id ${IGWYID} ¥
--vpc-id ${VPCID}
作成
$ aws ec2 create-internet-gateway ¥
--tag-specifications 'ResourceType=internet-gateway, Tags=[{Key=Name, Value=aws-loadmap-igw}]'
2. サブネット
確認
$ aws ec2 describe-subnets ¥
--filters "Name=vpc-id, Values=${VPCID}" ¥
--query "Subnets[].[Tags.CidrBlock]"
作成
プライベートサブネット on 1c
$ aws ec2 create-subnet ¥
--vpc-id ${VPCID} ¥
--availability-zone ap-northeast-1c
--cidr-block 10.0.11.0/24
--tag-specifications 'ResourceType=subnet, Tags=[{Key=Name, Value=aws-loadmap-private-subnet-c'
プライベートサブネット on 1a
$ aws ec2 create-subnet ¥
--vpc-id ${VPCID} ¥
--availability-zone ap-northeast-1a
--cidr-block 10.0.10.0/24
--tag-specifications 'ResourceType=subnet, Tags=[{Key=Name, Value=aws-loadmap-private-subnet-a'
パブリックサブネット on 1c
$ aws ec2 create-subnet ¥
--vpc-id ${VPCID} ¥
--availability-zone ap-northeast-1c ¥
--cidr-block 10.0.1.0/24
--tag-specifications 'ResourceType=subnet, Tags=[{Key=Name, Value=aws-loadmap-public-subnet-c'
パブリックサブネット on 1a
$ aws ec2 create-subnet ¥
--vpc-id ${VPCID} ¥
--availability-zone ap-northeast-1a ¥
--cidr-block 10.0.0.0/24 ¥
--tag-specifications 'ResourceType=subnet, Tags=[{Key=Name, Value=aws-loadmap-public-subnet-a}]'
1. VPC
確認
$ aws ec2 describe-vpcs ¥
--filters "Name=tag:Name,Values=aws-loadmap-vpc" ¥
--query "Vpcs[].[State,VpcId]"
$ aws ec2 describe-vpcs
作成
$ aws ec2 create-vpc ¥
--cidr-block 10.0.0.0/16 ¥
--tag-specifications 'ResourceType=vpc, Tags=[{Key=Name, Value=aws-loadmap-vpc}]'
2.1
構築の基本
エラーメッセージへの対処:
- permission denied
- IAMロールやIAMポリシなどの設定を確認。
- usage:
- スペースの有無やスペルミスなどを確認。
- 500
- 権限の不足、時間経過による権限の揮発などがないか確認。
本書籍チュートリアルにて実施すること:
- ネットワークの構築
- サーバの構築
- データベースの構築