手順に従ってアプリをAmazon Elastic Container Service(ECS)にデプロイする
このドキュメントでは、Amazon AWSでのOutSystemsプラットフォームのホスティングから、インフラの準備およびAmazon Elastic Container Service(ECS)で実行されるコンテナでのOutSystemsアプリケーションのデプロイまでの手順について説明します。
前提条件
開始前に以下が準備されている必要があります。
-
AWSアカウント。
-
以下のサービスの管理権限を持つIAM ID(ユーザーなど)。
- AutoScaling
- EC2
- RDS
- ECS
- ECR
- ElasticLoadBalancing(v2)
- IAM
- S3
-
OutSystems 11がEC2インスタンス上にインストールされ、プラットフォームデータベースとして使用されるRDSインスタンスに接続されていること。
-
Docker Enterprise Edition(EE)がOutSystemsプラットフォームPCにインストールされていること。
-
PowerShellの実行ポリシーが
Unrestricted
に設定されていること。詳細については、Microsoft PowerShellの公式ドキュメントの「About Execution Policies」をご覧ください。
Amazon ECSにデプロイする
下記のセクションでは、以下のタスクを実行してアプリケーションをAmazon ECSにデプロイします。
- AmazonでECSインフラを設定します。
- OutSystemsインストールの秘密鍵をプロビジョニングされたS3バケットにコピーします。
- サンプルのコンテナ自動化スクリプトをインストールします。
- サンプルのコンテナ自動化リスナーを起動します。
- ECSへのデプロイ用の新しいデプロイメントゾーンを構成します。
- OutSystemsアプリケーションをECSにパブリッシュします。
1. #インフラを設定する
コンテナインフラの設定プロセスを簡素化するため、OutSystemsはCloudFormationテンプレートファイルを提供しています。このテンプレートファイルは以下のアドレスからダウンロードできます。
https://github.com/OutSystems/Contai...formation.yaml
このテンプレートでは以下のリソースを含むインフラが作成されます。
- ECSクラスタ。OutSystemsアプリケーションのコンテナが起動される場所です。
- アプリケーションロードバランサ。適切なアプリケーションコンテナのレプリカにリクエストをルーティングします。
- S3バケット。アプリケーション構成がこの場所に保存され、デプロイプロセス中に読み取られます。
- セキュリティグループ、ロール、およびプロファイル。上記のリソースを保護します。
インフラを設定するには、以下の手順を実行します。
-
AWSコンソールにログインし、[CloudFormation]サービスページを開いて[Create Stack]をクリックします。
-
Select Templateステップで、以下の手順を実行します。
- [Upload a template to Amazon S3]を選択します。
- 上記の
cloudformation.yaml
テンプレートファイルをアップロードします。 - [Next]をクリックします。
-
Specify Detailsステップで、以下の手順を実行します。
-
[Stack name]フィールドに、インフラの名前を入力します。
-
[ClusterName]フィールドに、コンテナクラスタの名前を入力します。
-
[InstanceType]フィールドに、コンテナクラスタ内で作成されるPCのインスタンスのタイプを入力します。
-
[KeyPair]フィールドで、コンテナクラスタPCを起動するとき使用されるキーペアを選択します。
-
[ManagementIPAddress]フィールドに、コンテナクラスタへのRDP接続を確立する権限を持つサブネットをCIDR表記で入力します。通常、これはオペレータのPCがあるサブネットです。
-
[OutSystemsPlatformFrontEndServers]フィールドに、OutSystemsフロントエンドサーバーPCのEC2インスタンスIDを入力します。
-
[Subnets]フィールドに、クラスタPCが作成されるサブネットを入力します。
-
[VpcId]フィールドに、OutSystemsプラットフォームがインストールされたVPC IDを入力します。
-
[Next]をクリックします。
-
-
Optionsステップで、[Next]をクリックします。
-
Reviewステップで、[I acknowledge that AWS CloudFormation might create IAM resources.]にチェックを付けて[Next]をクリックします。
インフラが作成されます。[CloudFormation]サービスページで、正常にプロビジョニングされたことを確認します。
2. OutSystemsインストールの秘密鍵をS3バケットにコピーする
private.key
キーファイルを、プラットフォームのインストールフォルダからプロビジョニングされたS3バケットにコピーする必要があります。これにより、コンテナクラスタPC上で実行されるアプリケーションがこのファイルにアクセスできるようになります。
-
インストールの
private.key
ファイルを探します(デフォルトでは、C:\Program Files\OutSystems\Platform Server
にあります)。 -
S3の管理コンソールを開き、クラスタのS3バケット名をクリックします。
-
管理コンソールで、「secrets」という名前のフォルダを作成します。
-
secretsフォルダに
private.key
をアップロードします。
注記: S3のprivate.key
オブジェクトを絶対に公開しないでください。秘密鍵が漏洩します。
代替シナリオ: AWS Systems Managerパラメータストアを使用する
S3バケットを使用してprivate.key
ファイルを保存する代わりに、AWS Systems Managerパラメータストアを使用して秘密鍵の内容を保存することができます。
この場合、提供されるcloudformation.yaml
テンプレートファイルを調整し、「ClusterInstancesLaunchConfiguration」という名前の起動構成セクションで追加ロジックを定義し、クラスタPC内のパスc:\docker\secrets
にprivate.key
ファイルを配置する必要があります。
3. サンプルのコンテナ自動化スクリプトをインストールする
サンプルのコンテナ自動化スクリプトは、OutSystemsプラットフォームとAmazon ECSの間でアプリケーションのデプロイのオーケストレーションを行います。あらかじめOutSystems Platform ServerをインストールしたEC2インスタンスに、これらのスクリプトがインストールされている必要があります。
注記: 提供されるサンプルコンテナ自動化スクリプトを本番環境で_使用しないでください_。
このスクリプトは自動コンテナデプロイ用のAPIを実装し、以下のデプロイ操作を処理するHTTPエンドポイントを公開します。
- デプロイの準備手順
- アプリケーションのコンテナイメージを作成し、アプリケーションのECR(Elastic Container Registry)にリポジトリがない場合は作成し、イメージをそのレジストリにプッシュします。
- デプロイ手順
- アプリケーション構成をS3バケットにプッシュし、Elastic Load Balancerの各アプリケーションモジュールの転送ルールを作成し、アプリケーションコンテナのECRタスクを作成し、作成されたECRタスクを使用してサービスを起動します。
- 「構成の更新」操作
- 新しいアプリケーション構成をS3バケットにプッシュします。この構成は実行中のアプリケーションコンテナに非同期的に反映されます。
- 「アンデプロイ」操作
- アプリケーションのデプロイに関連するバンドルおよび結果(またはマーカー)ファイルを削除します。
注記: アンデプロイされたアプリケーションに関連する実行中のコンテナは、サンプルの実装によって停止または削除されません。
以下の手順を実行して、OutSystemsプラットフォームがインストールされているEC2インスタンスにサンプルのコンテナ自動化スクリプトをインストールします。
-
AWS Tools for PowerShellをダウンロードしてインストールします。
インストーラは、https://aws.amazon.com/powershell/から入手できます。 -
Amazonの[EC2 Dashboard]を開き、[Instances]画面に移動します。
注記: これらの手順は、デプロイメントコントローラをEC2インスタンス上で実行していることを前提にしています。
-
提供されているCloudFormationテンプレートによって作成されたインスタンスプロファイルをデプロイメントコントローラEC2インスタンスにアタッチします。これには、デプロイメントコントローラインスタンスを右クリックし、[Instance Settings]>[Attach/Replace IAM Role]の順に選択します。
-
[Attach/Replace IAM Role]画面の[IAM role]ドロップダウンフィールドで、CloudFormationテンプレートによって提供されたロールを選択します。
ヒント: 正しいロール名には
DeploymentControllerRole
という文字列が含まれています。 -
PowerShellコンソールで以下のコマンドを実行して、動作がすべて正常であることを確認します。
Get-STSCallerIdentity
出力は以下のようになります。
-
サンプルのコンテナ自動化スクリプトを、以下のアドレスからOutSystemsプラットフォームのデプロイメントコントローラPCにダウンロードします。
https://github.com/OutSystems/ContainerAutomation -
ファイル
modules\AWS\Settings.psm1
を開き、以下の変数の値を入力します。$global:AWSBucketName
- CloudFormationテンプレートによってプロビジョニングされたS3バケットの名前。$global:AWSLoadBalancerArn
- プロビジョニングされたロードバランサARN。$global:AWSClusterName
- プロビジョニングされたクラスタ名。
4. サンプルのコンテナ自動化リスナーを起動する
サンプルのコンテナ自動化リスナーを起動するには、デプロイメントコントローラPCのPowerShellコンソールで以下のコマンドを実行します。
tools\listener\RunListener.ps1 -Port 8000
リスナーポートは任意の利用可能なポートにカスタマイズすることができます。その場合は、下記の構成を新しいポートに適用してください。
5. ECSへのデプロイ用の新しいデプロイメントゾーンを構成する
自動化インフラができたため、これを利用したデプロイメントゾーンを作成できます。
Service Centerで新しいデプロイメントゾーンを作成し、以下のガイドラインに従って構成パラメータを入力します。
- Name
- デプロイメントゾーンに付ける名前(例:
OutSystems ECS Cluster
) - デプロイメントゾーンアドレス
- デプロイメントゾーンで動作するすべてのアプリケーションのアドレス。他のデプロイメントゾーンのアプリケーションがある特定のデプロイメントゾーンで動作するアプリケーションを参照する必要があり、環境URLを使用したくない場合、このアドレスを使用します(例:
myaddress.elb.amazonaws.com
)。 - Output Files To
- コンテナ自動化スクリプトがアプリケーションバンドルを要求するフォルダ(例:
C:\opt\ContainerAutomation\bundles
) - Result
- コンテナ自動化スクリプトがデプロイ結果ファイルを書き込むフォルダ(例:
C:\opt\ContainerAutomation\results
) - Output Config Files to
- コンテナ自動化スクリプトがアプリケーション構成ファイルを要求するフォルダ(例:
C:\opt\ContainerAutomation\configs
) - コンテナ作成用URLトリガー
- デプロイの準備手順を実行するコンテナ自動化スクリプトのエンドポイント(例:
http://localhost:8000/AWS/ContainerBuild
) - コンテナ実行用URLトリガー
- デプロイ手順を実行するコンテナ自動化スクリプトのエンドポイント(例:
http://localhost:8000/AWS/ContainerRun
) - 構成更新用URLトリガー
- 「構成の更新」操作を実行するコンテナ自動化スクリプトのエンドポイント(例:
http://localhost:8000/AWS/UpdateConfigurations
) - コンテナ削除用URLトリガー
- 「アンデプロイ」操作を実行するコンテナ自動化スクリプトのエンドポイント(例:
http://localhost:8000/AWS/ContainerRemove
)
以下は、コンテナデプロイメントゾーンの構成を表示しているService Centerのスクリーンショットです。
6. OutSystemsアプリケーションをECSにパブリッシュする
これでデプロイメントゾーンの構成が完了したため、このデプロイメントゾーンでOutSystemsアプリケーションを構成し、ECSにデプロイすることができます。
新しいデプロイメントゾーンを使用するようにアプリケーションを構成するには、以下の手順を実行します。
- Service Centerで[Factory] > [Applications] に進み、アプリケーション名をクリックします。
- [Operations]タブで、Deployment Zoneパラメータを前の手順で構成したデプロイメントゾーンに設定します。
- [Apply]ボタンをクリックします。
アプリケーション をECSにパブリッシュするには、以下の手順を実行します。
- Service Centerで[Factory] > [Applications] に進み、アプリケーション名をクリックします。
- [Publish]ボタンをクリックします。
Service Centerにデプロイの進捗状況が表示されます。
本番の考慮事項
サンプルのコンテナ自動化スクリプト
提供されるサンプルスクリプトは以下のフォルダ構造になっています。
├─ misc
│ └─ prerequisites
│ └─ aws
│ cloudformation.yaml
├─ modules
│ ├─ AWS
│ │ Settings.psm1
│ │ Wrapper.psm1
│ ├─ DockerEE
│ └─ Dummy
├─ tests
├─ tools
│ ├─ debug
│ ├─ jenkins
│ └─ listener
│ AutomationHookListener.psm1
│ RunListener.bat
│ RunListener.ps1
└─ utils
以下に示す2つの主要な自動化モジュールがあります。
AutomationHookListener.psm1
-
プラットフォームトリガー操作に応答する小型のHTTPサーバーを実装します。
重要な注意事項:
- このモジュールはテスト用の簡易サンプルとなることを目的としています。本番では、Jenkins、Azure DevOps Server、その他のCI/CDサーバーなどの適切なツールに置き換える必要があります。
- 同時実行時の動作は十分ではありません。
AWS\Wrapper.psm1
-
トリガー操作を実装するすべてのロジックと、Amazonサービスに接続するすべてのAPIが含まれます。
重要な注意事項:
- このモジュールは必要に応じてカスタマイズする必要があります。
Dockerエンジン
このドキュメントで示す設定では、DockerエンジンとOutSystemsプラットフォームが同じPCで設定されていることを前提にしています。この場合、PCのディスク領域の要件が増加します。
デプロイメントゾーンの構成の「Output Files To」、「Result」、「Output Config Files To」の各パラメータで構成されているパスの同じファイルシステムでの読み取り/書き込みが可能であれば、別の仮想マシンを使用してDockerエンジンのロールを実現することができます。このシナリオでは、共有フォルダを使用することを推奨します。
利用可能なすべてのデプロイメントゾーンの構成パラメータの詳細については、「デプロイメントゾーンのリファレンス」をご覧ください。