サポート > Wagby Developer Network(R8) > サーバの運用 > HSQLDBを利用する wagbyapp を Elastic Beanstalk で実行する

Amazon Elastic Beanstalk を使うためのアカウントの作成、EB CLIのインストール、デプロイ方法を説明します。

Amazon Elastic Beanstalk を使って、ビルドした Wagby アプリケーションをクラウド環境で実行することができます。

公式サイト https://aws.amazon.com/jp/elasticbeanstalk/

このページでは、コマンドラインインタフェース (CLI) を使った Elastic Beanstalk の利用方法を説明します。

本ページは2018年12月時点の内容にもとづいています。利用した Wagby のバージョンは R8.1.2 で、Windows OS を用いています。Windows OS 以外の環境をご利用の場合でも、このページに記載されたコマンドはご利用いただけます。

はじめに Amazon Web Service (AWS) の環境をコマンドラインで操作するための Command Line Interface (CLI) ツールのダウンロードとインストールを行います。次のページに記載の手順に従ってください。

インストール後、バージョン番号が適切に表示されるかどうかを確認します。

C:\Wagby-8.1.2>aws --version
aws-cli/1.16.72 Python/3.6.0 Windows/10 botocore/1.12.62

設定

次のページに記載の手順に従い、AWS CLI の設定を行います。

具体的には管理者のAccess Key と Secret Access Key を指定します。

C:\Wagby-8.1.2>aws configure --profile admin

Access Key と Secret Access Key を入力します。ここではリージョン(region)および出力フォーマット(output format)はそれぞれ "ap-northeast-1" と "json" とします。"ap-northeast-1"はアジアパシフィック (東京)となります。

AWS Access Key ID [None]: XXXX
AWS Secret Access Key [None]: XXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

作業用フォルダの作成

作業環境として Wagby をインストールしたフォルダ内に "ebs" というフォルダを用意するものとします。

cd C:\Wagby-8.1.2\ebs

インストールした AWS CLI を用いて、Elastic Beanstalkを使うためのIAMユーザを作成します。

ここではユーザ名を "ebswagby" とします。

C:\Wagby-8.1.2\ebs>aws iam create-user --user-name ebswagby

次のように表示されます。

{
    "User": {
        "Path": "/",
        "UserName": "ebswagby",
        "UserId": "AIDAIYNOQRUPSG5XZGLTG",
        "Arn": "arn:aws:iam::234318443261:user/ebswagby",
        "CreateDate": "2018-12-19T09:38:57Z"
    }
}

作成したアカウントに、"AWSElasticBeanstalkFullAccess" ポリシーを付与します。

C:\Wagby-8.1.2\ebs>aws iam attach-user-policy --user-name ebswagby --policy-arn "arn:aws:iam::aws:policy/AWSElasticBeanstalkFullAccess"

次にアクセスキーを作成します。

C:\Wagby-8.1.2\ebs>aws iam create-access-key --user-name ebswagby

次のように表示されます。

{
    "AccessKey": {
        "UserName": "ebswagby",
        "AccessKeyId": "AKIAJFHIPKG2ZSQCIDJA",
        "Status": "Active",
        "SecretAccessKey": "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",
        "CreateDate": "2018-12-19T09:41:55Z"
    }
}

次のように入力して、アカウントとアクセスキーを紐付けます。

C:\Wagby-8.1.2\ebs>aws configure --profile ebswagby
AWS Access Key ID [None]: AKIAJFHIPKG2ZSQCIDJA
AWS Secret Access Key [None]: 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
Default region name [None]: ap-northeast-1
Default output format [None]: json

Python と EB CLI をインストールします。次のページを参考にしてください。

Windows で Python、pip、EB CLI をインストールする

EB CLIがインストールされると、下記のように表示されます。

C:\Wagby-8.1.2\ebs>eb --version
EB CLI 3.14.8 (Python 3.6.7)

インストール後、EB CLIの設定を下記ページのように行ってください。

EB CLI の設定

C:\Wagby-8.1.2\ebs>eb init --profile ebswagby

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 "ebs"): ebswagby
Application ebswagby has been created.

Select a platform.
1) Node.js
2) PHP
3) Python
4) Ruby
5) Tomcat
6) IIS
7) Docker
8) Multi-container Docker
9) GlassFish
10) Go
11) Java
12) Packer
(default is 1): 5

Select a platform version.
1) Tomcat 8.5 Java 8
2) Tomcat 8 Java 8
3) Tomcat 7 Java 7
4) Tomcat 7 Java 6
5) Tomcat 7
6) Tomcat 6
(default is 1): 1
Do you want to set up SSH for your instances?
(Y/n): Y

Select a keypair.
1) xxxx
2) yyyy
3) YOURkey1
4) [ Create new KeyPair ]
(default is 3): 3

ここまでの設定で、Elastic Beanstalkのアプリケーションにebswagbyが作成されます。まだ内容は「から」です。

また、実行したフォルダに設定ファイルが作成されます。

C:\Wagby-8.1.2\ebs>type .elasticbeanstalk\config.yml
branch-defaults:
  default:
    environment: null
    group_suffix: null
global:
  application_name: ebswagby
  branch: null
  default_ec2_keyname: YOURkey1
  default_platform: Tomcat 8.5 Java 8
  default_region: ap-northeast-1
  include_git_submodules: true
  instance_profile: null
  platform_name: null
  platform_version: null
  profile: ebswagby
  repository: null
  sc: null
  workspace_type: Application

準備

C:\Wagby-8.1.2\ebs\filesフォルダを作成し、ここで提供する ebs_files.zip を展開してください。(ファイルの内容は後述します。)

1. WagbyDesignerで、HSQLDB(内蔵データベース)を用いたアプリケーションをビルドしてください。
なお、ここでは「ROOTデプロイメント」としてください。"環境 > プロジェクト > プロジェクト情報 > プロジェクト識別子" を空欄とします。

ROOTデプロイメントではない場合の説明を、本ページの後半に行います。

2. ビルド後は下記ページを参考に createWar コマンドで WAR ファイルを作成します。

  • 手動でTomcatへのデプロイを行う > createWarコマンド
  • 3. 作成したWARファイル ROOT.war を C:\Wagby-8.1.2\ebs にコピーします。

    4. コピーしたWARファイル名を .elasticbeanstalk/config.yml に追加します。

    config.yml

    branch-defaults:
      default:
        environment: null
        group_suffix: null
    deploy:
      artifact: files.zip
    global:
      application_name: ebswagby
      branch: null
      default_ec2_keyname: YOURkey1
      default_platform: Tomcat 8.5 Java 8
      default_region: ap-northeast-1
      include_git_submodules: true
      instance_profile: null
      platform_name: null
      platform_version: null
      profile: ebswagby
      repository: null
      sc: null
      workspace_type: Application
    

    5. 次のjarコマンドで .ebextensions フォルダの内容をWARファイルに追加します。

    C:\Wagby-8.1.2\ebs>jar -uvf ROOT.war -C files .
    .ebextensions/を追加中です(入=0)(出=0)(0%格納されました)
    .ebextensions/tomcat/を追加中です(入=0)(出=0)(0%格納されました)
    .ebextensions/tomcat/conf/を追加中です(入=0)(出=0)(0%格納されました)
    .ebextensions/tomcat/conf/app_jaas.config.txtを追加中です(入=402)(出=152)(62%収縮されました)
    .ebextensions/tomcat/conf/logging.propertiesを追加中です(入=3837)(出=1027)(73%収縮されました)
    .ebextensions/tomcat/conf/web.xmlを追加中です(入=174412)(出=18580)(89%収縮されました)
    .ebextensions/tomcat/copy.shを追加中です(入=735)(出=277)(62%収縮されました)
    .ebextensions/tomcat/lib/を追加中です(入=0)(出=0)(0%格納されました)
    .ebextensions/tomcat/lib/hsqldb.jarを追加中です(入=1515894)(出=1436314)(5%収縮されました)
    .ebextensions/tomcat/lib/j_conint.jarを追加中です(入=6067)(出=4947)(18%収縮されました)
    .ebextensions/tomcat/lib/spring-instrument-tomcat.jarを追加中です(入=10596)(出=9505)(10%収縮されました)
    .ebextensions/tomcat/lib/tomcat-dbcp.jarを追加中です(入=279700)(出=259605)(7%収縮されました)
    .ebextensions/tomcat-settings.configを追加中です(入=356)(出=256)(28%収縮されました)
    

    本節ではElastic Beanstalkの初期環境を作成します。詳細は下記ページをお読みください。

    まず VPC、サブネット、セキュリティグループを作成します。Amazon EFSを用いたストレージの永続化の説明を参考にしてください。

    次にeb createコマンドにて初期環境を作成します。実行途中にVPC、サブネット、セキュリティグループを尋ねられますので、入力していきます。

    C:\Wagby-8.1.2\ebs>eb create -i t3.small --vpc --scale 1
    Enter Environment Name
    (default is ebswagby-dev):
    Enter DNS CNAME prefix
    (default is ebswagby-dev):
    
    Select a load balancer type
    1) classic
    2) application
    3) network
    (default is 2):
    
    Enter the VPC ID: vpc-0208b3ab6a7cf8978
    Do you want to associate a public IP address? (Y/n):
    Enter a comma-separated list of Amazon EC2 subnets: subnet-0c4d1541a528c63ba,subnet-030085de17d83f973
    Enter a comma-separated list of Amazon ELB subnets: subnet-0c4d1541a528c63ba,subnet-030085de17d83f973
    Do you want the load balancer to be public? (Select no for internal) (Y/n):
    Enter a comma-separated list of Amazon VPC security groups: sg-0d6b4b276edf7d47c
    Uploading: [Environment details for: ebswagby-dev
      Application name: ebswagby
      Region: ap-northeast-1
      Deployed Version: app-181220_115348
      Environment ID: e-qwg8jviztr
      Platform: arn:aws:elasticbeanstalk:ap-northeast-1::platform/Tomcat 8.5 with Java 8 running on 64bit Amazon Linux/3.0.7
      Tier: WebServer-Standard-1.0
      CNAME: ebswagby-dev.ap-northeast-1.elasticbeanstalk.com
      Updated: 2018-12-20 02:54:00.779000+00:00
    Printing Status:
    2018-12-20 02:53:59    INFO    createEnvironment is starting.
    2018-12-20 02:54:01    INFO    Using elasticbeanstalk-ap-northeast-1-234318443261 as Amazon S3 storage bucket for environment data.
    2018-12-20 02:54:29    INFO    Created target group named: arn:aws:elasticloadbalancing:ap-northeast-1:234318443261:targetgroup/awseb-AWSEB-1VAQ9Q1W90LNM/444b8cf37063c0f7
    2018-12-20 02:54:29    INFO    Created security group named: sg-0bd8202e6522c878c
    2018-12-20 02:54:44    INFO    Created security group named: sg-05b09ee8430ebc4e2
    2018-12-20 02:54:45    INFO    Created Auto Scaling launch configuration named: awseb-e-qwg8jviztr-stack-AWSEBAutoScalingLaunchConfiguration-UAJ1WYM1BP1H
    2018-12-20 02:55:46    INFO    Created Auto Scaling group named: awseb-e-qwg8jviztr-stack-AWSEBAutoScalingGroup-140V8QCSW9I0D
    2018-12-20 02:55:46    INFO    Waiting for EC2 instances to launch. This may take a few minutes.
    2018-12-20 02:56:02    INFO    Created Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:234318443261:scalingPolicy:28d212d2-dfa2-4c4d-acd9-eda49b47e64c:autoScalingGroupName/awseb-e-qwg8jviztr-stack-AWSEBAutoScalingGroup-140V8QCSW9I0D:policyName/awseb-e-qwg8jviztr-stack-AWSEBAutoScalingScaleUpPolicy-1V9W58939HD9B
    2018-12-20 02:56:02    INFO    Created Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:234318443261:scalingPolicy:4d189f2b-8e38-4c56-a18d-a5364924f48a:autoScalingGroupName/awseb-e-qwg8jviztr-stack-AWSEBAutoScalingGroup-140V8QCSW9I0D:policyName/awseb-e-qwg8jviztr-stack-AWSEBAutoScalingScaleDownPolicy-1SL6PDFZTF41R
    2018-12-20 02:56:02    INFO    Created CloudWatch alarm named: awseb-e-qwg8jviztr-stack-AWSEBCloudwatchAlarmHigh-1POLW8FY2GN67
    2018-12-20 02:56:02    INFO    Created CloudWatch alarm named: awseb-e-qwg8jviztr-stack-AWSEBCloudwatchAlarmLow-33REXAJ9FELG
    2018-12-20 02:56:33    INFO    Created load balancer named: arn:aws:elasticloadbalancing:ap-northeast-1:234318443261:loadbalancer/app/awseb-AWSEB-1OB3IXUUENIYO/071ad07730276e25
    2018-12-20 02:56:51    INFO    Created Load Balancer listener named: arn:aws:elasticloadbalancing:ap-northeast-1:234318443261:listener/app/awseb-AWSEB-1OB3IXUUENIYO/071ad07730276e25/bfeeaa375a28bc3c
    2018-12-20 02:58:16    INFO    Successfully launched environment: ebswagby-dev
    

    eb openコマンドを実行すると、実行したウェブアプリケーションの画面をブラウザで開くことができます。

    環境の更新

    再びアプリケーションを更新する場合には ROOT.warファイルを差し替えたあと、eb deployコマンドを用います。

    C:\Wagby-8.1.2\ebs>eb deploy
    Uploading: [2018-12-19 11:26:39    INFO    Environment update is starting.
    2018-12-19 11:27:29    INFO    Deploying new version to instance(s).
    2018-12-19 11:28:51    INFO    New application version was deployed to running EC2 instances.
    2018-12-19 11:28:51    INFO    Environment update completed successfully.
    

    環境の削除

    作成した環境を削除するには eb terminate コマンドを用います。

    C:\Wagby-8.1.2\ebs>eb terminate
    The environment "ebswagby-dev" and all associated instances will be terminated.
    To confirm, type the environment name: ebswagby-dev
    2018-12-19 12:04:55    INFO    terminateEnvironment is starting.
    2018-12-19 12:05:13    INFO    Deleted Load Balancer listener named: arn:aws:elasticloadbalancing:ap-northeast-1:234318443261:listener/app/awseb-AWSEB-A50LMCSIA114/9c81d58f749fe7ff/f8bae4514638ef00
    2018-12-19 12:05:13    INFO    Deleted CloudWatch alarm named: awseb-e-xmxsxku8pv-stack-AWSEBCloudwatchAlarmLow-1MH6YXPYX8X3Q
    2018-12-19 12:05:13    INFO    Deleted CloudWatch alarm named: awseb-e-xmxsxku8pv-stack-AWSEBCloudwatchAlarmHigh-CD4MZA9JB0FE
    2018-12-19 12:05:13    INFO    Deleted load balancer named: arn:aws:elasticloadbalancing:ap-northeast-1:234318443261:loadbalancer/app/awseb-AWSEB-A50LMCSIA114/9c81d58f749fe7ff
    2018-12-19 12:05:13    INFO    Deleted Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:234318443261:scalingPolicy:1a184667-f097-4594-a60f-91143f64c263:autoScalingGroupName/awseb-e-xmxsxku8pv-stack-AWSEBAutoScalingGroup-1SY5ARKOEU41I:policyName/awseb-e-xmxsxku8pv-stack-AWSEBAutoScalingScaleUpPolicy-1GAI88NTY1XRA
    2018-12-19 12:05:13    INFO    Deleted Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:234318443261:scalingPolicy:e6b4d9dc-e576-4228-af4f-47f5642af32e:autoScalingGroupName/awseb-e-xmxsxku8pv-stack-AWSEBAutoScalingGroup-1SY5ARKOEU41I:policyName/awseb-e-xmxsxku8pv-stack-AWSEBAutoScalingScaleDownPolicy-1X717GQ3XUXBS
    2018-12-19 12:05:13    INFO    Waiting for EC2 instances to terminate. This may take a few minutes.
    2018-12-19 12:08:01    INFO    Deleted Auto Scaling group named: awseb-e-xmxsxku8pv-stack-AWSEBAutoScalingGroup-1SY5ARKOEU41I
    2018-12-19 12:08:02    INFO    Deleted Auto Scaling launch configuration named: awseb-e-xmxsxku8pv-stack-AWSEBAutoScalingLaunchConfiguration-F7EEGYHI7TMY
    2018-12-19 12:08:02    INFO    Deleted target group named: arn:aws:elasticloadbalancing:ap-northeast-1:234318443261:targetgroup/awseb-AWSEB-UH5LGMKHCUG0/0332d9446898bb31
    2018-12-19 12:08:17    INFO    Deleted security group named: sg-06c5ca12f134787fc
    2018-12-19 12:08:17    INFO    Deleted security group named: sg-049c1ae5e7e116779
    2018-12-19 12:08:22    INFO    Deleting SNS topic for environment ebswagby-dev.
    2018-12-19 12:08:24    INFO    terminateEnvironment completed successfully.
    

    ログの確認

    eb logs コマンドで、各ログファイルを100行づつ出力することができます。

    eb logs -zにて、各ログファイルをひとまとめにした zip ファイルをダウンロードすることができます。

    C:\Wagby-8.1.2\ebs>eb logs -z
    Retrieving logs...
    Logs were saved to C:\Wagby-8.1.2\ebs\.elasticbeanstalk\logs\181220_173713.zip
    

    sshによる接続

    環境はEC2インスタンスで実行されているので、IPアドレスを確認することで ec2-user で ssh 接続することができます。

    $ ssh -i ~/.ssh/YOURkey1 ec2-user@13.115.203.162
    The authenticity of host '13.115.203.162 (13.115.203.162)' can't be established.
    ECDSA key fingerprint is SHA256:jwFnTGVSL/AF5925gfo+0sHyzOewWRUCSiXbbzMRYCk.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '13.115.203.162' (ECDSA) to the list of known hosts.
    Enter passphrase for key '/home/YOU/.ssh/YOURkey1':
     _____ _           _   _      ____                       _        _ _
    | ____| | __ _ ___| |_(_) ___| __ )  ___  __ _ _ __  ___| |_ __ _| | | __
    |  _| | |/ _` / __| __| |/ __|  _ \ / _ \/ _` | '_ \/ __| __/ _` | | |/ /
    | |___| | (_| \__ \ |_| | (__| |_) |  __/ (_| | | | \__ \ || (_| | |   <
    |_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\
                                           Amazon Linux AMI
    
    This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
    WILL BE LOST if the instance is replaced by auto-scaling. For more information
    on customizing your Elastic Beanstalk environment, see our documentation here:
    http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
    [ec2-user@ip-10-0-1-7 ~]$
    

    設定の保存

    eb config save コマンドで、eb create コマンドに指定した設定を保存できます。ウェブ上のAWSコンソールで変更した設定も保存されます。

    設定を AWS S3 と開発機の両方に保存することもできます。以下の例は "ebswagby-dev-sc" という名前で両方に保存するものです。

    C:\Wagby-8.1.2\ebs>eb config save ebswagby-dev
    
    Enter desired name of configuration.
    (default is "ebswagby-dev-sc"):
    
    Configuration saved at: C:\Wagby-8.1.2\ebs\.elasticbeanstalk\saved_configs\ebswagby-dev-sc.cfg.yml
    

    eb config list コマンドを使うと、AWS S3に保存されている設定名の一覧を確認できます。

    C:\Wagby-8.1.2\ebs>eb config list
    ebswagby-dev-sc
    
    eb create コマンドのオプションに --cfg ebswagby-dev-sc と付与することで、作成と同時に設定を保存することできます。

    ebswagby-dev-sc.cfg.yml の例

    次のようになります。

    AWSConfigurationTemplateVersion: 1.1.0.0
    EnvironmentConfigurationMetadata:
      DateCreated: '1545290334000'
      DateModified: '1545299801287'
      Description: Configuration created from the EB CLI using "eb config save".
    EnvironmentTier:
      Name: WebServer
      Type: Standard
    OptionSettings:
      AWSEBV2LoadBalancerTargetGroup.aws:elasticbeanstalk:environment:process:default:
        HealthCheckPath: /logonPage.do
        MatcherHTTPCode: '200'
      aws:autoscaling:launchconfiguration:
        EC2KeyName: YOURkey1
        IamInstanceProfile: aws-elasticbeanstalk-ec2-role
        InstanceType: t3.small
        SecurityGroups: sg-0d6b4b276edf7d47c
      aws:autoscaling:updatepolicy:rollingupdate:
        RollingUpdateEnabled: true
        RollingUpdateType: Health
      aws:ec2:vpc:
        AssociatePublicIpAddress: true
        ELBScheme: public
        ELBSubnets: subnet-0c4d1541a528c63ba,subnet-030085de17d83f973
        Subnets: subnet-0c4d1541a528c63ba,subnet-030085de17d83f973
        VPCId: vpc-0208b3ab6a7cf8978
      aws:elasticbeanstalk:command:
        BatchSize: '30'
        BatchSizeType: Percentage
      aws:elasticbeanstalk:environment:
        LoadBalancerType: application
        ServiceRole: aws-elasticbeanstalk-service-role
      aws:elasticbeanstalk:healthreporting:system:
        SystemType: enhanced
      aws:elb:loadbalancer:
        CrossZone: true
      aws:elb:policies:
        ConnectionDrainingEnabled: true
    Platform:
      PlatformArn: arn:aws:elasticbeanstalk:ap-northeast-1::platform/Tomcat 8.5 with Java
        8 running on 64bit Amazon Linux/3.0.7
    

    ヘルスチェックの追加

    ロードバランサプロセスのヘルスチェック設定を追加する方法を説明します。

    AWSコンソール

    "設定 > ロードバランサ—" の画面で設定します。
    https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environments-cfg-alb.html#environments-cfg-alb-console-process-healthchecks

    コマンドライン操作

    先に保存した ebswagby-dev-sc.cfg.yml を編集します。
    OptionSettingsの下に次の行を追記します。ここではヘルスチェックのパスと成功時のHTTPステータスを設定しています。

    OptionSettings:
      AWSEBV2LoadBalancerTargetGroup.aws:elasticbeanstalk:environment:process:default:
        MatcherHTTPCode: '200'
        HealthCheckPath: /logonPage.do
    

    編集後に eb config put コマンドを実行し、AWS S3上にある設定を上書きしておきます。

    C:\Wagby-8.1.2\ebs>eb config put ebswagby-dev-sc
    

    次に eb config コマンドで設定変更を行います。

    C:\Wagby-8.1.2\ebs>eb config ebswagby-dev --cfg ebswagby-dev-sc
    Printing Status:
    2018-12-20 09:58:33    INFO    Environment update is starting.
    2018-12-20 09:58:45    INFO    Updating environment ebswagby-dev's configuration settings.
    2018-12-20 09:59:57    INFO    Successfully deployed new configuration to environment.
    

    ここまでの説明では、ビルドした wagbyapp アプリケーションはルートデプロイとしています。ここからはルートデプロイでないアプリケーションの実行方法を説明します。

    1. C:\Wagby-8.1.2\ebs\files フォルダに、作成したWARファイルをコピーします。同時に ROOT.war も files フォルダにコピーします。この ROOT.war は index.html のみを格納しています。内容は次のとおりで、Wagby のページに転送するだけです。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="refresh" content="0;URL=/wagby" />
    </head>
    <body>redirect to <a href ="/wagby">page</a>
    </body>
    </html>
    

    2. C:\Wagby-8.1.2\ebs\files フォルダには 2 つの WAR ファイルと .ebextensions フォルダが存在しています。これらを zip ファイルに圧縮してください。

    圧縮による、次のようなファイルが zip ファイルに格納されます。

    Archive:  files.zip
      Length      Date    Time    Name
    ---------  ---------- -----   ----
            0  12-20-2018 16:48   .ebextensions/
            0  12-20-2018 19:23   .ebextensions/tomcat/
            0  12-19-2018 19:53   .ebextensions/tomcat/conf/
          402  12-19-2018 19:35   .ebextensions/tomcat/conf/app_jaas.config.txt
         3837  12-19-2018 19:36   .ebextensions/tomcat/conf/logging.properties
       174412  12-19-2018 19:36   .ebextensions/tomcat/conf/web.xml
         1182  12-20-2018 18:35   .ebextensions/tomcat/copy.sh
            0  12-20-2018 12:11   .ebextensions/tomcat/lib/
      1515894  12-19-2018 19:35   .ebextensions/tomcat/lib/hsqldb.jar
         6067  12-20-2018 12:05   .ebextensions/tomcat/lib/j_conint.jar
        10596  12-20-2018 12:05   .ebextensions/tomcat/lib/spring-instrument-tomcat.jar
       279700  12-20-2018 12:11   .ebextensions/tomcat/lib/tomcat-dbcp.jar
          356  12-20-2018 16:16   .ebextensions/tomcat-settings.config
          619  12-20-2018 19:46   ROOT.war
    109358080  12-20-2018 19:21   wagby.war
    ---------                     -------
    111351145                     15 files
    

    この zip ファイルを C:\Wagby-8.1.2\ebs に移動します。

    3. C:\Wagby-8.1.2\ebs 内の .elasticbeanstalk\config.yml を編集します。 ファイル名を、ここで作成した zip ファイルに変更します。

    deploy:
      artifact: files.zip
    

    4. ヘルスチェックのURLを、公開するアプリケーションに合わせて修正します。

    eb config save コマンドで出力したファイル(C:\Wagby-8.1.2\ebs\.elasticbeanstalk\saved_configs\ebswagby-dev-sc.cfg.yml)を次のように編集してください。

    OptionSettings:
      AWSEBV2LoadBalancerTargetGroup.aws:elasticbeanstalk:environment:process:default:
        MatcherHTTPCode: '200'
        HealthCheckPath: /wagby/logonPage.do
    

    修正後、設定をアップロードします。

    C:\Wagby-8.1.2\ebs>eb config put ebswagby-dev-sc
    

    5. eb createコマンドを実行します。(既存の環境に eb config と eb deploy を行う、に変えてもよいです。)

    C:\Wagby-8.1.2\ebs>eb create --cfg ebswagby-dev-sc
    Enter Environment Name
    (default is ebswagby-dev2):
    Enter DNS CNAME prefix
    (default is ebswagby-dev2):
    
    Select a load balancer type
    1) classic
    2) application
    3) network
    (default is 2):
    Uploading: [Environment details for: ebswagby-dev2
      Application name: ebswagby
    ....
    

    6. eb open コマンドで、実行中の wagbyapp アプリケーションを開きます。

    eb open ebswagby-dev2
    

    EC2 インスタンス自体が異常終了した場合

    実行しているEC2インスタンスが障害により停止した場合、自動復旧されます。(正確には現行の EC2 インスタンスの状態が "terminate" になると、新しい EC2 インスタンスが作成されます。)この復旧作業はおおむね数分程度を要します。

    EFS の設定にも対応しています。デプロイ時のスクリプトにてマウントしているので、復旧と同時に EFS も利用できます。

    EC2 インスタンスで Tomcat が異常終了した場合

    実行しているEC2インスタンス内でTomcatが障害により停止した場合、Tomcatが再起動され、自動復旧されます。

    環境マネージメントコンソール画面を確認する

    Elastic Beanstalk の環境マネージメントコンソール画面にて、状態を監視することができます。次のサイトにある、DashboardのHealthに状態が表示されます。

    同画面のヘルスやモニタリングにて詳細な状態を確認できます。異常を通知するアラームを設定する機能も提供されています。

    アプリケーションの入れ替えは eb deploy コマンドで行います。Amazon Elastic Beanstalk では入れ替えについて複数のデプロイメントポリシーを提供しています。Wagby では "All at once" と "Blue/Green" に対応しています。

    All at once

    Elastic Beanstalk がデフォルトで採用しているポリシーです。起動中のアプリケーションを停止して入れ替えを行い、再起動します。EC2インスタンスの作成等はないためデプロイにかかる時間は最小ですが、ダウンタイムが発生します。

    このアプローチは(Elastic Beanstalkではない)オンプレミス環境での入れ替えと同じ手順となります。

    Blue/Green

    現在、実行している環境をクローン(複製)し、複製した環境に対してeb deployを行います。複製した環境をテストし、問題なければ、環境URLのスワップを行います。これによってDNSからアクセスされる先が旧環境から新環境に入れ替わります。

    データベースのテーブル定義に変更がない場合

    旧環境をクローンして新環境を作成し、新環境に eb deploy を行います。データの移行作業は不要です。

    データベースのテーブル定義に変更があった場合 (1)

    上の手順後、新しいデータベースの設定でテーブル等を作成したのち、旧環境のWagbyのエクスポートデータをインポートします。 具体的には次のようになります。

    1. 旧環境のウェブアプリケーションをメンテナンスモードに変更する。
    2. 旧環境のウェブアプリケーションにてエクスポートを行う。
    3. 新環境のウェブアプリケーションにてインポートを行う。
    4. 環境URLのスワップを行い、旧環境と新環境を入れ替える。
    5. 問題がなければ、旧環境は削除する。(eb terminate [旧環境名])

    但し、この手順はデータのエクスポートとインポートを行うため、時間がかかります。

    データベースのテーブル定義に変更があった場合 (2)

    入替時間を最小限にするための考え方を示します。

    • テーブル定義の差分を把握し、alter table でテーブルを変更する。その後 eb deployで入れ替えを行う。
    • alter table は EC2インスタンスに直接sshして、mysql等のデータベース製品が提供するCUIのツールを使って行う。
    • 新しいテーブルがある場合は create table を行う。入れ替え後に、そのモデルのデータだけをインポートする。

    仕様・制約

    • 入れ替えを行う場合、ログオン中のユーザは強制的にログオフされます。
    • Blue/Green方式はDNSによる切り替えを伴うため、アクセス元にDNSのキャッシュが残っていると新環境へアクセスできないということがあります。[参考] https://dev.classmethod.jp/cloud/eb-blue-green-devployment-jvm-dns-cache/
    • Blue/Green方式で、Amazon EFS と併用している場合は新旧環境のいずれもexportフォルダ、upload_dirフォルダはEFSにて共有されています。一方を変更・削除すると他方にも影響がありますので、ご注意ください。

    ここでは、filesフォルダ内のファイルについて説明します。

    .ebextensions/tomcat-settings.config

    option_settings では、メモリの設定やJVMオプションを指定します。
    container_commands では、必要なファイルのコピーやディレクトリの作成などを行うスクリプトを呼び出しています。

    option_settings:
      aws:elasticbeanstalk:container:tomcat:jvmoptions:
        Xms: 64m
        Xmx: 512m
        JVM Options: -Djava.security.auth.login.config=${CATALINA_HOME}/conf/app_jaas.config -Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP -Duser.timezone=Asia/Tokyo
    
    container_commands:
      01-tomcat-copy:
        env:
          CATALINA_HOME: "/usr/share/tomcat8"
        command: "sh .ebextensions/tomcat/copy.sh"
    

    .ebextensions/tomcat/copy.sh

    #!/bin/sh
    
    if [ "$CATALINA_HOME" = "" ]; then
    CATALINA_HOME=/usr/share/tomcat8
    echo CATALINA_HOME env is nothing. use default value ${CATALINA_HOME}
    fi
    
    install -m 644 .ebextensions/tomcat/conf/* ${CATALINA_HOME}/conf
    mv ${CATALINA_HOME}/conf/app_jaas.config.txt ${CATALINA_HOME}/conf/app_jaas.config
    
    install -m 644 .ebextensions/tomcat/lib/* ${CATALINA_HOME}/lib
    
    install -o tomcat -g tomcat -m 755 -d /usr/share/upload_dir
    install -o tomcat -g tomcat -m 755 -d /usr/share/export
    
    # output Workflow definitions xml file for InitLoader import
    install -o tomcat -g tomcat -m 755 -d /var/lib/customize
    
    # output Velocity log file for InitLoader import
    install -o tomcat -g tomcat -m 755 -d ${CATALINA_HOME}/bin/logs
    
    # output jprincipal.xml for InitLoader import
    chmod 775 ${CATALINA_HOME}/bin/
    chgrp tomcat ${CATALINA_HOME}/bin/
    
    TOMCAT_SCRIPT=/usr/sbin/tomcat-elasticbeanstalk
    if [ -e ${TOMCAT_SCRIPT} ]; then
    fgrep 'cd ${CATALINA_HOME}/bin/' ${TOMCAT_SCRIPT}
    if [ "$?" = "1" ]; then
    cp ${TOMCAT_SCRIPT} ${TOMCAT_SCRIPT}.orig
    sed 's/if \[ "\$1" = "start" \]; then/\
    echo change current directory ${CATALINA_HOME}\/bin\
    cd ${CATALINA_HOME}\/bin\/\
    &/' ${TOMCAT_SCRIPT}.orig > ${TOMCAT_SCRIPT}
    fi
    else
        echo ERROR nothing Tomcat boot script ${TOMCAT_SCRIPT}
    fi
    
    • installコマンドはファイルのコピーやディレクトリの作成を行うコマンドです。cpコマンドとは異なり、コピーしたファイルやフォルダに所有者、グループ、権限を指定できます。
    • 最初にconf,libフォルダの必要なファイルをTomcatにコピーしています。
    • app_jaas.config は、拡張子がconfigの場合、Elastic Beanstalkのconfigファイルと判断されてしまうため、拡張子をtxtにしておき、スクリプトでファイル名を変更することで回避しています。
    • install -d コマンドで、必要なフォルダを作成しています。upload_dir はファイル項目にてアップロードしたファイルを保存するフォルダです。exportはインポート・エクスポート画面でエクスポートしたデータを保存するフォルダです。
    • /var/lib/customizeはインポート時にワークフローのxmlファイルをcustomizeフォルダにも出力するために必要です。
    • ${CATALINA_HOME}/bin/logsはインポート時にVelocityのログファイルを出力するために必要です。
    • インポート時にjprincipal.xmlを${CATALINA_HOME}/binに作成するため、このフォルダにtomcatユーザが書き込みを行えるようにしています。
    • "TOMCAT_SCRIPT=/usr/sbin/tomcat-elasticbeanstalk" 以降の行では、Tomcatを実行するカレントディレクトリを${CATALINA_HOME}/binに実行時に変更するため、Elastic BeanstalkのTomcat起動スクリプトをsedで直接、変更しています。Elastic BeanstalkでのTomcatの起動は、このスクリプト内でjavaコマンドを用いて、Tomcatのクラスファイルを直接実行していました。このため、通常のTomcat起動におけるsetenv.sh等は呼び出されないことに注意が必要です。(*)
    Elastic Beanstalk 環境では、/etc/init.d/tomcat8 から tomcat-elasticbeanstalk を呼び出す際に su コマンドで tomcat ユーザで実行するときの tomcat ユーザのホームディレクトリが /usr/share/tomcat8 となっていました。しかし tomcat ユーザのカレントディレクトリの変更は他への影響があると考えられました。そのため sed で起動スクリプトを変更する方法としています。

    .ebextensions/tomcat/conf/app_jaas.config.txt
    .ebextensions/tomcat/conf/logging.properties
    .ebextensions/tomcat/conf/web.xml

    Tomcatのconfフォルダにコピーするファイルです。wagbyapp/confから引用しています。

    app_jaas.configのファイル名が異なるのは上に記載のとおりです。