はじめに
自動で構成を良しなにしてくれるAWSのElastic Beanstalk。ウェブサーバー環境とワーカー環境の2種類があるのですが、最初触ったときはアプリケーション作成と同時にウェブサーバー環境も作成されてしまい、ワーカー環境だけ作りたいのに…と思っていました。
今回(ウェブサーバー環境を作らずに)アプリケーションだけ作成し、そのあとにワーカー環境を作る方法がわかったので記事にしました。
かんたんにElastic Beanstalkの構成
”アプリケーション”と”環境”の区別が最初わからなかったので、以下に図示しました。
最初に”アプリーケーション”を作って、その中でウェブサーバーやワーカーの”環境”を作っていく、という構成です。
またワーカー環境の構成は以下の公式にあります。
- SQSでタスクを管理
- 作成時、DeadLetter用のキューも含めた、2つのキューが作成
- EC2内部に、SQSとやり取りするデーモンプロセスが起動
- デーモンプロセスから、デプロイしたアプリに対して、POSTでメッセージが送られる模様
アプリケーションだけ作る
コンソール画面から作る方法
以下の記事にありましたので、それを行いました。
注)AWS Elastic Beanstalk は、初回のアプリ作成時だけ、アプリの実行環境も同時に作成されるため、ここで「アプリケーションの作成」をクリックすると、「Myapp-env」という名称の環境が自動で作成されます。これを避けるために、いったん「より多くのオプションの設定」をクリックします。そうすると、環境が作成されず、アプリのみが作成されます。
必須事項を入れて、「より多くのオプションの設定」をクリックすると、アプリケーションだけ作られます。
ここで「アプリケーションの作成」を押すと、アプリケーションと同時にウェブサーバー環境も作成されますので、ご注意ください。
コマンド(ebcli)で作る方法
以下の記事を参考にしました。
CloudShellではデフォルトで入っているので、そちらから行います。
コンソールから行う方法とは異なり、途中でキーペアの作成も促されます。
$ 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)
19) eu-south-1 : EU (Milano)
20) ap-east-1 : Asia Pacific (Hong Kong)
21) me-south-1 : Middle East (Bahrain)
22) af-south-1 : Africa (Cape Town)
(default is 3): 9
Select an application to use
1) testapp-20230126
2) [ Create new Application ]
(default is 2): 2
Enter Application Name
(default is "cloudshell-user"): testcliapp-20230126
Application testcliapp-20230126 has been created.
Select a platform.
1) .NET Core on Linux
2) .NET on Windows Server
3) Docker
4) Go
5) Java
6) Node.js
7) PHP
8) Packer
9) Python
10) Ruby
11) Tomcat
(make a selection): 9
Select a platform branch.
1) Python 3.8 running on 64bit Amazon Linux 2
2) Python 3.7 running on 64bit Amazon Linux 2
(default is 1): 1
Cannot setup CodeCommit because there is no Source Control setup, continuing with initialization
Do you want to set up SSH for your instances?
(Y/n): y
Select a keypair.
1) 20210818_key
2) 20210917_key
3) [ Create new KeyPair ]
(default is 2): 3
Type a keypair name.
(Default is aws-eb): 20230126_eb
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
WARNING: Uploaded SSH public key for "20230126_eb" into EC2 for region ap-northeast-1.
こちらでも空のアプリケーションが作られました。
キーペアも作られてました
ワーカー環境作ってみる
今回はコンソール画面からのみ作ります。
「より多くのオプションの設定」をクリック(設定変更しないのであれば、「環境の作成」をそのままクリックしてもよいかと思います)。
必要な設定を変更して作成します。今回は何も変えていないです。
作成中は以下のようになります。
EC2インスタンスが作成されました。デフォルトVPC上に展開され、セキュリティグループのインバウンドはありませんでした。
アタッチされているIAMロールのポリシーは以下でした。タスクで操作が必要なリソースへのアクセス権限は別途付与が必要そうです。
キューも2つ作成されています。
環境作成にはCloudFormationを使っているので、スタックから環境を図示してもらいました。
触ったばかりなので、何がどう使われているか、要勉強です…
EC2インスタンスに入る
作成されたEC2インスタンスにEC2 Instance Connectで接続したいので、セキュリティグループのインバウンドにルールを追加します。
以下の記事を参考にしました。
インスタンスの アクション > 接続 から、内部に入ることができました。
おわりに
ワーカー環境だけ利用、というニーズもそこそこあるかと思いますので、そういう方の参考になれたら幸いです。
この先のデプロイですが、ソースの書き方がわかなくて困っています。Pythonのワーカー環境のソースの書き方がわかる方がいらっしゃったら、ご教示ください。
(2023.2.12追記)Pythonでのサンプルについて記事にしました。