EB CLIを操作する為に、今回はクライアントのEC2から操作します。
AWS設定
$ aws configure AWS Access Key ID [None]: xxxxxxxxxxxxxxxx AWS Secret Access Key [None]: xxxxxxxxxxxxxxxx Default region name [None]: ap-northeast-1 Default output format [None]: json
$ cat ~/.aws/config [default] output = json region = ap-northeast-1
アプリのルートフォルダの作成
$ mkdir ebappTest $ cd ebappTest gitコマンドのインストールとアプリのダウンロード $ sudo yum install git $ sudo git clone https://github.com/hoge/ebappTest.git
git初期化
$ sudo git init . Reinitialized existing Git repository in /home/ec2-user/ebappTest/.git/
プロフィール設定
$ git config --global user.name "yuu" $ git config --global user.email yuu@example.net
$ git add test.txt $ git commit -m "initial check-in"
外部にプッシュする場合
リモートリポジトリ登録 $ git remote add origin https://github.com/hoge/ebappTest.git push $ git push -u origin master
eb環境の初期化
[ec2-user@ip-172-31-33-180 ebappTest]$ eb init リージョンの選択 Select a default region 1) us-east-1 : US East (N. Virginia) 2) us-west-1 : US West (N. California) 3) us-west-2 : US West (Oregon) 4) eu-west-1 : EU (Ireland) 5) eu-central-1 : EU (Frankfurt) 6) ap-south-1 : Asia Pacific (Mumbai) 7) ap-southeast-1 : Asia Pacific (Singapore) 8) ap-southeast-2 : Asia Pacific (Sydney) 9) ap-northeast-1 : Asia Pacific (Tokyo) 10) ap-northeast-2 : Asia Pacific (Seoul) 11) sa-east-1 : South America (Sao Paulo) 12) cn-north-1 : China (Beijing) 13) cn-northwest-1 : China (Ningxia) 14) us-east-2 : US East (Ohio) 15) ca-central-1 : Canada (Central) 16) eu-west-2 : EU (London) 17) eu-west-3 : EU (Paris) 18) eu-north-1 : EU (Stockholm) (default is 3): 9 アプリケーション名がある場合 Enter Application Name (default is "ebappTest"): ebappTest Application ebappTest has been created. It appears you are using PHP. Is this correct? (Y/n): Y Select a platform version. 1) PHP 7.2 2) PHP 7.1 3) PHP 7.0 4) PHP 5.6 5) PHP 5.5 6) PHP 5.4 7) PHP 5.3 (default is 1): 1 Do you wish to continue with CodeCommit? (y/N) (default is n): n Do you want to set up SSH for your instances? (Y/n): Y キーの選択 Select a keypair. 1) TEST-1217 2) TEST-21081203 3) TESTSG-20181212 4) [ Create new KeyPair ] (default is 3): 1
$ ls -laht total 16K drwx------ 7 ec2-user ec2-user 182 Dec 20 06:10 .. drwxr-xr-x 5 ec2-user ec2-user 139 Dec 20 06:10 . -rw-rw-r-- 1 ec2-user ec2-user 108 Dec 20 06:10 .gitignore drwxrwxr-x 2 ec2-user ec2-user 24 Dec 20 06:06 .elasticbeanstalk drwxr-xr-x 8 ec2-user ec2-user 163 Dec 20 03:26 .git drwxr-xr-x 2 ec2-user ec2-user 27 Dec 20 03:25 .ebextensions -rw-r--r-- 1 ec2-user ec2-user 60 Dec 20 03:25 healthcheck.php -rw-r--r-- 1 ec2-user ec2-user 29 Dec 20 03:25 index.php -rw-r--r-- 1 ec2-user ec2-user 11 Dec 20 03:25 README.md
ヘルスチェックファイルを作っておく
確認
$ cat /home/ec2-user/ebappTest/.gitignore # Elastic Beanstalk Files .elasticbeanstalk/* !.elasticbeanstalk/*.cfg.yml !.elasticbeanstalk/*.global.yml
確認
$ cat /home/ec2-user/ebappTest/.elasticbeanstalk/config.yml
branch-defaults:
master:
environment: null
group_suffix: null
global:
application_name: ebappTest
branch: null
default_ec2_keyname: TEST-1217
default_platform: PHP 7.2
default_region: ap-northeast-1
include_git_submodules: true
instance_profile: null
platform_name: null
platform_version: null
profile: null
repository: null
sc: git
workspace_type: Application
VPC作成
$ aws ec2 create-vpc --cidr-block 10.0.0.0/16
{
"Vpc": {
"VpcId": "vpc-01f38b4afc33e2d60",
"InstanceTenancy": "default",
"Tags": [],
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-058a5560870cc112e",
"CidrBlock": "10.0.0.0/16",
"CidrBlockState": {
"State": "associated"
}
}
],
"Ipv6CidrBlockAssociationSet": [],
"State": "pending",
"DhcpOptionsId": "dopt-e5271280",
"CidrBlock": "10.0.0.0/16",
"IsDefault": false
}
}
VPCにName タグを追加
$ aws ec2 create-tags --resources vpc-01f38b4afc33e2d60 --tags Key=Name,Value="vpc test"
VPCのルートテーブルの確認
$ aws ec2 describe-route-tables --filters "Name=vpc-id,Values=vpc-01f38b4afc33e2d60"
{
"RouteTables": [
{
"Associations": [
{
"RouteTableAssociationId": "rtbassoc-014a2dbc35615739d",
"Main": true,
"RouteTableId": "rtb-0cafa4febb22d37bd"
}
],
"RouteTableId": "rtb-0cafa4febb22d37bd",
"VpcId": "vpc-01f38b4afc33e2d60",
"PropagatingVgws": [],
"Tags": [],
"Routes": [
{
"GatewayId": "local",
"DestinationCidrBlock": "10.0.0.0/16",
"State": "active",
"Origin": "CreateRouteTable"
}
]
}
]
}
ルートテーブルにName タグを追加
$ aws ec2 create-tags --resources rtb-0cafa4febb22d37bd --tags Key=Name, Value="rtb test main"
{
"NetworkAcls": [
{
"Associations": [],
"NetworkAclId": "acl-0492173698a8ebb1c",
"VpcId": "vpc-01f38b4afc33e2d60",
"Tags": [],
"Entries": [
{
"RuleNumber": 100,
"Protocol": "-1",
"Egress": true,
"CidrBlock": "0.0.0.0/0",
"RuleAction": "allow"
},
{
"RuleNumber": 32767,
"Protocol": "-1",
"Egress": true,
"CidrBlock": "0.0.0.0/0",
"RuleAction": "deny"
},
{
"RuleNumber": 100,
"Protocol": "-1",
"Egress": false,
"CidrBlock": "0.0.0.0/0",
"RuleAction": "allow"
},
{
"RuleNumber": 32767,
"Protocol": "-1",
"Egress": false,
"CidrBlock": "0.0.0.0/0",
"RuleAction": "deny"
}
],
"IsDefault": true
}
]
}
ACLにNAMEタグを追加
$ aws ec2 create-tags --resources acl-0492173698a8ebb1c --tags Key=Name,Value="acl test"
VPCのデフォルトセキュリティグループの設定を確認
$ aws ec2 describe-security-groups --filters "Name=vpc-id,Values=vpc-01f38b4afc33e2d60"
{
"SecurityGroups": [
{
"IpPermissionsEgress": [
{
"IpProtocol": "-1",
"PrefixListIds": [],
"IpRanges": [
{
"CidrIp": "0.0.0.0/0"
}
],
"UserIdGroupPairs": [],
"Ipv6Ranges": []
}
],
"Description": "default VPC security group",
"IpPermissions": [
{
"IpProtocol": "-1",
"PrefixListIds": [],
"IpRanges": [],
"UserIdGroupPairs": [
{
"UserId": "840155334575",
"GroupId": "sg-0a33660dc363996ce"
}
],
"Ipv6Ranges": []
}
],
"GroupName": "default",
"VpcId": "vpc-01f38b4afc33e2d60",
"OwnerId": "840155334575",
"GroupId": "sg-0a33660dc363996ce"
}
]
}
デフォルトセキュリティグループにNAMEタグを追加
$ aws ec2 create-tags --resources sg-0a33660dc363996ce --tags Key=Name,Value="sg test default"
VPCのDNSホスト名を追加する ※RDSにエンドポイントでアクセスする為
$ aws ec2 modify-vpc-attribute --vpc-id vpc-01f38b4afc33e2d60 --enable-dns-hostnames
もくじ
サブネットの作成
$ aws ec2 create-subnet --vpc-id vpc-01f38b4afc33e2d60 --cidr-block 10.0.1.0/24 --availability-zone ap-northeast-1a
{
"Subnet": {
"AvailabilityZone": "ap-northeast-1a",
"AvailableIpAddressCount": 251,
"DefaultForAz": false,
"Ipv6CidrBlockAssociationSet": [],
"VpcId": "vpc-01f38b4afc33e2d60",
"State": "pending",
"MapPublicIpOnLaunch": false,
"SubnetId": "subnet-0b2e2a26f07afa705",
"CidrBlock": "10.0.1.0/24",
"AssignIpv6AddressOnCreation": false
}
}
$ aws ec2 create-subnet --vpc-id vpc-01f38b4afc33e2d60 --cidr-block 10.0.2.0/24 --availability-zone ap-northeast-1c
{
"Subnet": {
"AvailabilityZone": "ap-northeast-1c",
"AvailableIpAddressCount": 251,
"DefaultForAz": false,
"Ipv6CidrBlockAssociationSet": [],
"VpcId": "vpc-01f38b4afc33e2d60",
"State": "pending",
"MapPublicIpOnLaunch": false,
"SubnetId": "subnet-03083b0694cb2695b",
"CidrBlock": "10.0.2.0/24",
"AssignIpv6AddressOnCreation": false
}
}
$ aws ec2 create-subnet --vpc-id vpc-01f38b4afc33e2d60 --cidr-block 10.0.3.0/24 --availability-zone ap-northeast-1d
{
"Subnet": {
"AvailabilityZone": "ap-northeast-1d",
"AvailableIpAddressCount": 251,
"DefaultForAz": false,
"Ipv6CidrBlockAssociationSet": [],
"VpcId": "vpc-01f38b4afc33e2d60",
"State": "pending",
"MapPublicIpOnLaunch": false,
"SubnetId": "subnet-0664682d62aa9e8fc",
"CidrBlock": "10.0.3.0/24",
"AssignIpv6AddressOnCreation": false
}
}
IGW(インターネットゲートウェイ)の作成
$ aws ec2 create-internet-gateway
{
"InternetGateway": {
"Tags": [],
"Attachments": [],
"InternetGatewayId": "igw-0cc9f024d44204888"
}
}
IGWにNAMEタグを追加する
$ aws ec2 create-tags --resources igw-0cc9f024d44204888 --tags Key=Name,Value="igw test"
VPCにIGWをアタッチする
$ aws ec2 attach-internet-gateway --internet-gateway-id igw-0cc9f024d44204888 --vpc-id vpc-01f38b4afc33e2d60
確認
$ aws ec2 describe-internet-gateways --internet-gateway-id igw-0cc9f024d44204888
{
"InternetGateways": [
{
"Tags": [
{
"Value": "igw test",
"Key": "Name"
}
],
"Attachments": [
{
"State": "available",
"VpcId": "vpc-01f38b4afc33e2d60"
}
],
"InternetGatewayId": "igw-0cc9f024d44204888"
}
]
}
パブリックサブネット用のルートテーブル作成
$ aws ec2 create-route-table --vpc-id vpc-01f38b4afc33e2d60
{
"RouteTable": {
"Associations": [],
"RouteTableId": "rtb-0d0c22b6949e0adfc",
"VpcId": "vpc-01f38b4afc33e2d60",
"PropagatingVgws": [],
"Tags": [],
"Routes": [
{
"GatewayId": "local",
"DestinationCidrBlock": "10.0.0.0/16",
"State": "active",
"Origin": "CreateRouteTable"
}
]
}
}
ルートテーブルに Name タグを追加する。
$ aws ec2 create-tags --resources rtb-0d0c22b6949e0adfc --tags Key=Name,Value="rtb test public"
パブリックサブネット用ルートテーブルにインターネットゲートウェイを関連付ける
$ aws ec2 create-route --route-table-id rtb-0d0c22b6949e0adfc --destination-cidr-block 0.0.0.0/0 --gateway-id igw-0cc9f024d44204888
{
"Return": true
}
$ aws ec2 associate-route-table --route-table-id rtb-0d0c22b6949e0adfc --subnet-id subnet-0b2e2a26f07afa705
{
"AssociationId": "rtbassoc-0f0c45f90f70d8fdb"
}
aws ec2 associate-route-table --route-table-id rtb-0d0c22b6949e0adfc --subnet-id subnet-03083b0694cb2695b
{
"AssociationId": "rtbassoc-04dafe1f5d8a32a03"
}
$ aws ec2 associate-route-table --route-table-id rtb-0d0c22b6949e0adfc --subnet-id subnet-0664682d62aa9e8fc
{
"AssociationId": "rtbassoc-0e573c428282f8092"
}
ElasticBeanstalk アプリ環境の作成
- –vpc.publicip ・・・EC2にpublicIPを付与
- –vpc.elbpublic・・・ELBをpublicに、付与しないとinternalになる
$ eb create --vpc.id vpc-01f38b4afc33e2d60 --vpc.elbsubnets subnet-0b2e2a26f07afa705,subnet-03083b0694cb2695b --vpc.ec2subnets subnet-0b2e2a26f07afa705 --vpc.securitygroup sg-0a33660dc363996ce --vpc.publicip --vpc.elbpublic --instance_type t2.nano Enter Environment Name (default is App-TEST1-dev): Enter DNS CNAME prefix (default is App-TEST1-dev): Select a load balancer type 1) classic 2) application 3) network (default is 2): Creating application version archive "app-eb1e-181221_065649". Uploading App-TEST1/app-eb1e-181221_065649.zip to S3. This may take a while. Upload Complete. Application App-TEST1 has been created.
デプロイ
$ eb deploy
ElasticBeanstalkのCNANEでアクセス出来るようにする
$ eb open
ステータスの確認
$ eb status Environment details for: App-TEST1-dev Application name: App-TEST1 Region: ap-northeast-1 Deployed Version: app-8927-181221_072031 Environment ID: e-fj3rdn4mms Platform: arn:aws:elasticbeanstalk:ap-northeast-1::platform/PHP 7.2 running on 64bit Amazon Linux/2.8.5 Tier: WebServer-Standard-1.0 CNAME: SG-App-TEST1-dev.ap-northeast-1.elasticbeanstalk.com Updated: 2018-12-21 07:20:55.025000+00:00 Status: Ready ←●Ready確認 Health: Green
.ebextensionsによる拡張
# vi /home/ec2-user/ebappTest/.ebextensions/server.config
option_settings:
- namespace: aws:autoscaling:launchconfiguration
option_name: InstanceType
value: t2.nano
- namespace: aws:autoscaling:asg
option_name: MaxSize
value: '3'
- namespace: aws:autoscaling:asg
option_name: MinSize
value: '1'
デプロイ
$ git add -A $ git commit -m "20181225-0225" $ eb deploy
options_settingsについて
オプションの名前空間やプロパティは既存環境から確認出来る
$ eb config
exitは【CTRL+X】
CloudFormationのプロパティのすべてが使えるわけではないので注意。
AWS ドキュメント ≫ AWS Elastic Beanstalk ≫ 開発者ガイド ≫ AWS Elastic Beanstalk の詳細な環境設定 ≫ 設定オプション
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/command-options.html
AWS::AutoScaling::LaunchConfiguration
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html
