CloudFormationスタック

最終更新日: 2025年1月29日
R8 | R9

テンプレートの取得とS3への格納

はじめに、ジャスミンソフトが提供するCloudFormationのテンプレートをダウンロードしてください。

旧バージョンをご利用の方へ

AWSポリシーの変更によりコードパイプラインの起点に Git Repository を使うサービスが終了しました。R9.2.7より前のバージョンで Git Repository を使っていた場合は、R9.2.7以上へバージョンアップし、本ガイドにあわせて S3 を使うようにしてください。[移行手順について...]

ダウンロードファイルを展開します。ここからの作業はs3uploadfiles.zipを展開した、s3uploadfilesフォルダで実行するとします。

このフォルダに含まれる CloudFormation テンプレート一式を AWS の S3バケットに格納します。

本ガイドでは、S3バケット名を "wagby-cf-pipeline-wmsa" としています。次のコマンドでバケットを作成します。後ほどCodePipelineで処理するため、バージョニングとイベント通知を有効にします。 また、バージョニングを有効にしたため、過去バージョンが保持されるので、一定期間経過した過去バージョンは削除するようライフサイクル設定を追加しております。 添付のファイル s3lifecyclerule.json では過去バージョンは 3 日経過すると削除されるようにしている。

set AWS_PROFILE=admin
set S3BucketName=wagby-cf-pipeline-wmsa
cd s3uploadfiles
aws s3 mb s3://%S3BucketName%
aws s3api put-bucket-versioning --bucket %S3BucketName% --versioning-configuration Status=Enabled
aws s3api put-bucket-notification-configuration --bucket %S3BucketName% --notification-configuration="{ \"EventBridgeConfiguration\": {} }"
aws s3api put-bucket-lifecycle-configuration --bucket %S3BucketName% --lifecycle-configuration file://s3lifecyclerule.json

※ Windows OSの場合。Linuxの場合は環境変数の指定方法が異なるので、%S3BucketName% を $S3BucketName に変更してください。

作成したバケットに、s3uploadfilesフォルダ内のファイルをアップロードします。

aws s3 sync . s3://%S3BucketName%
下記コマンドを実行し、正しく転送されたことを確認します。
aws s3 ls s3://%S3BucketName%

設定できるパラメータ

ダウンロードしたファイルにいくつかのパラメータを自社用に書き換えることで AWS 環境を構築することができます。 ここでは設定可能なパラメータを説明します。

アプリケーションに関するパラメータ

名前説明
環境名
(EnvironmentName)
環境区分 + "env" の形式で指定します。環境区分とは、テストか本番運用かを示す接頭語です。本ガイドではテスト環境を "test" とし、本番環境を "prod" と表現します。testenv
prodenv
アプリケーション名
(ApplicationName)
本ガイドでは WMSA名 + WagbyドメインID + 環境区分 の形式を用いています。アプリケーション名はアルファベット小文字と数字のみ使用できます。wmsaapp1test
ホスト名
(HostName)
公開するサーバのホスト名です。本ガイドでは WagbyドメインID + 環境区分 とします。app1test

ネットワークに関するパラメータ

名前説明
S3BucketNameCloudFormationテンプレートを格納したS3バケット名。wagby-cf-pipeline
HostedZone本ガイドではサブドメイン名と同じとします。wmsa.wagby.com
WMSAName複数の環境を含む、ひとまとまりの名前として扱います。本ガイドではサブドメイン名から決定されるものとします。(*1)(サブドメインがwmsa.wagby.comの場合) wmsa
CertificateArnサーバ証明書のURIです。
(*1) AWS System ManagerのParameter Storeに格納されるパラメータの先頭部分(例:/wmsa/wmsaapp1test/RepoApplicationUrl)にも用いられます。

各サービスに関するパラメータ

名前説明
EnvironmentType環境ごとに作成されるデータベース,Redis,MQを使うかどうかを決定します。
simple
データベース,Redis,MQのいずれも利用しません。テスト用です。
rdb
データベースを利用します。Redis,MQはいずれも利用しません。オートスケールやWagbyマイクロサービスに未対応です。
cluster
データベース,Redis,MQをすべて利用します。オートスケールやWagbyマイクロサービスに対応します。
今回は一つのアプリケーションとなるため "rdb" とします。
rdb
NotifyEmailAddressCodePipeline処理の進捗状況を送信する先のメールアドレス。1アドレスのみ。指定しない場合は進捗状況メールは送信されない。scott@exmaple.com

その他のパラメータ

create-wmsa.cf.json に指定できる、その他のパラメータの詳細をこちらに説明しています。

パスワードの登録

データベース (DBPassword)

EnvironmentType を "rdb" または "cluster" としたとき、データベースのパスワードを設定します。

以下の例ではパスワード部分を "randomPassword" と表記しています。この部分に適切なパスワードを設定してください。(パスワードは12文字以上が必要です。)

name 指定は次の書式となります。"/" + WMSAName + "/" + EnvironmentName + "/DBPassword"

set WMSAName=wmsa
set EnvironmentName=testenv
aws ssm put-parameter --name "/%WMSAName%/%EnvironmentName%/DBPassword" --type SecureString --value randomPassword

コマンドの出力例を示します。

{
    "Version": 1,
    "Tier": "Standard"
}

データベース (MQPassword)

EnvironmentType を "cluster" としたとき、AmazonMQのパスワードを設定します。

name 指定は次の書式となります。"/" + WMSAName + "/" + EnvironmentName + "/MQPassword"

aws ssm put-parameter --name "/%WMSAName%/%EnvironmentName%/MQPassword" --type String --value randomPassword

データベース (RedisPassword)

EnvironmentType を "cluster" としたとき、ElastiCache Redisのパスワードを設定します。

name 指定は次の書式となります。"/" + WMSAName + "/" + EnvironmentName + "/RedisPassword"

aws ssm put-parameter --name "/%WMSAName%/%EnvironmentName%/RedisPassword" --type SecureString --value randomPassword

アプリケーション用リソースの作成

上記パラメータの値を使って、本番運用するアプリケーションに対応した AWS 上のリソースを作成します。ここでは、ジャスミンソフトが提供する CloudFormation スタックに適切なパラメータを設定する方法を説明します。

今回の例

ここで紹介するのは、アプリケーションをテストするためのテスト環境を構築する例です。(CloudFormation スタックのテンプレートは create-wmsa.json を利用します。)

このコマンド実行により https://app1test.wmsa.wagby.com/ が作成されます。

パラメータ備考
--stack-nameWmsaApp1TestApplicationNameのキャメルケース記法
--template-urlhttps://%S3BucketName%.s3-ap-northeast-1.amazonaws.com/create-wmsa.jsonCloudFormation スタックのテンプレート。前項の手順により、s3バケットに転送したので、その位置を指定する。 https://[S3バケット名].s3-[AWSリージョン].amazonaws.com/create-wmsa.json となっている。
EnvironmentNametestenv
ApplicationNamewmsaapp1test
Hostnameapp1test
S3BucketNamewagby-cf-pipeline-wmsa
WMSANamewmsa
CertificateArnarn:aws:acm:...(省略)
HostedZonewmsa.wagby.com
EnvironmentTyperdbRDBを利用する
NotifyEmailAddress(管理者メールアドレス)省略可

s3uploadfiles 内の stackparam_create.json を上記設定に合わせて、修正してください。 ParameterKeyに対応するParameterValueの部分を自社用に修正してご利用ください。

[
  {
    "ParameterKey": "EnvironmentName",
    "ParameterValue": "testenv"
  },
  {
    "ParameterKey": "ApplicationName",
    "ParameterValue": "wmsaapp1test"
  },
  {
    "ParameterKey": "Hostname",
    "ParameterValue": "app1test"
  },
  {
    "ParameterKey": "S3BucketName",
    "ParameterValue": "wagby-cf-pipeline-wmsa"
  },
  {
    "ParameterKey": "WMSAName",
    "ParameterValue": "wmsa"
  },
  {
    "ParameterKey": "CertificateArn",
    "ParameterValue": "arn:aws:acm:ap-northeast-1:000000000000:certificate/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
  },
  {
    "ParameterKey": "HostedZone",
    "ParameterValue": "wmsa.wagby.com"
  },
  {
    "ParameterKey": "EnvironmentType",
    "ParameterValue": "rdb"
  },
  {
    "ParameterKey": "NotifyEmailAddress",
    "ParameterValue": "foo@example.com"
  }
]

次の AWS CLI 命令は 1 行になります。

Linuxの場合

複数行にて1コマンドを指定するために、Linuxのbash流に行末に \ を指定しています。

S3BucketName=wagby-cf-pipeline-wmsa
AppStackName=WmsaApp1Test
aws cloudformation create-stack --stack-name $AppStackName --capabilities CAPABILITY_IAM --capabilities CAPABILITY_NAMED_IAM \
--template-url https://${S3BucketName}.s3-ap-northeast-1.amazonaws.com/create-wmsa.json \
--parameters file://stackparam_create.json

Windows OSの場合

複数行にて1コマンドを指定するために、コマンドプロンプトの行末に ^ を指定します。

set S3BucketName=wagby-cf-pipeline-wmsa
set AppStackName=WmsaApp1Test
aws cloudformation create-stack --stack-name %AppStackName% --capabilities CAPABILITY_IAM --capabilities CAPABILITY_NAMED_IAM ^
--template-url https://%S3BucketName%.s3-ap-northeast-1.amazonaws.com/create-wmsa.json ^
--parameters file://stackparam_create.json

ワンポイント

コマンドの実行は少し時間がかかります。AWSマネージメントコンソール (https://console.aws.amazon.com) の "CloudFormation" で状況を確認することができます。ステータスが "CREATE_COMPLETE" となっていれば実行完了です。(*4)

(*4) AWS CLI でも状況を確認することができます。
aws cloudformation describe-stacks --stack-name %AppStackName% --query Stacks[0].StackStatus
この結果が "CREATE_IN_PROGRESS" のときは作成中です。"CREATE_COMPLETE" となれば実行完了です。

注意

このタイミングでデータベース (Aurora) サービスが起動します。待機状態となるため、これらのサービスの課金が開始されます。(*5)

(*5) 契約者は別途、Aurora の契約手続きを行う必要はありません。ジャスミンソフトが提供する CloudFormation テンプレートを使ってスタックを作成することで自動的に Aurora が利用できるようになり、課金が開始されます。

メール通知の確認

ParameterKeyに NotifyEmailAddress を指定したとき、最初に AWS から購読の確認メールが送信されます。

図1 購読の確認

メール文中にある "Confirm subscription" をクリックし、購読を開始してください。次ページで説明する転送処理で、進捗がメールで送信されるようになります。

CodePipelineの実行の確認

CloudFormationスタックが作成されると、CodePipelineが実行され、からのウェブアプリケーションのDockerイメージが作成されます。下記コマンドを実行して、CodePipelineの実行が成功していることを確認してください。下記コマンドの実行結果が "InProgress" の場合は実行中です。"Succeeded" の場合は成功しております。

C:\Wagby\Wagby-9.2.7\s3uploadfiles>aws codepipeline list-pipelines
  {
      "pipelines": [
          {
              "name": "WmsaApp1Test-Cluster1-7JSIVNIP2I13-Codepipeline-1EXMFKFDVOJ0Z-AppPipeline-VKmCgfddEhXR",
              "version": 1,
              "created": "2025-01-05T23:37:44.196000+09:00",
              "updated": "2025-01-05T23:37:44.196000+09:00"
          }
      ]
  }
C:\Wagby\Wagby-9.2.7\s3uploadfiles>set PIPELINENAME=WmsaApp1Test-Cluster1-7JSIVNIP2I13-Codepipeline-1EXMFKFDVOJ0Z-AppPipeline-VKmCgfddEhXR
C:\Wagby\Wagby-9.2.7\s3uploadfiles>aws codepipeline list-pipeline-executions --pipeline-name %PIPELINENAME% --query pipelineExecutionSummaries[0].status
"Succeeded"

Dockerコンテナの起動

ここまでの手順で Docker コンテナを起動する環境が構築されました。しかしこの状態ではまだ、起動するDockerコンテナの数は 0 となっています。この値を 1 に変更し、1つのDocker コンテナを起動します。

先ほど作成したCloudFormationスタックを更新し、ECSServiceDesireCountパラメータに 1 を指定します。 次の AWS CLI 命令は 1 行になります。

Linuxの場合

複数行にて1コマンドを指定するために、Linuxのbash流に行末に \ を指定しています。

S3BucketName=wagby-cf-pipeline-wmsa
AppStackName=WmsaApp1Test
aws cloudformation update-stack --stack-name $AppStackName --capabilities CAPABILITY_IAM --capabilities CAPABILITY_NAMED_IAM \
--template-url https://${S3BucketName}.s3-ap-northeast-1.amazonaws.com/create-wmsa.json \
--parameters file://stackparam_update.json

Windows OSの場合

複数行にて1コマンドを指定するために、コマンドプロンプトの行末に ^ を指定します。

set S3BucketName=wagby-cf-pipeline-wmsa
set AppStackName=WmsaApp1Test
aws cloudformation update-stack --stack-name %AppStackName% --capabilities CAPABILITY_IAM --capabilities CAPABILITY_NAMED_IAM ^
--template-url https://%S3BucketName%.s3-ap-northeast-1.amazonaws.com/create-wmsa.json ^
--parameters file://stackparam_update.json

ワンポイント

コマンドの実行は少し時間がかかります。AWSマネージメントコンソール (https://console.aws.amazon.com) の "CloudFormation" で状況を確認することができます。ステータスが "UPDATE_COMPLETE" となっていれば実行完了です。(*5)

(*5) AWS CLI でも状況を確認することができます。
aws cloudformation describe-stacks --stack-name %AppStackName% --query Stacks[0].StackStatus
この結果が "UPDATE_IN_PROGRESS" のときは更新中です。"UPDATE_COMPLETE" となれば実行完了です。

動作の確認

Web ブラウザから https://app1test.wmsa.wagby.com/ にアクセスします。"Success" と表示されることを確認します。

構築されるフルマネージドサービスの詳細

ジャスミンソフトが提供する CloudFormation テンプレートでは、関連する AWS のフルマネージドサービスの初期仕様を次のように定めています。

パラメータ説明
DBInstanceTypedb.t4g.mediumAuroraのタイプ
MQInstanceTypemq.t3.microMQのタイプ
RedisInstanceTypecache.t3.microRedisのタイプ

上述した「AWSマネージメントコンソールで編集する」を使い、初期パラメータを変更することもできますが、この場合は一度作成したフルマネージドサービス環境を削除して再作成する必要があります。

そこで実際の運用は CloudFormation テンプレートはそのままとし、AWSマネージメントコンソールを使って各サービスのページをアクセスし、そこでスペックを変更するとよいでしょう。(各サービスのスペックの変更方法についての説明は割愛します。AWS が提供するマニュアルをお読みください。)

次のステップ

ここまでで AWS 上に Tomcat を用意することができました。また RDB の接続準備まで完了しました。次ページで Designer でフルビルドしたアプリケーションをこの環境に転送する方法を説明します。

旧バージョンからの移行

R9.2.6までのWagbyで Git Repository をコードパイプラインの起点に使っていた場合、R9.2.7 からは S3 に変わっています。次の手順で環境を移行してください。

  1. 旧システムは実行したまま、新システムを新しいs3upoadfiles.zipにて作成する。
  2. 旧システムでデータをエクスポートする。(MySQL 5.7を利用)
  3. エクスポートデータとupload_dirフォルダを新システムにコピーする。これらはEFSに保存されている。[コピー方法...]
  4. 新システムでインポートする。(新しいMySQLに変わる)
  5. 新システムの運用を開始する。
  6. 移行の問題がなければ旧システムを削除する。[削除方法...]

なお新システムを作成する際、以下のパラメータは旧システムとは別の値を指定するようにしてください。

  • S3BucketName
  • CloudFormationのスタック名(上記説明ではWmsaApp1Test)
  • 環境名(EnvironmentName)
  • アプリケーション名(ApplicationName)
  • ホスト名(HostName)(新システムは旧システムとは別のドメイン名でアクセスします。)

旧システムから新システムへのデータ移行

旧システムから新システムへの移行を行う際に、これまで作成したデータを引き続き利用したい場合、データの移行を行う必要があります。 Wagbyのexport(エクスポートデータ)、upload_dir(ファイル項目に指定したファイル)、migratedb(入れ替え時に利用するデータベース定義の履歴)はAWS EFSにて保存されております。AWS DataSyncを用いて、EFSのデータを旧システムから新システムにコピーする手順を説明します。

s3uploadfiles.zipを展開したフォルダで以下の手順で作業します。

stackparam_parts-datasync-efs.jsonの修正

stackparam_parts-datasync-efs.json内の以下の文字を修正してください。

置換元文字
$SrcWMSAName旧システムを構築する際に指定したWMSAName(wmsa)
$SrcEnvironmentName旧システムを構築する際に指定したEnvironmentName
$DstWMSAName新システムを構築する際に指定したWMSAName(wmsa)
$DstEnvironmentName新システムを構築する際に指定したEnvironmentName

CloudFormationスタックの作成

aws cli コマンドを用いて、CloudFormationスタックを作成します。AWS DataSyncのlocation, taskが作成されます。

set DataSyncStackName=WmsaApp1TestDataSyncEFS
set S3BucketName=wagby-cf-pipeline-wmsa
aws cloudformation deploy --stack-name %DataSyncStackName% --capabilities CAPABILITY_IAM --capabilities CAPABILITY_NAMED_IAM ^
  --s3-bucket %S3BucketName% ^
  --s3-prefix work/ ^
  --template-file parts-datasync-efs.json ^
  --parameter-overrides file://stackparam_parts-datasync-efs.json

※ Windows OSの場合。Linuxの場合は行末の ^ を \ を指定してください。また、環境変数の指定について %S3BucketName% を $S3BucketName に変更してください。

AWS DataSync taskの実行

aws cli コマンドを用いて、作成したAWS DataSync taskの識別子 TasnArn を取得します。

aws cloudformation describe-stack-resources --stack-name %DataSyncStackName% --logical-resource-id datasynctask --query StackResources[0].PhysicalResourceId --output text

出力された値をTaskArn環境変数にセットします。

aws cli コマンドを用いて、AWS DataSyncのtaskを実行します。旧システムのEFS内のデータが新システムにコピーされます。

set TaskArn=arn:aws:datasync:[region]:[account-id]:task/[task-id]
aws datasync start-task-execution --task-arn %TaskArn% > log-datasync-task-execution.json

log-datasync-task-execution.json に TaskExecutionArn が出力されております。これを用いて、タスクの実行状況を取得できます。

set TaskExecuteArn=arn:aws:datasync:[region]:[account-id]:task/[task-id]/execution/[task-exec-id]
aws datasync describe-task-execution --task-execution-arn %TaskExecutionArn%

成功すると Status に "SUCCESS" と表示されます。

後処理

旧システムから新システムへのデータ移行が完了し、旧システムの運用が停止した後、AWS DataSyncのlocation, taskを削除します。

set DataSyncStackName=WmsaApp1TestDataSyncEFS
aws cloudformation delete-stack --stack-name %DataSyncStackName%