週末趣味のAWS
Elastic Beanstalk 編
免責事項
本資料並びにセッションでの発言は私個人の調査や情報
収集および実践に基づいて構成したものです
したがって所属企業やAWS等、私個人以外の如何なるも
のの意見を代表するものではありません
本セッションでの内容に起因して損害が生じた場合におい
ても、発表者はその責任を負うことができません
自己紹介
氏名:難波 和生
株式会社リゾーム 所属
Twitter:@kazu_0
職業:ネットワークオペレータ
:サーバ・NWのインフラ担当
:レイヤー4までの人です
趣味:車の運転
:映画鑑賞・音楽鑑賞
:「週末趣味のAWS」「週末趣味のAzure」など
週末趣味シリーズ
Elastic Beanstalk
• 使うようになったキッカケ
• 新しい案件でコンテナを使ってみることに
• そういえば Beanstalk が ECS を使ったマルチコンテナ構成
が可能になったらしいよ
• じゃ、Beanstalk 使ってみよっか
Elastic Beanstalk
• その頃のクラウドインフラのトレンドは。。
• CloudFormation とか terraform などが話題に
• きっと Beanstalk って便利ツールに違いない
• AWS環境にとっても詳しい人とお話してみると。。
Elastic Beanstalk
自分でEC2を
ローンチしたら
負けなのさ
Elastic Beanstalk
• 実際のところ、、
• AWSリソースの構成管理をしてくれる、とっても便利なツール
• ただ、とっても簡単ではない。。
• 最低限のECSやELB、CloudFomation Stack の知識があった方が
幸せになれます
Elastic Beanstalkって?
• AWSが提供するクラウド環境作成・構成管理ツール
• Beanstalkを使うとAWSのサービスを組み合わせて環境を構築
してくれます
• Beanstalkで作成された個々の環境を確認することで、AWS
サービスの学習することもできます
• EC2、Security Group、ELB、ECS、Cloudformation
Elastic Beanstalkって?
• Application 内で異なるバージョンの Enviroment
Elastic
Beanstalk
Application 01
Environment 01
Application 02
Environment 02 Environment 03
Environment 01 Environment 02 Environment 03
Environment 02
Nginx Proxy PHP-fpm
(Version 8.2)
Nginx Proxy PHP-fpm
(Version 9.1)
Environment 03
Elastic Beanstalkって?
• Application 内で異なる機能の Enviroment
Elastic
Beanstalk
Application 01
Environment 01
Application 02
Environment 02 Environment 03
Environment 01 Environment 02 Environment 03
Environment 01
Nginx Proxy PHP-fpm
(nextcloud)
Private registry
(docker private registry)
Environment 02
環境構築の方針
• カスタムAMI ではなく .ebextentions で環境を作成
• コンテナイメージはオフィシャルを使う
• できるだけ AWS Well-Architected Framework に沿った環境
今回の環境構成
• Multicontainer Docker Environments
• Application Load Balancer(ELB)
• Beanstalk の構成管理は「CodeCommit」
今回のBeanstalk環境構成
• アプリケーションは「Nextcloud」
• データベースはRDS(Amazon Aurora)
• 永続性データの保存にEFS( Elastic File System)
• ユーザ管理に「AWS Directory Service」
構成図です
Oreg-VPC218-Ap2-2b
application
Amazon EFS
Oreg-VPC218-ap1-2c
application
Elastic Load Balancing
AWS Elastic Beanstalk AWS Elastic Beanstalk
/efs (Host NFS)
/var/www/html/config
/var/www/html/data
/var/www/html/apps
/efs (Host NFS)
/var/www/html/config
/var/www/html/data
/var/www/html/apps
Amazon Aurora
certificate manager
*.std-adhocracy.net.
AWS Directory Service
AWS WAF
Amazon Route 53
事前準備リスト
• VPC・サブネット と RDS を作成
• EFS( Elastic File System)を作成
• 「AWS Directory Service」で simple AD を作成
事前準備リスト
• ACM ( AWS Certificate Manager )でSSL証明書作成
• ECR(EC2 Container Registry)準備
• Beanstalk にデプロイするファイル準備
事前準備(VPC・RDS)
サブネット IPアドレスプレフィックス アベイラビリティゾーン
subnet-97aa55cf | Oreg-VPC218-ap1-2c 172.22.218.64/26 c
subnet-d7d47fa1 | Oreg-VPC218-ap2-2b 172.22.218.128/26 b
subnet-cc097594 | Oreg-VPC218-db1-2c 172.22.218.192/27 c
subnet-710c0107 | Oreg-VPC218-db2-2b 172.22.218.224/27 b
• RDSを作成
• VPCとサブネットを作成
DB Engine Multi AZ
Aurora No
事前準備(EFS)
• EFS( Elastic File System)を作成
Mount Point(/efs)
Amazon EFS config
application
Auto Scaling group
Mount Point(/efs)
Data Volume
data apps
application
EC2 compute
container
EC2 compute
container
NFS
Data Volume
Data Volume
事前準備(EFS)
• EFS( Elastic File System)を作成
• Multi-AZ構成で複数のサブネットにマウントターゲットを作成
事前準備 (Directory Service)
Details
Directory name jaws-ug.ok2017.local
NetBIOS name JAWSUG
Subnets Oreg-VPC218-ap1-2c | subnet-97aa55cf
Oreg-VPC218-ap2-2b | subnet-d7d47fa1
DNS Address 172.22.218.163 172.22.218.111
• 「Simple AD」で認証環境を作成
• VPCの「DHCP Option Set」 を設定
事前準備 (AWS Certificate Manager)
Details
Domain name *.your-domain.net(wild card)
ARN arn:aws:acm:us-west-2:your-id:certificate/Identifier
• SSL証明書作成
• ARNをBeanstalk環境(ebextentions)へ設置します
• ACMあるある
• 自動更新には条件があります
• 証明書に記載されているFQDNが名前解決可能
• 証明書がAWSリソースに関連付けされており使用されている
• 関連付けしているAWSリソースがインターネットから接続できる
事前準備 (AWS Certificate Manager)
• 内部向けELBに割り当てしている
ACMは自動更新されないので注意
• 手動更新はメールが届きます
• 英語メールなので見落とし注意
• http://qiita.com/kazu_0/private/072e716d7e7352d4015e
内向きELB
事前準備 (Identity and Access Management)
• 「role」を設定
aws-elasticbeanstalk-ec2-role
AWSElasticBeanstalkWebTier
AWSElasticBeanstalkWorkerTier
AWSElasticBeanstalkMulticontainerDocker
AmazonEC2ContainerServiceforEC2Role
CloudWatchLogsFullAccess
AmazonEC2RoleforSSM
aws-elasticbeanstalk-service-role
AWSElasticBeanstalkEnhancedHealth
AWSElasticBeanstalkService
事前準備 (EC2 Container Registry)
• Docker logon の認証なしでコンテナイメージをpull
できるように「elasticbeanstalk-ec2-role」に
「permissions」を設定
Beanstalk環境の作成
• Beanstalk にデプロイするファイル準備
• .ebextensions
• EB環境の設定、AWSリソースのカスタマイズ
• .elasticbeanstalk config.yml
• EB環境設定時(eb init)に自動生成
• Dockerrun.aws.json
• 設定ファイルやコンテンツと組み合わせて、Docker
プラットフォーム上に環境を作成
• デプロイ時に展開したいコンテンツ
• ローンチされるEC2の /var/app/current/ に展開
環境の作成 ( .elasticbeanstalk )
• config.yml
• Beanstalk 環境設定
• eb init コマンド実行時に作成
• Aplication名
• 使用プラットフォーム
• AWSリージョン
• AWS CLI プロファイル
などが設定されます
環境の作成 (.ebextentions)
• 00.storage-efs-
mountfilesystem.config
• EFS(Elastic File System)のマウント
• This ebextentions includes the work that is distributed
in the Apache License 2.0
• https://github.com/awslabs/elastic-beanstalk-
docs/blob/master/configuration-files/aws-
provided/instance-configuration/storage-efs-
mountfilesystem.config
環境の作成 (.ebextentions)
• 01.set-env.config
• RDSの接続情報を環境変数として
Beanstak環境へ登録
• eb-setenv.ps1
• eb set env コマンドでも
設定可能
環境の作成(.ebextentions)
• 03.sg.config
• 特定IPからのSSH・HTTP接続を許可する
環境の作成(.ebextentions)
• 11.autoscaling-trigger.config
• Enviroment を構成するEC2の最大数・
最小数を設定(MaxSize,MinSize)
• スケールアウト、スケールインの閾値を
設定
• cooldown: Auto Scaling が新しいイン
スタンスを起動した後、次のスケーリン
グアクティビティを再開するまでに待機
する時間
• Period:トリガのメトリクスを測定する頻
度(minutes)
• Breach duration:トリガが発せられる
まで待機する限度時間(minutes)
環境の作成(.ebextentions)
• 12.application-load-balancer.config
• ALB(Application Load Barlncer)を構成
• ALBは Enviroment 構築時のみ構成可能
• 「eb create」 コマンド実行時でも設定可能
• --elb-type application
環境の作成(.ebextentions)
• 13.alb-default-process.config
• DeregistrationDelay:
• 登録解除前にアクティブなリクエスト
が完了するまでの待機時間
• HealthyThresholdCount:
• ELBがインスタンスのヘルスステータ
スを変更するために必要な、連続し
て成功したリクエストの数。
• StickinessEnabled:
• スティッキーセッションを有効
• StickinessLBCookieDuration:
• スティッキーセッション Cookie の
有効期間 (Second)
環境の作成(.ebextentions)
• 14.alb-secure-listener.config
• ALB(Application Load Balancer)にACM(AWS Certificate Manager)を設定
環境の作成(Dockerrun.aws.json)
• "AWSEBDockerrunVersion": 2,
• 複数コンテナの Docker 環境はVer2になります
• “volumes”
• コンテナホストのボリュームを定義
• name:ボリュームの名前を設定
• sourcePath:実体のフォルダ
• 同じ階層に設置した「フォルダ」や「ファイル」は
「/var/app/current/」に展開
環境の作成(Dockerrun.aws.json)
• containerDefinitions
• コンテナの定義の配列
• name:コンテナ名
• Image:pullする
image
• mountPoints:
• sourceVolume
設定したボリューム
• containerPath
コンテナ上の
マウントパス
• readOnly
trueでreadonly
環境の作成(Dockerrun.aws.json)
• containerDefinitions
環境の作成(Dockerrun.aws.json)
• "containerDefinitions“
• Nginx-proxy コンテナの定義
• コンテナ名「php-app」とリンク
環境の作成(eb-create.ps1)
• コンテナ作成コマンド
(eb create)のスクリプトを
作成
• スクリプトを実行すると環境
が構築されます
今回使った他のAWSサービス
時間があれば
ご紹介
VPC Flow Logs
• https://aws.amazon.com/jp/blogs/big-data/analyzing-vpc-flow-logs-with-amazon-kinesis-firehose-
amazon-athena-and-amazon-quicksight/
• Serverless Architecture for Analyzing
VPC Flow Logs
ALB Log Analysis with Athena
https://aws.amazon.com/jp/blogs/news/analyzing-data-in-s3-using-amazon-athena/
IPv4/IPv6 Dual Stack
• 今回の環境は「IPv4/IPv6デュアルスタック」対応してます
IPv4/IPv6 Dual Stack
• AWSでのIPv6はとっても簡単
• VPCの設定
• VPCで「Edit CIDRs」
• 「Add Ipv6 CIDR」
• /56のIPv6プレフィックス
IPv4/IPv6 Dual Stack
• AWSでのIPv6はとっても簡単
• /56のIPv6プレフィックスって?
• 「2の64乗(=1844京6744兆0737億0955万1616)個のアドレスを
持つサブネット」を256個作れるグローバルアドレス
IPv4/IPv6 Dual Stack
• AWSでのIPv6はとっても簡単
• Subnets の設定
• 「Edit IPv6 CIDRs」
• Add IPv6 CIDR
• /64のIPv6プレフィックス
IPv4/IPv6 Dual Stack
• AWSでのIPv6はとっても簡単
• Route Tables の設定
• 「::/0」 Ipv6 デフォルトルート設定
IPv4/IPv6 Dual Stack
• AWSでのIPv6はとっても簡単
• ELB の設定
• 「Edit IP address type」
• 「dualstack」を選択
IPv4/IPv6 Dual Stack
• AWSでのIPv6はとっても簡単
• ELB の設定 の設定
「Security Group」
HTTP(80) ::/0
HTTPS(443) ::/0
SGでは
Permit ip any any
接続制限はWAFの
IP match conditions
IPv4/IPv6 Dual Stack
• AWSでのIPv6はとっても簡単
• R53 の設定
• 「Type:AAAA」
• Aliasレコードをターゲット
ELBに設定
IPv4/IPv6 Dual Stack
• 会場にIPv6接続
環境をご用意で
きず。。
• WAFのログです
Elastic Beanstalk
• まとめ
• Elastic Beanstalk は便利なシステム構成管理ツール
• 学習コストはそれなりに必要
• IPv4/IPv6 Dual Stack 対応も簡単
Elastic Beanstalk
ご清聴ありがとうございました

ドキュメント週末趣味のAWS Elastic Beanstalk 編