Amazon EC2上のRed Hat Enterprise Linuxにリモートデスクトップ接続してElixir ReportをGUIインストールする手順

クラウド環境のLinuxインスタンスに、帳票ツールのElixir Reportをインストールする手順をまとめています。

参考までに、以前の記事はこちら。
Amazon EC2上にRed Hatインスタンスを作成してElixir Reportをコンソールインストールする手順
Amazon EC2上のRed Hat Enterprise LinuxにX11転送でElixir ReportをGUIインストールする手順

今回は、Amazon EC2上のRed Hatインスタンスに、デスクトップ環境VNCサーバーをインストールして、WindowsからVNCクライアントを使って接続し、Elixir ReportのレポートサーバーをGUIインストールする手順を試してみたいと思います。

環境

Windows 8.1
Elixir Report 8.7J
UltraVNC 1_2_12 64bit
Amazon EC2 Red hat Enterprise Linux 7.3
tigervnc-server

Red Hatインスタンスを作成して、パスワード認証を許可する

  1. Amazon EC2上に、デフォルトの構成でRed Hatインスタンスを作成します。以前まとめた、Amazon EC2上にRed Hatインスタンスを作成してElixir Reportをコンソールインストールする手順[Red Hatインスタンスの作成と準備]を参考にしてください。

    セキュリティ設定のポートの開放では、レポートサーバーが使用するポート7001と、サンプルのTomcatで使用するポート9090だけでなく、VNCが使用するポート5901も追加する必要があるので、注意してください。

  2. Windowsから作成したインスタンスにSSH接続します。この記事ではTera Termを使用します。Tera Termのインストール手順については、こちらも以前の記事[SSH接続用にWindowsにTera Termをインストールする]を参考にしてください。

  3. Tera Termでインスタンスに接続したら、パスワード認証(PasswordAuthentication)を許可するように変更します。sshd_configは念のためバックアップを取っておいてください。変更後のsshd_configは次のようになります。

    $ cat /etc/ssh/sshd_config|grep Pass
    PasswordAuthentication yes
    #PermitEmptyPasswords no
    #PasswordAuthentication no
    #KerberosOrLocalPasswd yes
    
  4. sshdサービスを再起動します。

    $ sudo systemctl restart sshd.service
    
  5. ec2-userのパスワードを設定します。

    $ sudo –i
    $ passwd ec2-user
    パスワード入力
    
  6. Tera Termを新しく起動して、パスワードでログインできるか試してみます。

Red Hatに、デスクトップ環境とVNCサーバーをインストールする

  1. Tera TermでRed Hatインスタンスに接続して、パッケージのグループServer with GUIをインストールします。

    $ sudo yum grouplist
    $ sudo yum -y groupinstall 'Server with GUI'
    
  2. 次にVNCサーバーをインストールします。

    $ sudo yum –y install tigervnc-server
    
  3. VNCサーバーのパスワードを設定します。

    $ vncpasswd
    Password:
    Verify:
    
  4. VNCサーバーのユニットファイルをコピーします。

    cp -a /lib/systemd/system/vncserver@.service /etc/systemd/system /vncserver@:1.service
    
  5. コピーしたユニットファイルを編集して、<USER>の部分をログインユーザー名ec2-userで置き換えます。

    $ vi /etc/systemd/system/vncserver@:1.service
    ExecStart=/usr/sbin/runuser -l ec2-user -c "/usr/bin/vncserver %i"
    PIDFile=/home/ec2-user/.vnc/%H%i.pid
    
  6. ファイアウォールの設定にVNCサーバーを追加します。また、レポートサーバーが使用するポート7001も許可しておきます。

    $ firewall-cmd --permanent --zone=public --add-service=vnc-server
    $ firewall-cmd --zone=public --add-port=7001/tcp --permanent
    $ firewall-cmd --reload
    $ firewall-cmd --list-all
    
  7. rootでVNCのサービスを起動します。

    $ sudo su –
    # systemctl start vncserver@:1
    
  8. Windowsに、VNCクライアントとしてUltraVNCをインストールします。筆者は以下のサイトからダウンロードしてインストールしました。

    窓の杜 UltraVNCUltraVNC_1_2_12_X64_Setup.exe

  9. UltraVNC Viewer を起動して、VNC Serverの入力箇所にRed HatインスタンスのIP::ポート(またはIP:ポート)と入力して、Red Hatインスタンスのデスクトップに接続できることを確認します。
    1vnc接続成功.png
    接続できました。

Red HatへVNC接続してレポートサーバーのインストーラを実行する

  1. UltraVNC ViewerでRed Hatインスタンスに接続します。

  2. レポートサーバーのインストーラをTera TermからSCPで転送し、実行権限の設定を行います。この手順の詳細は、以前の記事、Amazon EC2上にRed Hatインスタンスを作成してElixir Reportをコンソールインストールする手順[レポートサーバーのインストーラをRed Hatに転送する]を参照してください。

  3. Tera TermまたはRed Hatインスタンスのコンソールを開き、必要なライブラリをインストールします。このライブラリインストールはコマンドインストール、X11転送でのGUIインストールでも行います。

    $ sudo yum -y install libc.so.6
    
  4. レポートサーバーのインストーラを次のコマンドで起動します。

    $ ./elixirreport87_linux64.bin
    

    2VNC_GUIインストーラ00.png

  5. その後の手順の詳細は、以前の記事、Amazon EC2上のRed Hat Enterprise LinuxにX11転送でレポートサーバーをGUIインストールする手順[GUIインストールを実行する]を参考に完了させてください。

インストールしたレポートサーバーを起動する

  1. レポートサーバーを起動するユーザーのLANG環境変数を日本語ロケールへ変更します。

    $ export LANG=ja_JP.UTF-8
    
  2. レポートサーバーをインストールしたディレクトリ以下の/binに移動します。筆者の環境では、/home/ec2-user/ElixirReport87J/bin/になります。

    $ cd /home/ec2-user/ElixirReport87J/bin
    
  3. レポートサーバーの起動シェルスクリプトを実行します。

    $ ./reportserver-start.sh
    

    ※”&”を付加することでバックグラウンド実行にします。

  4. 起動に成功すると、コンソール上に次のようにCopyrightが表示されます。

    INFO  [main] com.elixirtech.ers2.Main - Copyright 2016 Elixir Technology Pte Ltd
    INFO  [Thread-19] com.elixirtech.ers2.EnsureServerStarted - Checking server status
    
  5. Windows上のブラウザからレポートサーバーのWebインターフェースにログインしてみます。

    http://<パブリックIP>:7001
    

    3WebインターフェースURL.png

    【注意】ログイン画面が表示されないときは、以下のような原因が考えられます。
    ・レポートサーバーの起動に失敗している
    ・Red Hatインスタンスのセキュリティグループの設定で、ポート7001を追加していない
    ・Red Hatインスタンスのファイアウォール設定でポート7001を許可していない

  6. ログイン画面が表示されたら、デフォルトで用意されている次の管理者ユーザーでログインします。

    ユーザー名: admin
    パスワード: sa
    
  7. [リポジトリ]以下のサンプルテンプレートを実行してみます。[samples]‐[demo]-[sales2]-[sales2.rml]を選択して、出力形式に”PDF”を選んで[OK]をクリックすると、レポートが生成されます。
    4ロケールを日本語にして、PDFもできます.png

以上で完了です。

続きを読む

EC2-ローカル間でのファイル転送

3行で分かるあらすじ

  1. EC2内でエクスポートしたsqlファイルをローカルに転送させたかった。
  2. FileZillaでSFTPを使って転送しようとしたが、なぜかsqlファイルが表示されなかった。
  3. 表示されない原因調べるのも馬鹿らしいのでscpで転送した。

環境

ローカル:Mac
Amazon EC2:Amazon Linux

EC2 → ローカル 転送

scp -i [公開鍵ファイルのパス] [ユーザ名@ドメイン]:[送信元EC2ファイルパス] [転送先ローカルファイルパス]

#scp -i /keys/hoge.pem user@ec2-xxxx.com:/sqls/hoge.sql /Desktop

ローカル → EC2 転送

scp -i [公開鍵ファイルのパス] [送信元先ローカルファイルパス] [ユーザ名@ドメイン]:[転送先EC2ファイルパス]

#scp -i /keys/hoge.pem /Desktop/hoge.sql user@ec2-xxxx.com:/sqls

まとめ

エンジニアたるものGUIばかりに頼っていてはいけないな!な!(戒め)

続きを読む

CloudFormationの特徴とはじめ方

はじめに

本記事はCloudformationを始めようとしている人向けです。
細かい技術的な話よりは、特徴だったり始め方の手順だったりが書かれています。
公式ドキュメントを舐めるのが面倒な人はちょうどいいです。

概要

インフラ環境をテンプレート化し、何度実行しても同じ環境を簡単に構築することができる。
AWSのアイコンをペタペタ並べていくことでテンプレートを新規作成する「Design Template」機能や、既存のインフラ環境を自動でテンプレート化してくれる「CloudFormer」という機能がある。
また、コードでテンプレートを作成することも可能であり、デフォルトの言語はJSONとなっている。

メリット

大きな特徴として、以下が挙げられる。

  1. インフラがコードで管理できること
  2. 作成・削除・更新が容易であること

何がもたらされるのか

  • コードで管理できるということは、バージョン管理が容易になる。
    「インフラの成長過程がわかる」とよく言われる所以
  • オペレーションミスなし、作業者の技術力に依存しない環境構築が可能になる
  • 運用中、値変更があってもリスクなしでアップデートできる
  • 開発環境など限定的にしか使用しないインフラのランニングコストを削減できる
  • 既存のインフラ環境をすぐに可視化できる(構成図を作成・更新する工数削減)

CloudFormationの金額

無料で使用できる。立ち上がったリソースに対して課金が発生する。

機能

CloudFormation Designer

おなじみのAWSアイコンを配置し、繋いでいくことでテンプレートが作成できる。
作成したDesignは保存、ダウンロード、ローカルから開く、などができる。
アイコンは単純なAWSサービスだけではなく、ルートテーブルやVPCEndpointなど、普段は見ないアイコンも存在する。
理由は、この機能は構成図を作成するためのものではなく「テンプレートを作成する」機能のため、詳細なポリシーまで指定する必要がある。

CloudFormer

既存で構築されているインフラ環境をテンプレートに落とし込める機能。
自動でCloudFormation用のインスタンスを作成し、テンプレート作成準備を数分で構築する。
すべてのCloudFormationのリソースをサポートしている。
注意点としては、新規インスタンスを一台起動させて実行するため、課金が発生する。

詳しい特徴は以下の通り

  • どのリソースをテンプレートに含めるか制御可能
  • リソースを選択すると、従属するリソースも自動選択(変更可能)
  • EC2インスタンスを選択すると、そのインスタンスが起動された元のAMIが指定される

CloudFormerで生成されたテンプレートを手修正し、最終的なテンプレートとして利用することを推奨している

開始手順

CloudFormerスタックを作成する

  1. Cloudformation画面にて「Create New Stack」をクリック
  2. 「Select a sample template」のプルダウンから「Cloudformer」を選択
  3. 「Next」で次ページ
  4. 必要な情報を入力する
  5. Stack Name CloudFormerのスタック名
  6. Password CloudFormerにてテンプレートを作成するページへログインするためのパスワード
  7. Username CloudFormerにてテンプレートを作成するページへログインするためのユーザ名
  8. VPCSelection CloudFormer用インスタンスが立ち上がるVPC。特に変更はしない

  9. 「Next」で次ページ

  10. 必要な情報を入力する(特に設定しなくても進められる)

  11. TagとKeyの設定。リソースにタグを適用できるため、識別や分類したい場合は設定する

  12. Permissionsの権限がないとCloudformationは実行できないため、必ず実行権を持ったロールアカウントにする

  13. 「Next」で次ページ

  14. サマリを確認後、「Create」をクリック

  15. スタック作成が実行されるため、起動完了の「CREATE_COMPLETE」となるまで待機

Cloudformationテンプレートを作成する

  1. CloudFormerのスタックを選択し、「Outputs」タブを選択
  2. 「Value」に表示されるURLを踏み、テンプレート作成画面へ飛ぶ
  3. 「アクセス保護されてないページ」の警告を通過する
  4. テンプレート化を実施するリージョンを選択し「Continue」をクリック
  5. テンプレートに含めたいリソースの選択が続く。含める含めないを考慮しながら「Continue」をクリックしていく
  6. サマリを確認後、「Done」をクリック
  7. テンプレートが作成されているので、S3のどのバケットに保存するか選択する
  8. 終了

Cloudformerスタックを削除する

  1. テンプレート化が確認されたらスタックを削除(インスタンス分が課金されている)
  2. 終了

JSONテンプレート

テンプレートはデフォルトでJSON形式で記述される。
いくつかのセクションに分かれており、そのうち「Resources」セクションのみ必須で記述する必要がある。

セクションは以下の通り

  • Format Version(任意)

    CloudFormationのテンプレートバージョンを指定する
    
  • Description(オプション)
    テンプレートを説明するテキスト文字列。テンプレートのパラメータ等を入力する際に表示される
    
  • Metadata(オプション)
    テンプレートに関する追加情報を提供する
    
  • Parameters(任意)
    実行時にユーザに入力を求めるパラメータを定義する。インフラ構成は変えず、IPやインスタンスタイプを変えたいなどの運用で便利。
    
  • Mappings(任意)
    HashTableのようなもの。条件パラメータ値の指定に使用できる。リージョンやユーザ入力パラメータによって値が変わるものに利用する。Mappingsを利用することでテンプレートの再利用性が向上する
    
  • 条件(オプション)
    条件つきのリソースの制御が可能
    
  • 変換
    サーバレスアプリケーションの場合は、使用するAWS SAMのバージョンを指定する
    
  • Resources(必須)
    インスタンスやS3など、使用するリソースを指定する。
    
  • Output(任意)
    スタック構築後にCloudFormationから出力させる値(DNS名やEIP値など)
    

テンプレート作成のためのいくつか注意点(共通)

  1. CloudFormation Designerでアイコンを並べていくだけではテンプレートとして機能しない
  2. テンプレート作成し保存しただけではCloudFormationは実行できない
  3. 立ち上げたいインフラ環境のすべてをひとつのテンプレートとして作成すべきではない

1. CloudFormation Designerに関わらず、CloudFormationテンプレートではリソース同士の「依存関係」が重要になる

  • ここで言う依存関係とは、リソースを作成する順序
  • AリソースがBリソースを依存関係に指定している場合、Bリソースが作成されるまでAリソースは作成されない
  • この依存関係は、リソースを構築する上で避けて通ることができない
    ※備考※
    VPC内の一部リソースはゲートウェイを必要とする。
    VPC、ゲートウェイ、ゲートウェイアタッチメントを AWS CloudFormation テンプレートで定義する場合、
    ゲートウェイを必要とするリソースはすべて、そのゲートウェイアタッチメントに依存することになる。
    たとえば、パブリック IP アドレスが割り当てられている Amazon EC2 インスタンスは、
    同じテンプレートで VPC リソースと InternetGateway リソースも宣言されている場合、VPC ゲートウェイのアタッチメントに依存する。
    

現在、次のリソースは関連付けられたパブリック IP アドレスを持ち、VPC 内にある場合VPC ゲートウェイのアタッチメントに依存する。(2017年4月現在)

・Auto Scaling グループ
・Amazon EC2 インスタンス
・Elastic Load Balancing ロードバランサー
・Elastic IP アドレス
・Amazon RDS データベースインスタンス
・インターネットゲートウェイを含む Amazon VPC のルート

2. テンプレート作成後、スタックとして成立させる

  • パラメータを設定すること

    インスタンスタイプなどの値はスタック作成時に設定するケースが多い
    

3. 削除したくないリソースを予め決定しておくこと

  • CloudFormationで起動させたインフラ環境を停止する場合、インフラ環境を削除することになる

    削除対象のテンプレート内に固定IPが割り振られてたインスタンスがあった場合、インフラ環境を再構築した際に割り振りが変更してしまう。
    普遍なリソースはテンプレートを別にする
    

参考

AWS Cloudformationユーザガイド
http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html

CloudFormation超入門
http://dev.classmethod.jp/beginners/chonyumon-cloudformation/

AWS Black Belt Tech シリーズ 2015 – AWS CloudFormation
https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-2015-aws-cloudformation?qid=9c031227-6000-4a12-bf18-49cda2c6bfe9&v=&b=&from_search=1

続きを読む

Amazon EC2上のRed Hat Enterprise LinuxにX11転送でElixir ReportをGUIインストールする手順

この記事はクラウド環境のLinuxインスタンスに、帳票ツールのElixir ReportをGUIインストールする手順についてまとめたものです。

以前の記事、Amazon EC2上にRed Hatインスタンスを作成してElixir Reportをコンソールインストールする手順では、デスクトップ環境のないLinuxインスタンスにコンソールインストールする手順を試してみました。

今回は、SSHのX11転送(X11フォワーディング)機能を使って、デスクトップ環境の入っていないAmazon EC2上のRed Hat Enterprise LinuxのインスタンスでElixir Reportのレポートサーバーのインストーラを実行し、GUIインストーラをWindows側に表示してインストールしてみたいと思います。

環境

Windows 8.1
Elixir Report 8.7J
Amazon EC2 Red hat Enterprise Linux 7.3

WindowsにTera Termをインストールする

この記事では、Linux OSへのSSH接続にTera Termを使用します。Tera TermのWindowsへのインストールは、以前の記事[SSH接続用にWindowsにTera Termをインストールする]を参考にしてください。

WindowsにXサーバーをインストールする

Linux上のGUIアプリケーションをWindows側で操作するには、WindowsのリモートデスクトップやVNC経由でLinuxのデスクトップに接続することもできますが、この記事では、Linux上で動作しているアプリケーションのGUIをWindows側に表示する方法としてX11転送を利用します。

この方法ではWindows側にXサーバーがインストールされている必要があるので、今回はXmingというフリーのWindows用Xサーバーを使用します。こちらの記事を参考にしました。

【参考記事】フリーのWindows用Xサーバー「Xming」のインストールと基本設定、使い方

  1. Xmingインストーラをダウンロードサイトからダウンロードします。本記事の作成時(2016年11月)で最新のXming(Xming-6-9-0-31-setup.exe)と、Xming-fonts(Xming-fonts-7-7-0-10-setup.exe)をダウンロードします。1ダウンロードファイル選択.png  

  2. Xmingのインストーラをダブルクリックで起動します。選択項目は基本的にデフォルト設定を受け入れてインストールします。[Next]で進みます。
    2install01.png

  3. インストール先を指定して次に進みます。

  4. コンポーネントの選択画面では、デフォルト設定を受け入れて進みます。3install03.png

  5. アイコンやタスクの選択ステップも同様に、デフォルトのまま進みます。4install05.png

  6. インストール前の確認項目をチェックして進み、インストールを完了します。5install07.png

  7. インストールの完了画面で[Launch Xming]にチェックを入れて終了すると、Xmingが起動してタスクトレイにアイコンが表示されます。
    6icon.png

    [注意]Xming起動時に、Windowsファイアウォールの警告が表示されることがあります。その場合は、アクセスを許可します。

  8. 次にXming-fontsをインストールします。Xming-fontsのインストーラを起動し、コンポーネントの選択でデフォルトを受け入れます。
    7fontinstall01.png

  9. インストールの内容を確認して進めると、インストールが完了します。8fontinstall03.png

Amazon EC2 Red Hatインスタンスの作成と準備

Amazon EC2上に、デフォルトの構成でRed Hatインスタンスを作成します。以前の記事[Red Hatインスタンスの作成と準備]セクションを参考にしてください。

インスタンスの作成と、Windows上のTera TermからRed Hatインスタンスへ接続するまでの手順が完了します。

X11転送の設定をする

X11転送に関する、Red Hat側およびWindows側の設定と確認を行います。

Linux側の設定

  1. Red Hatインスタンスで、X11転送が有効化されているか確認します。/etc/ssh/sshd_config内で、X11Forwardingyesになっていれば問題ありません。

    $ sudo cat /etc/ssh/sshd_config |grep X11
    X11Forwarding yes
    #X11DisplayOffset 10
    #X11UseLocalhost yes
    #       X11Forwarding no
    
  2. 手順1で、X11Forwardingnoになっている場合は、/etc/ssh/sshd_configをバックアップした上で設定をyesに変更し、sshdを次のコマンドに従って再起動します。

    $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_org
    $ sudo vi /etc/ssh/sshd_config
    $ sudo service sshd restart
    Redirecting to /bin/systemctl restart  sshd.service
    
  3. XアプリケーションをX11転送によりWindows上に表示できるか確認するため、今回はxeyesというXアプリケーションをRed Hatインスタンスにインストールしておきます。

    $ sudo yum –y install xeyes
    

Windows側の設定とテスト

  1. Windows側でXmingが起動していることを確認します。

  2. Tera Termの設定で、リモートのXアプリケーションをローカルに表示する設定を行います。Tera Termの[設定]-[SSH転送]をクリックします。
    9TeraTerm_SSH転送設定.png

  3. [リモートの(X)アプリケーションをローカルのXサーバに表示する]にチェックを入れて、[OK]をクリックします。
    10TeraTerm_SSH転送設定01.png

  4. 一旦Tera Termからログアウトして、再度ログインし直します。

  5. DISPLAY変数が設定されているかコマンドで確認します。

    $ echo $DISPLAY
    
  6. 前の手順で何も返ってこなかった場合は、先ほどインストールしたxeyesを実行しても次のようなエラーになってしまいます。

    $ sudo xeyes
    Error: Can't open display:
    

    Red Hatインスタンス側にxauthと、x11のライブラリが不足しているようなので、必要なライブラリを次のコマンドでインストールしました。

    $ sudo yum –y install xorg-x11-xauth.x86_64 xorg-x11-server-utils.x86_64
    
  7. 一旦Tera Termでログアウトします。

    $ exit
    
  8. 再度Tera TermでRed Hatインスタンスにログインして、次のコマンドでDISPLAY変数を確認します。筆者の環境では自動でlocalhost:10.0が設定されていました。

    $ echo $DISPLAY
    localhost:10.0
    
  9. xeyesを実行してみます。無事Windows側にxeyesアプリケーションが表示されました。

    $ xeyes
    

    11xeyes.png

    [注意]次のようなX転送のエラーが出るときは、XmingがWindows側で起動していない可能性があります。起動していることを確認してください。
    12TTSSHエラー.png

レポートサーバーのインストーラをRed Hatに転送する

Tera Termを利用して、Windows側にあるElixir ReportのレポートサーバーのLinux OS用インストーラ(elixirreport87_linux64.bin)と、ライセンスファイル(*.license)をRed Hatインスタンスに転送します。

この手順については、以前の記事[レポートサーバーのインストーラをRed Hatに転送する]を参照してください。

ファイルの転送が完了したら、次の準備を行っておきます。

  1. インストールは現在ログインしているec2-userで行います。ec2-userのLANG環境変数が英語になっている場合は、日本語(ja_JP.UTF-8)に変更しておきます。

    $ echo $LANG
    en_US.UTF-8
    $ export LANG=ja_JP.UTF-8
    $ echo $LANG
    ja_JP.UTF-8
    
  2. 転送したインストーラに実行権限を与えます。

    $ chmod +x ./elixirreport87_linux64.bin
    $ ls -la
    -rwxr-xr-x. 1 ec2-user ec2-user 279506476 Sep 29 00:00  elixirreport87_linux64.bin
    

GUIインストーラの実行とエラーの発生

いよいよインストーラを実行してみます。しかし、エラーでインストーラが終了してしまいました。必要なライブラリがRed Hat側に不足しているようです。

$ ./elixirreport87_linux64.bin
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...
strings: '/lib/libc.so.6': No such file

Launching installer...

Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)

Stack Trace:
java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit
        at java.awt.Component.<clinit>(Component.java:593)
        at com.zerog.ia.installer.LifeCycleManager.g(DashoA8113)
        at com.zerog.ia.installer.LifeCycleManager.h(DashoA8113)
        at com.zerog.ia.installer.LifeCycleManager.a(DashoA8113)
        at com.zerog.ia.installer.Main.main(DashoA8113)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at com.zerog.lax.LAX.launch(DashoA8113)
        at com.zerog.lax.LAX.main(DashoA8113)
This Application has Unexpectedly Quit: Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)

必要なライブラリをインストールして実行時エラーを解消する

  1. 上記のエラーを最初から確認すると、まずlibc.so.6ファイルが見つからないという内容のエラーが出力されているので、次のコマンドでlibc.so.6ライブラリをインストールします。

    $ sudo yum -y install libc.so.6
    
  2. 次に発生しているInvocationTargetExceptionは、X11のライブラリが不足していることが原因のようです。必要なライブラリをインストールします。

    $ sudo yum –y install libXtst
    

起動したGUIインストーラの日本語が□に…フォントをインストールする

  1. 再度インストーラを実行してみます。

    $ ./elixirreport87_linux64.bin
    
  2. インストーラのGUIが起動しましたが、日本語が□表示になっています。Linux側に日本語フォントがインストールされていないことが原因でしょう。左下のキャンセルボタンをクリックしてインストールを中止します。
    13GUIトーフになる.png

    14終了02.png

  3. 日本語フォントをインストールします。VLゴシック、IPA明朝、IPAゴシックをインストールしました。

    $ sudo yum -y install vlgothic-fonts ipa-mincho-fonts ipa-gothic-fonts 
    

GUIインストールを実行する

  1. 再度インストーラを起動します。今度は日本語も表示されるようになりました。
    15GUI_01.png

  2. [次へ]で進み、[使用許諾契約の条項に同意する]にチェックして、進みます。
    16GUI_02.png

  3. [ライセンスキーファイルの登録]をクリックして、登録するライセンスファイルを選択します。
    17GUI_03.png

  4. インストールするモジュールにチェックが入っていることを確認して、次に進みます。この画面では、先ほどの手順で追加したライセンスでインストールできるモジュールだけが表示されます。18GUI_04.png

  5. レポートサーバーで使用するポート(今回はデフォルトの7001)、ログレベルを確認します。デフォルトのまま進みます。
    19GUI_ポート設定.png

  6. インストール先ディレクトリは、ec2-userにアクセス権のある場所を選択します。今回はユーザーディレクトリの下にします。
    20GUI_インストール先.png

    [注意]ec2-userに書き込み権限のない場所を指定すると、エラーが表示されます。

  7. 確認画面で内容を確認したら、[インストール]をクリックします。
    21GUI_確認.png

  8. 次の画面が表示されれば完了です。
    22GUI完了.png

ヘッドレスモードの設定とレポートサーバーの起動

インストールはX11転送でGUIを利用しましたが、今後、レポートサーバーの実行時にX Window Systemに接続できない場合は、Javaのヘッドレスモードを有効にする必要があります。

  1. レポートサーバーのインストール先/binディレクトリに移動します。筆者の環境では/home/ec2-user/ElixirReport87J/bin/になります。

    $ cd /home/ec2-user/ElixirReport87J/bin
    
  2. レポートサーバーの起動シェルスクリプトをバックアップした後、編集します。

    $ cp reportserver-start.sh reportserver-start.sh_org
    $ vi reportserver-start.sh
    

    ※5行目のheadless設定を追加して、保存します。

    #!/bin/sh
    JAVACMD="../jre/bin/java"
    
    $JAVACMD -mx512M 
            -Djava.awt.headless=true 
            -Duser.home=../license 
     (以下省略)
    
  3. レポートサーバーの起動シェルスクリプトを実行します。

    $ ./reportserver-start.sh &
    

    ※”&”を付加してバックグラウンド実行にします。

    【注意】起動ユーザーのLANG環境変数が英語の場合、レポートサーバーが英語ロケールで起動され、Webインターフェースのメニューなどが英語表示になってしまいます。日本語ロケールへ変更して起動してください。

  4. 起動に成功すると、コンソール上に次のようにCopyrightが表示されます。

    INFO  [main] com.elixirtech.ers2.Main - Copyright 2016 Elixir Technology Pte Ltd
    INFO  [Thread-19] com.elixirtech.ers2.EnsureServerStarted - Checking server     status
    
  5. Windows上のブラウザからレポートサーバーのWebインターフェースにログインしてみます。

    http://<パブリックIP>:7001
    

    23WebインターフェースURL.png

    【注意】ログイン画面が表示されないときは、以下のような原因が考えられます。
    ・レポートサーバーの起動に失敗している
    ・Red Hatインスタンスのセキュリティグループの設定で、ポート”7001”を追加していない

  6. ログイン画面が表示されたら、デフォルトで用意されている次の管理者ユーザーでログインします。

    ユーザー名: admin
    パスワード: sa
    
  7. [リポジトリ]以下のサンプルテンプレートを実行してみます。
    [samples]‐[demo]-[sales2]-[sales2.rml]を選択して、出力形式に”PDF”を選んで[OK]をクリックします。
    24レポート生成PDF選択.png

  8. PDF形式のレポートが生成できました。
    25フォントインストール後の結果.png

以上で完了です。

参考情報

Q1. No X11 DISPLAY variable was setエラーでインストールが終了する

X11などの設定を何も行っていない状態でGUIインストールを実行すると、X11のエラーでインストーラが終了してしまいます。この記事の[X11転送の設定をする]の項目を確認してみてください。

[参考情報]エラー出力の例
$ ./elixirreport87_linux64.bin
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...
strings: '/lib/libc.so.6': No such file

Launching installer...

Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)

Stack Trace:
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
        at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207)
        at java.awt.Window.<init>(Window.java:536)
        at java.awt.Frame.<init>(Frame.java:420)
        at java.awt.Frame.<init>(Frame.java:385)
        at javax.swing.JFrame.<init>(JFrame.java:189)
        at com.zerog.ia.installer.LifeCycleManager.g(DashoA8113)
        at com.zerog.ia.installer.LifeCycleManager.h(DashoA8113)
        at com.zerog.ia.installer.LifeCycleManager.a(DashoA8113)
        at com.zerog.ia.installer.Main.main(DashoA8113)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at com.zerog.lax.LAX.launch(DashoA8113)
        at com.zerog.lax.LAX.main(DashoA8113)
This Application has Unexpectedly Quit: Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)

Q2. フォントをインストールしても、日本語が□のままになる

fc-listコマンドがRed Hatインスタンスで実行できるか確認してください。コマンドが入っていない場合は、フォントの管理に使用されるfontconfigパッケージを次のコマンドでインストールして、fc-listコマンドが使用できるようになるか確認した上で、再度インストールを試してみてください。

$ sudo yum –y install fontconfig

※この記事では、X11転送の確認用にxeyesアプリケーションをインストールしています。このインストール中、依存関係によりfontconfigが一緒にインストールされるため、日本語の表示には問題ありませんでした。xeyesをインストールしなかった場合は、別途fontconfigをインストールする必要があります。

Q3. Xアプリケーションを起動したが、Windows側にX転送エラーが表示される

次のようなX転送のエラーが出るときは、XmingがWindows側で起動していることを確認してください。
12TTSSHエラー.png

Q4. レポートサーバー起動時にWindows側にX転送エラーが表示され、レポートサーバーが起動できない

Q3と同様のエラーが表示され、レポートサーバーの起動中に次のようなjava.awt.AWTErrorが出力される場合は、ヘッドレスモードの設定が正しく行われていない可能性があります。この記事の[ヘッドレスモードの設定とレポートサーバーの起動]の項目を参考に、起動シェルスクリプトの編集を行ってみてください。

Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
        at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
        at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:65)
(以下省略)

続きを読む

クラウドサーバー Amazon EC2 を起動するだけのリアルボタンを作ってみた ~仮想と現実の新たな接点

AWSはクラウドサービスですが「AWS IoT Button」という物理的なボタンのサービスもあります。この AWS IoT Button は、AWSクラウド上の AWS IoT に対して … 続きを読む

JenkinsおじさんのためのAWS Batch

はじめに

この記事の対象者

主にこんな感じの人をターゲットにしています。

  • Jenkinsでジョブを管理している
  • AWSをcliで触るのは実は大変…。GUIでやりたい
  • Dockerはインストールはしているけれど、あんまり触ったことが無い

また、本記事執筆時点では、us-east(virginia)でのみ利用可能なので、VPCでの利用はあまり想定していません。 (VPNを繋げば出来ると思いますが…)
本来はAuto ScalingやSPOTインスタンスと組み合わせたりといろいろあるのですが、私的事情により、志は低く、過疎っているJenkinsサーバを廃止(サーバレス化)することを目標にしています。

対象のJenkinsジョブ

今回ターゲットにするのは、Jenkinsだと一般的と思われる以下の処理とします。

  • JDKがバージョン指定で入っている
  • バッチ処理の入ったリポジトリをgit cloneしてくる
  • シェルスクリプトからごにょごにょして、リポジトリの中身を実行する

PHPやRubyなど別言語の人は、Javaな部分は脳内で別言語に置き換えてみてください。

AWS Batchでの流れ

Jenkinsでごく一般的なこの処理をAWS Batchでやろうとした場合、以下のような流れが一番シンプルになるかなと思います。

  1. JDK等、必要な実行環境を準備したDockerfileを作成する
  2. Jenkinsでやっていたシェル相当のシェルスクリプトを作成する
  3. リポジトリにDockerfileとシェルスクリプトを追加する
  4. Amazon ECRに設定を作成する
  5. Dockerfileでビルドし、JDK及びバッチ処理のリポジトリの入ったコンテナを作成し、ECRにプッシュする
  6. AWS Batchの設定(IAM Role, Compute Environment, Job Definition等)を作成する
  7. AWS Batchを実行する

というわけで、ハンズオン的に進めて行きたいと思います。

作業手順

1. Dockerfileの作成

古風なエンジニアにはこちらの記事が一番わかりやすいんじゃないかと思います。

効率的に安全な Dockerfile を作るには

今回のケースだとJavaのバッチ(Hello.class)を動かしたいので

$ ls
Hello.class

$ vim Dockerfile

として、以下のようなDockerfileを作成します。

Dockerfile
FROM centos:6

RUN yum install -y java-1.7.0-openjdk java-1.7.0-openjdk-devel
ENV JAVA_HOME /usr/lib/jvm/java-openjdk
RUN mkdir /opt/batch-directory
COPY . /opt/batch-directory/
WORKDIR /opt/batch-directory

Javaは諸々の事情からOpenJDKにしていますが、Oracle Javaが必要な場合は、少し手間はかかりますが、Oracle Javaでもコンテナを作成することはできます。また、本来だとベースイメージはAmazonLinuxだったりJavaが入ったコンテナの方が良いと思いますが、保守的な方のために、敢えてCentOSにしました。(あんまり意味ないかな…)

2. シェルスクリプトの作成

Jenkinsにバッチを実行するためのシェルスクリプト(Jenkinsでコマンド欄に入れていたようなもの)を作ります。

$ ls
Dockefile
Hello.class

$ vim batch.sh

今回は解説用なので雑なものを用意しています。

batch.sh
#!/bin/bash

java -version
java Hello

3. Dockerfileとシェルスクリプトをリポジトリに追加

せっかく作成したので、これらのファイルをGitリポジトリに追加しましょう。(これはこの後の工程上の必須項目ではないので、一連がテストされてからでも大丈夫です)

4. Amazon ECRにリポジトリを作成する

Amazon EC2 Container Registry(ECR)にリポジトリを作成します。ここではリポジトリ名を入れるだけです。
Amazon EC2 Container Service.png

5. Dockerfileでビルド

先ほど付けた名前を使って、Docker buildをします。

$ docker build -t unagi/jenkins-ojisan .

6. コンテナをECRに登録する

タグ付けして、先ほど作成したECRに登録してあげます。

$ aws ecr get-login --region us-east-1

# これでdocker loginに必要なコマンドがでてくるので、実際はそれを使う
$ docker login -u AWS -p xxxxxx -e none https://xxxx.dkr.ecr.us-east-1.amazonaws.com
$ docker tag unagi/jenkins-ojisan:latest xxxx.ecr.us-east-1.amazonaws.com/unagi/jenkins-ojisan:latest
$ docker push xxxx.ecr.us-east-1.amazonaws.com/unagi/jenkins-ojisan:latest

7. AWS Batchの設定をつくる

Job definitionとCompute environmentを設定します。

こちらがJob definitionで、コンテナを起動するときの設定になります。環境変数を設定できるので、パラメータを渡したい場合は使う事ができます。
AWS Batch (1).png

S3アクセス等でIAM Roleを使いたい場合は、ここで定義するJob Roleで定義する必要があります。そしてさらに分かりにくいことに、ここに表示されるIAM Roleを作るためには、信頼するエンティティがAmazon EC2 Container Service Task Role(ecs-tasks.amazonaws.com)のIAM Roleを作る必要があります。IAM Role作成時に似たようなのが沢山あるので、非常に解りづらいところです。

そして、次の画面はCompute environmentです。
AWS Batch (2).png
こちらはあまり見所は無く、淡々と設定していきます。ここで出てくるRoleは、ECSで動作するために必要なもので、コンテナで使うモノではありません。なので、適当に作成します…。

8. AWS Batchの実行

Job definitionsからSubmit jobして実行します。実行時に先ほど設定した環境変数を変更しながらの実行等もできます。
ちなみにこれも凄く分かりにくいのですが、Job definitionを編集したい場合はCreate new versionです。新しいバージョンの定義が出来てしまうので、古い方は不要になった段階で削除してしまいましょう。

9. 実行ログの確認

CloudWatchのログから見ます。Submitしてから起動までは少し時間がかかるので、少し待たないとログ出力はされません。

あとがき

Jenkinsおじさん的には、Dockerが出てくるため取っつき辛い印象を持つのかなと思います。
美しくDockerを使う場合はさておき、バッチ処理をやるだけであれば、Dockerfileに書くのはバッチサーバを作るときのセットアップコマンドで、一回やってしまえばあまり難しくないです。

続きを読む

Amazon EC2上にRed Hatインスタンスを作成してElixir Reportをコンソールインストールする手順

帳票ツールElixir Reportのレポートサーバーを、Amazon EC2上のRed Hat Enterprise Linuxにインストールした手順をまとめてみました。

デスクトップ環境のないLinuxインスタンスなので、GUIインストールではなく、コマンドラインからコンソールインストールした手順になります。

大きく4つの項目に分かれています。

  1. WindowsにTera Termをインストール
  2. EC2上にRed Hatのインスタンスを作成
  3. Elixir Reportのインストール
  4. Elixir Reportのサンプル確認

Amazon EC2のアカウントはすでに取得済みであることを前提としています。

環境

Windows 8.1
Elixir Report 8.7J
Amazon EC2 Red Hat Enterprise Linux 7.3

SSH接続用にWindowsにTera Termをインストールする

  1. 作成するRed HatインスタンスにWindowsからSSH接続するために、Tera Termを利用します。 Tera Termの日本語ページからダウンロードします。記事執筆時(2016年11月)で最新のバージョン、4.92のインストーラ(teraterm-4.93.exe)をダウンロードしました。

    0TeraTermダウンロード.png

  2. ダウンロードしたteraterm-4.93.exeをダブルクリックで起動して、インストールを実行します。選択項目はすべてデフォルトとしました。

    1TeraTermコンポーネントの選択.png

  3. インストールを完了します。

Red Hatインスタンスの作成と準備

  1. Amazon EC2にログインし、[インスタンスの作成]をクリックします。

  2. “Red Hat Enterprise Linux 7.3”のインスタンスの[選択]をクリックします。

    2RedHatインスタンス選択.png

  3. ステップ6[セキュリティグループの設定]で、Elixir Reportのレポートサーバーが使用するポート”7001”、サンプルで使用するTomcatのポート”9090”を追加します。それ以外のステップはデフォルト設定を使用しました。

    3セキュリティグループ.png

  4. インスタンス作成の確認のステップで、キーペアをダウンロードしておきます。

    4キーペアダウンロード.png
     

  5. 作成が完了したら、Tera Termを使って作成したインスタンスにログインできるか試してみます。ホストのアドレスは、EC2ダッシュボードでインスタンスの”パブリックIP”に表示されているアドレスを指定します。

    5TeraTerm_IP.png
     

  6. 初めて接続するホストの場合は、セキュリティ警告が表示されます。[続行]をクリックして進みます。

    6TeraTerm_初回接続.png
     

  7. ログインユーザーに”ec2-user”、”RSA/DSA/ECDSA/ED25519鍵を使う”にチェックし、[秘密鍵]をクリックして、インスタンス生成時にダウンロードしたキーを選択します。

    7TeraTerm_秘密鍵.png

    注意:秘密鍵ファイルの選択時は、”すべてのファイル”を選択して.pemファイルを表示します。

    8TeraTerm秘密鍵の選択.png

     

  8. 接続できたら、タイムゾーンをAsia/Tokyoに変更しておきます。

    $ sudo timedatectl set-timezone Asia/Tokyo
    

レポートサーバーのインストーラをRed Hatに転送する

  1. レポートサーバーのLinux OS用インストーラ(elixirreport87_linux64.bin)をRed Hat側に転送します。転送はTera TermからSSH SCPを利用して行います。Tera Termの[メニュー]をクリックして[SSH SCP]を選択します。

    9TeraTerm_SCP.png

    【注意】インストーラのzipファイルを転送してRed Hat上で解凍する場合、筆者の環境ではunzipコマンドが”command not found”となりインストールされていなかったため、インストールの必要がありました。

    $ sudo yum –y install unzip
    
  2. [From:]には、Windows側にあるインストーラを、[To:]にはec2-userのホームを指定して、[Send]をクリックします。

    10TeraTerm SCP.png

  3. 同様に、インストールで必要になるレポートサーバーのライセンスファイル(*.license)も転送しておきます。

レポートサーバーをインストールする

  1. インストールは現在ログインしているec2-userで行います。ec2-userのLANG環境変数が英語になっている場合は、日本語(ja_JP.UTF-8)に変更しておきます。

    $ echo $LANG  
    en_US.UTF-8  
    $ export LANG=ja_JP.UTF-8  
    $ echo $LANG  
    ja_JP.UTF-8
    
  2. 転送したインストーラに実行権限を与えます。

    $ chmod +x ./elixirreport87_linux64.bin
    $ ls -la
    -rwxr-xr-x. 1 ec2-user ec2-user 279506476 Sep 29 00:00     elixirreport87_linux64.bin
    
  3. コンソールインストールを実行してみます。次のコマンドで行います。

    $ ./elixirreport87_linux64.bin -i console
    

    【注意】もし、次のようなlibc.so.6のNo such fileエラーが出力されたときは、コマンドで”quit”と入力し、一旦インストールをキャンセルします。

    $ ./elixirreport87_linux64.bin -i console
    Preparing to install...
    Extracting the JRE from the installer archive...
    Unpacking the JRE...
    Extracting the installation resources from the installer archive...
    Configuring the installer for this system's environment...
    strings: '/lib/libc.so.6': No such file
    

    その後、次のコマンドで必要なライブラリをインストールしてください。

    $ sudo yum -y install libc.so.6
    
  4. [使用許諾契約の同意]に”y”を入力して進みます。

  5. [ライセンスキーファイルの登録]で、転送しておいたライセンスファイルのフルパスを入力します。

  6. ライセンスの登録ができたら、”next”と入力して次のステップに進みます。

  7. [インストールモジュールの選択]はデフォルトのまま、”next”と入力して次に進みます。

  8. [ポート番号]の設定では、Red Hatインスタンスを作成したときに[セキュリティグループの設定]で追加したポート番号”7001”のまま[Enter]キーを押して次に進みます。

  9. レポートサーバーのログレベルは、デフォルトの”2-INFO”のまま[Enter]キーを押して次に進みます。

  10. [インストールフォルダを選択]のステップでは、書き込み権限のあるec2-userのホームディレクトリ以下を指定することにします。

    11インストール先.png

  11. [インストール前の要約]を確認して、[Enter]キーを押します。問題がなければ、”おめでとうございます”という完了メッセージが表示されます。[Enter]で終了します。

インストール後のレポートサーバーを起動する

  1. /home/ec2-user/ElixirReport87J/bin/に移動します。

    $ cd /home/ec2-user/ElixirReport87J/bin
    
  2. レポートサーバーの起動シェルスクリプトを実行します。

    $ ./reportserver-start.sh &
    

    ※&を付加してバックグラウンド実行にしています。

    【注意】起動ユーザーのLANG環境変数が英語の場合、レポートサーバーが英語ロケールで起動され、Webインターフェースのメニュー等が英語表示されます。日本語ロケールへ変更して起動を行います。

  3. 起動に成功すると、コンソール上に次のようにCopyrightが表示されます。

    INFO  [main] com.elixirtech.ers2.Main - Copyright 2016 Elixir Technology Pte Ltd
    INFO  [Thread-19] com.elixirtech.ers2.EnsureServerStarted - Checking server status
    
  4. Windows上のブラウザからレポートサーバーのWebインターフェースにログインしてみます。

    http://<パブリックIP>:7001
    12WebインターフェースURL.png

    【注意】ログイン画面が表示されないときは、以下のような原因が考えられます。
    ・レポートサーバーの起動に失敗している
    ・Red Hatインスタンスの[セキュリティグループの設定]で、ポート”7001”を追加していない

  5. ログイン画面が表示されたら、デフォルトで用意されている次の管理者ユーザーでログインします。

    ユーザー名: admin
    パスワード: sa  
    
  6. [リポジトリ]-[samples]以下のレポートテンプレート(*.rml)で、レポート生成を試してみます。レポートは生成されましたが、チャート内の日本語が文字化け(□)している箇所がありました。Red Hat側に必要な日本語フォントがインストールされていないためです。  
    13フォントインストール前のPDF結果.png※/samples/demo/sales2.rmlをPDF形式で生成した例

日本語フォントをインストールする

  1. ブラウザで、Webインターフェースのメニューから[管理]-[サーバー]と選択し、[シャットダウン]ボタンをクリックして、レポートサーバーを一旦停止します。

  2. Tera Termに戻り、日本語フォントを次のコマンドでインストールします。今回は、IPA明朝、IPAゴシック、VLゴシックファイルをインストールします。

    $ sudo yum -y install ipa-mincho-fonts ipa-gothic-fonts vlgothic-fonts
    
  3. また、システムのフォントを管理するfontconfigをインストールします。

    $ sudo yum –y install fontconfig
    
  4. レポートサーバーの起動シェルスクリプトを再度実行してレポートサーバーを起動し、もう一度レポートを生成してみます。今度は正しく表示されるようになりました。

    14フォントインストール後の結果.png

Tomcatを起動してサンプルWebアプリケーションを試す

  1. Tomcatの起動は、同じく/home/ec2-user/ElixirReport87J/bin以下で次のコマンドを実行します。

    $ ./tomcat-start &
    
  2. ブラウザからアクセスします。サンプルのTomcatで使用するポートは9090です。

    http://<パブリックIP>:9090
    
  3. [レポートサーバーAPI基本Webアプリケーション]から次ページの [BasicReportServlet]を選択して、レポートが問題なく作成されるか確認します。

    15Tomcat01.png

  4. 問題なく表示できることが確認できました。

    16Tomcatサンプル03.png

以上で終了です。

続きを読む

AWS CodeDeploy 導入調査 AWS 設定編

社内に CodeDeploy を導入できないか調査したので簡単にまとめます.

要件

  • デプロイ先: EC2 インスタンス
  • git ホスティングサービス は BitBucket
  • pip でプライベートリポジトリのライブラリをインストールしなければならない

AWS 側作業

ソースコード用 S3 Bucket 作成

現在 CodeDeploy が直デプロイを対応しているホスティングサービスは github だけなので
それ以外はソースコードを zip 圧縮した上で S3 にアップする必要があります.
なのでとりあえず名前はなんでもいいので Bucket を作成します.
当然アクセス権限は非公開です(デフォルト非公開なので大丈夫かもしれませんが)

デプロイ先 EC2 インスタンス作成

テスト用に EC2 インスタンスを t2.micro で作成しました.

EC2 -> S3 アクセス用の IAM ロール作成

デプロイ時に EC2 が S3 からソースを取得するのでアクセスできる IAM ロールを作成しました.

ポリシーはテスト時に限って言えば以下の通りで.
運用で導入する際はちゃんと設定しましょう.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

ポリシーを作成したら,
“新しいロールの作成 “
-> ロールタイプに Amazon EC2
-> ポリシーのアタッチで上で作成したポリシーをアタッチ
-> ロール名を適当につけてロール作成完了です
EC2 インスタンスに作成したロールをアタッチしておきます.

CodeDeploy サービスロールの作成

CodeDeploy 用のロールも必要なので作成しておきます.
先ほどと同様に,
“新しいロールの作成 “
-> ロールタイプに Amazon CodeDeploy
-> ポリシーのアタッチに AWSCodeDeployRole
-> ロール名を適当につけてロール作成完了です

さらに作成したロールを選択して
“信頼関係”タブ
-> 信頼関係の編集
->

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "ec2.amazonaws.com",
          "codedeploy.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

“Service” に “ec2.amazonaws.com” を追加します(必要そうな気がするんですが不要かも)
-> “信頼ポリシーの更新” で完了

CodeDeploy にアプリケーション作成

CodeDeploy でデプロイ対象のアプリケーション設定を作成します.

  • “デプロイタイプ”はインプレースと Blue/Green デプロイが選択できますがお試しなので今回はインプレースを選択しました.
  • “インスタンスの追加” に作成しておいた EC2 インスタンスを登録
  • “詳細設定” は今回そのままで
  • “サービスロール” に “CodeDeploy サービスロールの作成” で作成したロール ARN を設定
  • “アプリケーションの作成” で完了

AWS 側の設定は以上になります.
アプリ側設定は次回

続きを読む