PCベンチマーク2019

 
カテゴリー Benchmark PC Windows   タグ

PCベンチマーク2019

2012年購入(Old)と2019年購入(New)の各種ベンチマーク比較。
2012年購入のPCに、新規購入した、RTX2070に交換した(Old+)も測定。

総評

ハードウェア構成を変更していないSSDも性能が引き出されてスコアアップしている。

ベンチマーク 項目 スコア(Old) スコア(Old+) スコア(New)
PassMark Rating 2962.7 3152.7 4438.9
PassMark CPU 7685.9 7517.0 17145.1
PassMark 2D Graphics 549.4 589.4 592.3
PassMark 3D Graphics 3828.2 11704.6 15161.5
PassMark Memory 2428.9 2421.1 1996.0
PassMark Disk 1334.7 1338.6 4377.4
CineBench CPU 1069pts 1058pts 3943pts
CineBench CPU(Single Core) 288pts 430pts
CineBench MP Ratio 3.71x 9.17x
FF14Bench 1920x1080 4370(快適) 12012(非常に快適) 13982(非常に快適)
FF15Bench 1920x1080 1648(動作困難) 8527(快適) 10939(とても快適)
DQXBench 1920x1080 13894(すごく快適) 18222(すごく快適)
PCMark10 Score 3546 5781
3DMark Score 5020 8460

DQベンチで、Oldは標準品質、Newは最高品質の実行

PC構成

PC構成(Old)

構成要素 ハードウェア名 ハードウェア構成 価格 購入日 当初価格 発売日
CPU Intel Core i5-3550 3.3GHz 4Core/4Thread 16,330円 2012/07/22 ?円 2012/04/xx
MotherBoard ASUS P8H77-V ATX, Intel H77 Chipset 7,799円 2012/07/22 11,980円 2012/04/xx
Memory ADATA AX3U1600GC4G9-2G DDR3 1600 4GB 2枚 3,500円 2012/07/22 ?円 2011/12/xx
Memory CFD Elixir W3U1600HQ-4G DDR3 1600 4GB 2枚 3,263円 2013/01/18 ?円 2012/03/xx
GPU GIGABYTE GTX 560 Ti GV-N560OC-1GI NVIDIA Geforce GTX 560 Ti 13,900円 2012/07/25 29,000円 2011/02/xx
Disk Ultimate SU650 ASU650SS-960GT-X SATA6Gbps 960GB 12,980円 2019/01/25 19,980円 2018/09/17
PowerSupply CORSAIR TX650 CMPSU-650TXV2 ATX650W 7,850円 2012/07/22 ?円 2011/03/xx

PC構成(Old+)

P8H77Vの古いファームウェアはUEFIに対応していなかったので、BIOSブートになっていた。

GPU-Z width=320

しかし、RTX2070はBIOSブートできず、UEFIブートで構成する必要がある。
UEFIブートはディスクの形式がMBRではなくGPTでくてはならないが、変換はできない。

MBR to GPT 1 width=640

MBR to GPT 2 width=640

P8H77Vのファームウェアを最新化し、OSを再インストールでUEFIブートに変更。

PC構成(New)

構成要素 ハードウェア名 ハードウェア構成 価格 購入日 当初価格 発売日
CPU AMD Ryzen 7 2700X Gold Edition 3.7GHz 8Core/16Threa 27,518円 2019/08/29 38,000円 2019/04/xx
MotherBoard ASUS TUF B450M-PLUS Gaming micro ATX, B450 Chipse 9,180円 2019/08/29 13,007円 2018/07/31
Memory CORSAIR CMK32GX4M2A2666C16 DDR4 2666(21300) 16GB 2枚 14,960円 2019/08/29 37,859円 2015/08/xx
Memory -円 xxxx/xx/xx -円 xxxx/xx/xx
GPU Palit NE62070015P2-1062A NVIDIA Geforce RTX 2070 8G 40,932円 2019/08/26 69,930円 2018/11/13
Disk Ultimate SU650 ASU650SS-960GT-X SATA6Gbps 960GB 12,980円 2019/01/25 19,980円 2018/09/17
PowerSupply CORSAIR HX850i CP-9020073-JP ATX850W 80+P 10,368円 2019/08/31 ?円 2014/08/xx

ベンチマーク

ベンチマークソフト

ベンチマーク結果(テキスト)

ベンチマーク(Old)

Passmark 1 of 3 width=640

Passmark 2 of 3 width=640

Passmark 3 of 3 width=640

CineBench 1 of 3 width=640

CineBench 2 of 3 width=640

CineBench 3 of 3 width=640

FF15 Bench width=640

FF14 Bench width=640

DQX Bench width=640

PCMark10 width=640

3DMark width=640

ベンチマーク(Old+)

Passmark 1 of 4 width=640

Passmark 2 of 4 width=640

Passmark 3 of 4 width=640

Passmark 4 of 4 width=640

Passmark cpu width=640

Passmark 2d graphics width=640

Passmark 3d graphics width=640

Passmark memory width=640

CineBench width=640

FF15 Bench width=640

FF15 Bench 4K width=640

FF14 Bench width=640

ベンチマーク(New)

Passmark 1 of 2 width=640

Passmark 2 of 2 width=640

Passmark cpu width=640

Passmark 2d graphics width=640

Passmark 3d graphics width=640

Passmark memory width=640

Passmark disk width=640

CineBench 1 of 2 width=640

CineBench 2 of 2 width=640

FF15 Bench normal width=640

FF15 Bench high width=640

FF14 Bench width=640

DQX Bench width=640

DQX Bench high 1 of 3 width=640

DQX Bench high 2 of 3 width=640

DQX Bench high 3 of 3 width=640

PCMark10 width=640

3DMark width=640

HDbench 2k width=640

HDbench 4k width=640

コメント・シェア

Windows 10をクリーンインストール記録

 
カテゴリー PC Windows   タグ

インストールメディアの作成

最新のWindows 10インストーラを作成してWindows 10をインストールする。

作成したインストーラー用USBメモリをカスタマイズして、ライセンスコードを自動入力させる設定を行う。

自動入力はsourcesフォルダーに以下の内容のpid.txtファイルを作成する。

1
2
[PID]
Value=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

Windows 10のインストール

特記事項なし。

nVidiaコントロールパネルのインストール

Windows Storeでnvidiaコントロールパネルのインストール

nVidiaコントロールパネルのインストール width=640

nVidiaドライバーのインストール

最新のnVidiaドライバからダウンロード。必要なドライバーのみ選択してインストール

  1. グラフィックスドライバー
  2. HDオーディオドライバー
  3. USBC Driver

最新のnVidiaドライバインストール1 width=640

最新のnVidiaドライバインストール2 width=640

最新のnVidiaドライバインストール3 width=640

最新のnVidiaドライバインストール4 width=480

最新のnVidiaドライバインストール5 width=480

最新のnVidiaドライバインストール6 width=480

最新のnVidiaドライバインストール7 width=480

最新のnVidiaドライバインストール8 width=480

Windowsサンドボックスの有効化

Windowsの機能の有効化または無効化Windowsサンドボックスを有効化する

windowsサンドボックス width=480

不要なWindowsアプリのアンインストール

PowerShellを管理者として実行してCandyCrushなどのいらないゲームを削除

1
2
3
4
Get-AppxPackage king.com.CandyCrushFriends | Remove-AppxPackage
Get-AppxPackage king.com.FarmHeroesSaga | Remove-AppxPackage
Get-AppxPackage Microsoft.ZuneMusic | Remove-AppxPackage
Get-AppxPackage SpotifyAB.SpotifyMusic | Remove-AppxPackage

Windows 10の初期設定

最近使用したファイル/よく使うファイルの無効化

エクスプローラーなどで表示される最近使用したファイルよく使うファイルを無効化する。

1
2
3
Set-ItemProperty -Path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer' -Name "ShowRecent" -Value 0
Set-ItemProperty -Path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer' -Name "ShowFrequent" -Value 0
gpupdate

コルタナの検索履歴の無効化

1
2
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows Search' -Name "SetupCompletedSuccessfully" -Value 0
gpupdate

タイムラインの無効化

1
2
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\System' -Name "EnableActivityFeed" -Value 0
gpupdate

Windows 10の全般設定のプライバシーオプションを変更する

設定 -> 全般

Windows10の全般設定 width=640

Microsoft Storeの設定のアプリの自動更新等を無効化する

MicrosoftStore -> 設定

Microsoft Storeの設定 width=640

Office 365のインストール

Visual Studio Codeのインストール

Editor: Font FamilyMS Gothic(等幅フォント)に変更する。
Terminal › Integrated: Font Familymonospaceのみしか対応していない。

1
'MS Gothic', Consolas, 'Courier New', monospace

VSCodeフォントファミリー設定 width=800

STEAMのインストール

Firefoxのインストール

履歴を残さないようにする

Firefoxの履歴設定 width=640

Firefoxのプライバシー設定 width=640

設定後のトップページ width=640

プライベートウインドウで起動させる
C:\ProgramData\Microsoft\Windows\Start Menu\ProgramsFirefoxショートカット-privateを追加

プライベートウインドウ width=480

Chromeのインストール

シークレットモードで起動させる
C:\ProgramData\Microsoft\Windows\Start Menu\ProgramsGoogle Chromeショートカットに--incognitoを追加

シークレットモード width=480

コメント・シェア

S3バケットを作成する

 
カテゴリー AWS   タグ

空のS3バケットを作成する

s3_default.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
AWSTemplateFormatVersion: '2010-09-09'
Description: S3 Normal Bucket

# ------------------------------------------------------------ #
# Input Parameters
# ------------------------------------------------------------ #
Parameters:
S3BucketName:
Description: Type of this BacketName.
Type: String

Resources:
# ------------------------------------------------------------ #
# S3
# ------------------------------------------------------------ #
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${S3BucketName}
AccessControl: Private
PublicAccessBlockConfiguration:
BlockPublicAcls: True
BlockPublicPolicy: True
IgnorePublicAcls: True
RestrictPublicBuckets: True

# ------------------------------------------------------------ #
# Output Parameters
# ------------------------------------------------------------ #
Outputs:
S3BucketName:
Value: !Ref S3Bucket

parameters.json

指定するバケット名はAWSで一意の物にする必要があるため、よくあるキーワードなどはエラーになる。ドメイン名などを付与して一意な名前にする。

1
2
3
4
5
6
[
{
"ParameterKey": "S3BucketName",
"ParameterValue": "testxxxxxxxxxx"
}
]

デフォルトのバケットを作成する

Cloudformationでバケットを作成する。

1
2
3
4
5
6
$ aws cloudformation create-stack --stack-name tutorial-s3-bucket --template-body "file://./s3_default.yml" --parameters "file://./parameters.json"
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXX:stack/tutorial-s3-bucket/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
$ aws s3 ls
2019-11-26 19:30:00 testxxxxxxxxxx

AWSコンソールで作成された状態を確認。

S3バケット width=640

S3バケット width=640

S3のライフサイクル設定で有効期間を設定する

s3_expiration.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
AWSTemplateFormatVersion: '2010-09-09'
Description: S3Bcuket with expiration

# ------------------------------------------------------------ #
# Input Parameters
# ------------------------------------------------------------ #
Parameters:
S3BucketName:
Description: Type of this BacketName.
Type: String

Resources:
# ------------------------------------------------------------ #
# S3
# ------------------------------------------------------------ #
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${S3BucketName}
AccessControl: Private
PublicAccessBlockConfiguration:
BlockPublicAcls: True
BlockPublicPolicy: True
IgnorePublicAcls: True
RestrictPublicBuckets: True
LifecycleConfiguration:
Rules:
- Id: LifeCycleRule
Status: Enabled
ExpirationInDays: 365

# ------------------------------------------------------------ #
# Output Parameters
# ------------------------------------------------------------ #
Outputs:
S3BucketName:
Value: !Ref S3Bucket

ライフサイクル設定を追加してスタック更新

1
2
3
4
$ aws cloudformation update-stack --stack-name tutorial-s3-bucket --template-body "file://./s3_expiration.yml" --parameters "file://./parameters.json"
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXX:stack/tutorial-s3-bucket/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

AWSコンソール上で確認すると、ライフサイクルルールが作成されている。

S3バケット width=640

コメント・シェア

ELB(ALB)でマルチAZロードバランシング

 
カテゴリー AWS   タグ

ElasticLoadbalancer(ApplicationLoadBalancer)によるロードバランシング

alb-ec2.yml (EC2)

ネットワークはマルチAZPublicSubnetAPublicSubnetBのサブネットを持つVPCとして作成。
各サブネットにそれぞれEC2インスタンスを配置する。

インスタンスに対するSSHによる管理アクセスは許可するが、WebコンテンツへのアクセスはALBからのみしか許可しない。
ただし、ALBのIPアドレスを明示できないので、同一VPCからのアクセスを許可する。
WebSecurityGroupSecurityGroupIngresのみNLB編と異なる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# ------------------------------------------------------------ #
# EC2
# ------------------------------------------------------------ #
ManagementSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable SSH access via port 22
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-management-sg"
SecurityGroupIngress:
- CidrIp: !Ref AllowSshFrom
IpProtocol: tcp
FromPort: '22'
ToPort: '22'

WebSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable HTTP(S) access via port 80+443
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-web-sg"
SecurityGroupIngress:
- CidrIp: !Ref VpcCidrBlock
IpProtocol: tcp
FromPort: '80'
ToPort: '80'
- CidrIp: !Ref VpcCidrBlock
IpProtocol: tcp
FromPort: '443'
ToPort: '443'

PublicSubetAInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref ImageID
InstanceType: t2.micro
SecurityGroupIds:
- Fn::GetAtt: [ ManagementSecurityGroup, GroupId ]
- Fn::GetAtt: [ WebSecurityGroup, GroupId ]
KeyName: !Ref KeyName
SubnetId: !Ref PublicSubnetA
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-PublicSubnetA-Instance"
UserData: !Base64
Fn::Sub: |
#!/bin/bash
apt-get update
apt-get install -y apache2
echo "<HTML>PUBLIC SUBNET A</HTML>" > /var/www/html/index.html

PublicSubetBInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref ImageID
InstanceType: t2.micro
SecurityGroupIds:
- Fn::GetAtt: [ ManagementSecurityGroup, GroupId ]
- Fn::GetAtt: [ WebSecurityGroup, GroupId ]
KeyName: !Ref KeyName
SubnetId: !Ref PublicSubnetB
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-PublicSubnetB-Instance"
UserData: !Base64
Fn::Sub: |
#!/bin/bash
apt-get update
apt-get install -y apache2
echo "<HTML>PUBLIC SUBNET B</HTML>" > /var/www/html/index.html

alb-ec2.yml (ALB)

  • セキュリティグループを適用する
  • ヘルスチェックはHTTPによるステータスコードのチェック
  • スティッキーの設定は無効化(ロードバランシングの様子を見たい)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# ------------------------------------------------------------ #
# ElasticLoadBalancer
# ------------------------------------------------------------ #
InternetALBSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable HTTP(S) access via port 80+443
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-lb-sg"
SecurityGroupIngress:
- CidrIp: 0.0.0.0/0
FromPort: '80'
IpProtocol: tcp
ToPort: '80'
- CidrIp: 0.0.0.0/0
FromPort: '443'
IpProtocol: tcp
ToPort: '443'

InternetALBTargetGroup:
Type: "AWS::ElasticLoadBalancingV2::TargetGroup"
Properties:
VpcId: !Ref VPC
Name: !Sub "${AWS::StackName}-tg"
Protocol: HTTP
Port: 80
HealthCheckProtocol: HTTP
HealthCheckPath: "/"
HealthCheckPort: "traffic-port"
HealthyThresholdCount: 2
UnhealthyThresholdCount: 2
HealthCheckTimeoutSeconds: 5
HealthCheckIntervalSeconds: 10
Matcher:
HttpCode: 200
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-tg"
TargetGroupAttributes:
- Key: "deregistration_delay.timeout_seconds"
Value: 300
- Key: "stickiness.enabled"
Value: false
- Key: "stickiness.type"
Value: lb_cookie
- Key: "stickiness.lb_cookie.duration_seconds"
Value: 86400
Targets:
- Id: !Ref PublicSubetAInstance
Port: 80
- Id: !Ref PublicSubetBInstance
Port: 80

InternetALB:
Type: "AWS::ElasticLoadBalancingV2::LoadBalancer"
Properties:
Name: !Sub "${AWS::StackName}-alb"
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-alb"
# ロードバランサーのタイプ (default: application)
Type: application
Scheme: "internet-facing"
LoadBalancerAttributes:
- Key: "deletion_protection.enabled"
Value: false
- Key: "idle_timeout.timeout_seconds"
Value: 60
SecurityGroups:
- !Ref InternetALBSecurityGroup
Subnets:
- !Ref PublicSubnetA
- !Ref PublicSubnetB

InternetALBListener:
Type: "AWS::ElasticLoadBalancingV2::Listener"
Properties:
DefaultActions:
- TargetGroupArn: !Ref InternetALBTargetGroup
Type: forward
LoadBalancerArn: !Ref InternetALB
Port: 80
Protocol: HTTP

# ------------------------------------------------------------ #
# Output Parameters
# ------------------------------------------------------------ #
Outputs:
PublicSubnetAInstanceIP:
Description: "Management Public IP"
Value: !GetAtt PublicSubetAInstance.PublicIp
PublicSubnetBInstanceIP:
Description: "Management Public IP"
Value: !GetAtt PublicSubetBInstance.PublicIp
InternetALBPublicDomainName:
Description: "Public access Domain Name"
Value: !GetAtt InternetALB.DNSName

システムの構築する

1
2
3
4
$ aws cloudformation update-stack --stack-name tutorial-alb-ec2 --template-body "file://./alb-ec2.yml" --parameters "file://./parameters.json"
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXXXX:stack/tutorial-alb-ec2/XXXXXXXXXXXXXXXXXXX"
}

作成が完了したら、ロードバランサーに付与されたDNSNameでアクセスする。

1
2
$ aws elbv2 describe-load-balancers | jq -r '.LoadBalancers[] | select (.LoadBalancerName == "tutorial-alb-ec2-alb") | .DNSName'
tutorial-alb-ec2-alb-XXXXXXXXXX.ap-northeast-1.elb.amazonaws.com

ALBロードバランシング width=640

ALBロードバランシング width=640

接続できないときに

ヘルスチェックの状況を確認する

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
$aws elbv2 describe-target-groups | jq -r '.TargetGroups[] | select (.TargetGroupName == "tutorial-alb-ec2-tg")'
{
"TargetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:XXXXXXXXXXX:targetgroup/tutorial-alb-ec2-tg/XXXXXXXXXXXXXX",
"TargetGroupName": "tutorial-alb-ec2-tg",
"Protocol": "HTTP",
"Port": 80,
"VpcId": "vpc-XXXXXXXXXXXXXXXXXXX",
"HealthCheckProtocol": "HTTP",
"HealthCheckPort": "traffic-port",
"HealthCheckEnabled": true,
"HealthCheckIntervalSeconds": 10,
"HealthCheckTimeoutSeconds": 5,
"HealthyThresholdCount": 2,
"UnhealthyThresholdCount": 2,
"HealthCheckPath": "/",
"Matcher": {
"HttpCode": "200"
},
"LoadBalancerArns": [
"arn:aws:elasticloadbalancing:ap-northeast-1:XXXXXXXXXXX:loadbalancer/app/tutorial-alb-ec2-alb/XXXXXXXXXXXXXXXXXXX"
],
"TargetType": "instance"
}

$aws elbv2 describe-target-groups | jq -r '.TargetGroups[] | select (.TargetGroupName == "tutorial-alb-ec2-tg") | .TargetGroupArn'
arn:aws:elasticloadbalancing:ap-northeast-1:XXXXXXXXXXX:targetgroup/tutorial-alb-ec2-tg/XXXXXXXXXXXXXX

$aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:ap-northeast-1:XXXXXXXXXXX:targetgroup/tutorial-alb-ec2-tg/XXXXXXXXXXXXXX
{
"TargetHealthDescriptions": [
{
"Target": {
"Id": "i-XXXXXXXXXXXXXXXXXXX",
"Port": 80
},
"HealthCheckPort": "80",
"TargetHealth": {
"State": "unhealthy",
"Reason": "Target.ResponseCodeMismatch",
"Description": "Health checks failed with these codes: [502]"
}
},
{
"Target": {
"Id": "i-XXXXXXXXXXXXXXXXXXX",
"Port": 80
},
"HealthCheckPort": "80",
"TargetHealth": {
"State": "unhealthy",
"Reason": "Target.ResponseCodeMismatch",
"Description": "Health checks failed with these codes: [502]"
}
}
]
}

$aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:ap-northeast-1:XXXXXXXXXXX:targetgroup/tutorial-alb-ec2-tg/XXXXXXXXXXXXXX
{
"TargetHealthDescriptions": [
{
"Target": {
"Id": "i-XXXXXXXXXXXXXXXXXXX",
"Port": 80
},
"HealthCheckPort": "80",
"TargetHealth": {
"State": "healthy"
}
},
{
"Target": {
"Id": "i-XXXXXXXXXXXXXXXXXXX",
"Port": 80
},
"HealthCheckPort": "80",
"TargetHealth": {
"State": "healthy"
}
}
]
}

コメント・シェア

ELB(NLB)でマルチAZロードバランシング

 
カテゴリー AWS   タグ

ElasticLoadbalancer(NetworkLoadBalancer)によるロードバランシング

nlb-ec2.yml (EC2)

ネットワークはマルチAZPublicSubnetAPublicSubnetBのサブネットを持つVPCとして作成。
各サブネットにそれぞれEC2インスタンスを配置する。

NLBはクライアントからのリクエストを終端せずにEC2インスタンスへ中継するため、Webコンテンツへのアクセスをすべて許可する。
WebSecurityGroupSecurityGroupIngresのみALB編と異なる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# ------------------------------------------------------------ #
# EC2
# ------------------------------------------------------------ #
ManagementSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable SSH access via port 22
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-management-sg"
SecurityGroupIngress:
- CidrIp: !Ref AllowSshFrom
IpProtocol: tcp
FromPort: '22'
ToPort: '22'

WebSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable HTTP(S) access via port 80+443
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-web-sg"
SecurityGroupIngress:
- CidrIp: 0.0.0.0/0
IpProtocol: tcp
FromPort: '80'
ToPort: '80'
- CidrIp: 0.0.0.0/0
IpProtocol: tcp
FromPort: '443'
ToPort: '443'

PublicSubetAInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref ImageID
InstanceType: t2.micro
SecurityGroupIds:
- Fn::GetAtt: [ ManagementSecurityGroup, GroupId ]
- Fn::GetAtt: [ WebSecurityGroup, GroupId ]
KeyName: !Ref KeyName
SubnetId: !Ref PublicSubnetA
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-PublicSubnetA-Instance"
UserData: !Base64
Fn::Sub: |
#!/bin/bash
apt-get update
apt-get install -y apache2
echo "<HTML>PUBLIC SUBNET A</HTML>" > /var/www/html/index.html

PublicSubetBInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref ImageID
InstanceType: t2.micro
SecurityGroupIds:
- Fn::GetAtt: [ ManagementSecurityGroup, GroupId ]
- Fn::GetAtt: [ WebSecurityGroup, GroupId ]
KeyName: !Ref KeyName
SubnetId: !Ref PublicSubnetB
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-PublicSubnetB-Instance"
UserData: !Base64
Fn::Sub: |
#!/bin/bash
apt-get update
apt-get install -y apache2
echo "<HTML>PUBLIC SUBNET B</HTML>" > /var/www/html/index.html

nlb-ec2.yml (NLB)

  • ロードバランサーのタイプとしてType: networkを明示する
  • セキュリティグループを適用できない
  • ヘルスチェックはTCPによるポートチェック
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# ------------------------------------------------------------ #
# ElasticLoadBalancer
# ------------------------------------------------------------ #
InternetNLBTargetGroup:
Type: "AWS::ElasticLoadBalancingV2::TargetGroup"
Properties:
VpcId: !Ref VPC
Name: !Sub "${AWS::StackName}-tg"
Protocol: TCP
Port: 80
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-tg"
TargetGroupAttributes:
- Key: "deregistration_delay.timeout_seconds"
Value: 300
Targets:
- Id: !Ref PublicSubetAInstance
Port: 80
- Id: !Ref PublicSubetBInstance
Port: 80

InternetNLB:
Type: "AWS::ElasticLoadBalancingV2::LoadBalancer"
Properties:
Name: !Sub "${AWS::StackName}-nlb"
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-nlb"
# ロードバランサーのタイプ (default: application)
Type: network
Scheme: "internet-facing"
Subnets:
- !Ref PublicSubnetA
- !Ref PublicSubnetB

InternetNLBListener:
Type: "AWS::ElasticLoadBalancingV2::Listener"
Properties:
DefaultActions:
- TargetGroupArn: !Ref InternetNLBTargetGroup
Type: forward
LoadBalancerArn: !Ref InternetNLB
Port: 80
Protocol: TCP

# ------------------------------------------------------------ #
# Output Parameters
# ------------------------------------------------------------ #
Outputs:
PublicSubnetAInstanceIP:
Description: "Management Public IP"
Value: !GetAtt PublicSubetAInstance.PublicIp
PublicSubnetBInstanceIP:
Description: "Management Public IP"
Value: !GetAtt PublicSubetBInstance.PublicIp
InternetNLBPublicDomainName:
Description: "Public access Domain Name"
Value: !GetAtt InternetNLB.DNSName

システムの構築する

1
2
3
4
$ aws cloudformation update-stack --stack-name tutorial-nlb-ec2 --template-body "file://./nlb-ec2.yml" --parameters "file://./parameters.json"
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXXXX:stack/tutorial-nlb-ec2/XXXXXXXXXXXXXXXXXXX"
}

作成が完了したら、ロードバランサーに付与されたDNSNameでアクセスする。

1
2
$ aws elbv2 describe-load-balancers | jq -r '.LoadBalancers[] | select (.LoadBalancerName == "tutorial-nlb-ec2-nlb") | .DNSName'
tutorial-alb-ec2-nlb-XXXXXXXXXXXXXXXX.ap-northeast-1.amazonaws.com

NLBロードバランシング width=640

同じコネクションからのアクセスは同じインスタンスに振られる。
ロードバランシングの様子を見たい場合は別のブラウザ等でアクセス。

コメント・シェア

マルチAZ構成のVPCを作成する

 
カテゴリー AWS   タグ

料金

VPC自体の料金は無料。AWSサイト間のVPN接続やAWS PrivateLink、NAT Gatewayは料金が発生する。

マルチAZ構成のVPCを作成する

vpc.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
AWSTemplateFormatVersion: '2010-09-09'
Description: MultiAZ VPC

# ------------------------------------------------------------ #
# Input Parameters
# ------------------------------------------------------------ #
Parameters:
VpcCidrBlock:
Description: Vpc CIDR block
Type: String
Default: 10.0.0.0/16
PublicSubnetCidrBlockA:
Description: Vpc CIDR block
Type: String
Default: 10.0.0.0/24
PublicSubnetCidrBlockB:
Description: Vpc CIDR block
Type: String
Default: 10.0.1.0/24

Resources:
# ------------------------------------------------------------ #
# VPC
# ------------------------------------------------------------ #
VPC:
Type: "AWS::EC2::VPC"
Properties:
CidrBlock: !Ref VpcCidrBlock
EnableDnsSupport: 'true'
EnableDnsHostnames: 'true'
InstanceTenancy: default
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-VPC"

InternetGateway:
Type: "AWS::EC2::InternetGateway"
Properties:
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-igw"
AttachInternetGateway:
Type: "AWS::EC2::VPCGatewayAttachment"
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref InternetGateway
PublicRouteTable:
Type: "AWS::EC2::RouteTable"
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-rtb"
PublicRoute:
Type: "AWS::EC2::Route"
DependsOn: InternetGateway
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: "0.0.0.0/0"
GatewayId: !Ref InternetGateway

PublicSubnetA:
Type: "AWS::EC2::Subnet"
Properties:
VpcId: !Ref VPC
CidrBlock: !Ref PublicSubnetCidrBlockA
AvailabilityZone: !Select [ "0", !GetAZs { "Ref": "AWS::Region" } ]
MapPublicIpOnLaunch: true
PublicSubnetARouteTableAssociation:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PublicSubnetA
RouteTableId: !Ref PublicRouteTable

PublicSubnetB:
Type: "AWS::EC2::Subnet"
Properties:
VpcId: !Ref VPC
CidrBlock: !Ref PublicSubnetCidrBlockB
AvailabilityZone: !Select [ "1", !GetAZs { "Ref": "AWS::Region" } ]
MapPublicIpOnLaunch: true
PublicSubnetBRouteTableAssociation:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PublicSubnetB
RouteTableId: !Ref PublicRouteTable

# ------------------------------------------------------------ #
# Output Parameters
# ------------------------------------------------------------ #
Outputs:
myVPC:
Value: !Ref VPC
myVPCCidrBlock:
Value: !GetAtt VPC.CidrBlock
Description: VPC CidrBlock

myPublicSubnetA:
Value: !Ref PublicSubnetA
myPublicSubnetAAvailabilityZone:
Value: !GetAtt PublicSubnetA.AvailabilityZone
Description: PublicSubnetA AvailabilityZone
# CidrBlocksプロパティはないので入力パラメータをそのまま表示
myPublicSubnetACidrBlock:
Value: !Ref PublicSubnetCidrBlockA
Description: PublicSubnetA Ipv4CidrBlocks
#myPublicSubnetAIpv6CidrBlock:
# Value: !GetAtt PublicSubnetA.Ipv6CidrBlocks
# Description: PublicSubnetA Ipv6CidrBlocks

myPublicSubnetB:
Value: !Ref PublicSubnetB
myPublicSubnetBAvailabilityZone:
Value: !GetAtt PublicSubnetB.AvailabilityZone
Description: PublicSubnetB AvailabilityZone
# CidrBlocksプロパティはないので入力パラメータをそのまま表示
myPublicSubnetBCidrBlock:
Value: !Ref PublicSubnetCidrBlockB
Description: PublicSubnetB Ipv4CidrBlocks
#myPublicSubnetBIpv6CidrBlock:
# Value: !GetAtt PublicSubnetB.Ipv6CidrBlocks
# Description: PublicSubnetB Ipv6CidrBlocks

動的にAvailabilityZoneを選択する

GetAZsでリージョンを指定してAvailabilityZoneの一覧を取得し、Selectでそのうち1つを選択する。

1
AvailabilityZone: !Select [ "1", !GetAZs { "Ref": "AWS::Region" } ]

parameters.json

使用するIPアドレス範囲を指定する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
{
"ParameterKey": "VpcCidrBlock",
"ParameterValue": "192.168.0.0/16"
},
{
"ParameterKey": "PublicSubnetCidrBlockA",
"ParameterValue": "192.168.100.0/24"
},
{
"ParameterKey": "PublicSubnetCidrBlockB",
"ParameterValue": "192.168.200.0/24"
}
]

VPCの作成

GetAZで選択されたAvailabilityZoneとして異なるap-northeast-1aap-northeast-1cのサブネットが作成されている。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$ aws cloudformation describe-stacks | jq -r '.Stacks[].Outputs | sort_by(.OutputKey) | .[]'
{
"OutputKey": "myPublicSubnetA",
"OutputValue": "subnet-06d47dfd5fe6621a2"
}
{
"OutputKey": "myPublicSubnetAAvailabilityZone",
"OutputValue": "ap-northeast-1a",
"Description": "PublicSubnetA AvailabilityZone"
}
{
"OutputKey": "myPublicSubnetACidrBlock",
"OutputValue": "192.168.100.0/24",
"Description": "PublicSubnetA Ipv4CidrBlocks"
}
{
"OutputKey": "myPublicSubnetB",
"OutputValue": "subnet-07d0e41e7633178cf"
}
{
"OutputKey": "myPublicSubnetBAvailabilityZone",
"OutputValue": "ap-northeast-1c",
"Description": "PublicSubnetB AvailabilityZone"
}
{
"OutputKey": "myPublicSubnetBCidrBlock",
"OutputValue": "192.168.200.0/24",
"Description": "PublicSubnetB Ipv4CidrBlocks"
}
{
"OutputKey": "myVPC",
"OutputValue": "vpc-0cd9bbdf94a983c47"
}
{
"OutputKey": "myVPCCidrBlock",
"OutputValue": "192.168.0.0/16",
"Description": "VPC CidrBlock"
}

利用可能なAvailabilityZone

aws-cliaws ec2 describe-availability-zonesで確認できる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ aws ec2 describe-availability-zones
{
"AvailabilityZones": [
{
"State": "available",
"OptInStatus": "opt-in-not-required",
"Messages": [],
"RegionName": "ap-northeast-1",
"ZoneName": "ap-northeast-1a",
"ZoneId": "apne1-az4",
"GroupName": "ap-northeast-1",
"NetworkBorderGroup": "ap-northeast-1"
},
{
"State": "available",
"OptInStatus": "opt-in-not-required",
"Messages": [],
"RegionName": "ap-northeast-1",
"ZoneName": "ap-northeast-1c",
"ZoneId": "apne1-az1",
"GroupName": "ap-northeast-1",
"NetworkBorderGroup": "ap-northeast-1"
},
{
"State": "available",
"OptInStatus": "opt-in-not-required",
"Messages": [],
"RegionName": "ap-northeast-1",
"ZoneName": "ap-northeast-1d",
"ZoneId": "apne1-az2",
"GroupName": "ap-northeast-1",
"NetworkBorderGroup": "ap-northeast-1"
}
]
}

コメント・シェア

料金

EC2 の使用は、1 秒ごとに課金されます (最小課金時間は 60 秒)。同様に、EBS ボリュームのプロビジョニング済みストレージも、1 秒ごとに課金されます (最小課金時間は 60 秒)。秒単位の課金は以下で起動されるインスタンスに適用されます。
オンデマンドの予約済みスポットフォーム
すべてのリージョンとアベイラビリティーゾーン
Amazon Linux および Ubuntu
データ転送、Elastic IP アドレス、EBS 最適化インスタンスといった関連費用の詳細については、オンデマンドの料金ページを参照してください。

無料利用枠
12 か月間無料
Amazon EC2
750 時間/月
750 時間/月の Linux、RHEL、または SLES t2.micro インスタンスの使用
750 時間/月の Windows t2.micro インスタンスの使用

EC2はt2.microで750時間無料枠あり

SSHキーペアを作成する

SSHログインで使用するキーペアの作成はAmazon EC2 コンソールのキーペアで行う。
CloudFormationで作成することはできない。

キーペアの作成 width=640

キーペアの作成 width=640

キーペアの作成 width=640

Amazone Machine Image (AMI)

Amazon EC2 コンソールから見つける方法とaws-cliを使用する方法がある。

今回はUbuntuLinuxを使用するので、ami-0d5db3e2a1b98ca94を使用する。同じバージョンでも複数のイメージが存在し、リージョンによってもIDは異なるので注意する。

インスタンスの作成

ec2.yml

イメージタイプは無料枠が適用されるt2.microを使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
AWSTemplateFormatVersion: '2010-09-09'
Description: Ubuntu on EC2

# ------------------------------------------------------------ #
# Input Parameters
# ------------------------------------------------------------ #
Parameters:
KeyName:
Description: Amazon EC2 Key Pair
Type: "AWS::EC2::KeyPair::KeyName"
Default: mykey
AllowSshFrom:
Description: from source IP Address
Type: String
Default: 0.0.0.0/0
ImageID:
Description: Ubuntu Linux AMI
Type: String

Resources:
# ------------------------------------------------------------ #
# EC2
# ------------------------------------------------------------ #
MySecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable SSH
SecurityGroupIngress:
- CidrIp: !Ref AllowSshFrom
IpProtocol: tcp
FromPort: '22'
ToPort: '22'

MyEC2Instance:
Type: AWS::EC2::Instance
Description: "Ubuntu 18.04 bionic on AWS"
Properties:
ImageId: !Ref ImageID
InstanceType: t2.micro
SecurityGroupIds:
- Fn::GetAtt: [ MySecurityGroup, GroupId ]
KeyName: !Ref KeyName
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}
UserData: !Base64
Fn::Sub: |
#!/bin/bash -xe

# ubuntuのパッケージを最新化
apt update
DEBIAN_FRONTEND=noninteractive apt -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get upgrade -y

# ------------------------------------------------------------ #
# Output Parameters
# ------------------------------------------------------------ #
Outputs:
PublicIp:
Description: "Public IP"
Value: !GetAtt MyEC2Instance.PublicIp

parameters.json

証明書を発行するドメイン名を指定する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[
{
"ParameterKey": "KeyName",
"ParameterValue": "mykey"
},
{
"ParameterKey": "ImageID",
"ParameterValue": "ami-0d5db3e2a1b98ca94"
},
{
"ParameterKey": "AllowSshFrom",
"ParameterValue": "0.0.0.0/0"
}
]

インスタンスを作成する

1
2
3
4
$ aws cloudformation create-stack --stack-name tutorial-ec2 --template-body "file://./ec2.yml" --parameters "file://./parameters.json"
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXX:stack/tutorial-ec2/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

インスタンスにログインする

作成したインスタンスの情報取得

インスタンスの情報はCloudFormationの結果以外にもaws-cliで取得することもできる。
タグ名としてスタック名を付与しているので、スタック名を指定してインスタンスを特定し、IPアドレス等を取得している。

1
2
3
4
5
6
aws ec2 describe-instances --filters "Name=tag:Name,Values=tutorial-ec2" --query 'Reservations[].Instances[].[ImageId,InstanceId,KeyName,PublicIpAddress,PrivateIpAddress]' --output table
----------------------------------------------------------------------------------------------
| DescribeInstances |
+------------------------+-----------------------+--------+-----------------+----------------+
| ami-0d5db3e2a1b98ca94 | i-087fXXXXXXXX0ec4f | mykey | XXX.XXX.XXX.XXX | 172.31.38.166 |
+------------------------+-----------------------+--------+-----------------+----------------+

sshでログイン

sshで作成したキーペアの秘密鍵を指定して接続。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ ssh -i mykey.pem ubuntu@XXX.XXX.XXX.XXX
The authenticity of host 'XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-1052-aws x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage

System information as of Mon May 4 04:22:37 UTC 2020

System load: 0.0 Processes: 88
Usage of /: 19.0% of 7.69GB Users logged in: 0
Memory usage: 18% IP address for eth0: 172.31.38.166
Swap usage: 0%

0 packages can be updated.
0 updates are security updates.


*** System restart required ***

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@ip-172-31-38-166:~$

コメント・シェア

  • page 1 of 1


nullpo

めも


募集中


Japan