SuiteCRMをコンテナで本格的に活用し始めました。
ある程度形になってきたのでテスト用の環境をAWS上に構築しようと思い、早速AppRunnerを利用してみました。
AppRunnerはコンテナイメージまたはコンテナリソースを指定してやれば簡単にコンテナサーバを稼働させることができるAWSサービスです。
AutoScalingなども自動設定され、スピーディーにコンテナ環境を稼働させることができます。
通常のAppRunnerへのコンテナのデプロイ方法
AWSコンソール上で作業する場合は以下の流れになります。
- DockerImageを作成してECRにアップロードする
- AppRunnerでECRのレジストリを指定してデプロイ開始
以上です😊簡単ですね。
CDKでデプロイしようと思った理由
AppRunnerでのコンテナデプロイは私の場合6分ほどかかりました。
一度デプロイに失敗するとその度に各種パラメータを再設定してデプロイ、5分待つ・・・
またエラー😢
を何度か繰り返していました。
環境変数も5つほどあったのでエラーのたびにこの変数も設定し直すのがだんだん面倒になってきました。
ってことでCDKでIaC化することにしました。
CDKでのIaC化手順
1. 何はともあれCDKのインストール
CLIはすでに入れていたので、CDKをインストール
以下の記事を参考にしました。
https://aws.amazon.com/jp/getting-started/guides/setup-cdk/module-one/
2. TypeScriptコードの作成
以下の記事を参考にさせていただきました。
https://qiita.com/doge_boi/items/0ce599a92b88c20324b8
私の場合はすでにECRにコンテナイメージをアップロード済みだったので、そちらを参照するようにしました。
また、一度AppRunnerを走らせていたのでIAMロールもそちらを利用しました。
CDK Ver.2の情報は確かにまだまだ少ないですね。
本家CDKのドキュメントもちょこちょこ読み込んで作成していきました(英語です)
https://docs.aws.amazon.com/cdk/api/v2/
ソースコードは以下の通り。
import {
Stack,
StackProps,
aws_apprunner as apprunner,
aws_iam as iam,
aws_ecr as ecr
} from 'aws-cdk-lib'
import {Construct} from 'constructs';
export class AppRunnerStack extends Stack{
constructor(scope: Construct,id:string,props?:StackProps){
super(scope,id,props)
// ECR
const repository = ecr.Repository.fromRepositoryName(this,'AppRunnerRepository',[コンテナレジストリ名])
// AppRunner
const cfnService = new apprunner.CfnService(this, 'AppRunnerService', {
sourceConfiguration: {
authenticationConfiguration: {
accessRoleArn:[AppRunnerからECRにアクセスするロールのARN],
},
autoDeploymentsEnabled: false,
imageRepository: {
imageIdentifier: repository.repositoryUriForTag('latest'),
imageRepositoryType: 'ECR',
imageConfiguration: {
port: '8080',
runtimeEnvironmentVariables: [
{name:'SUITECRM_DATABASE_PASSWORD',value:'xxxx'},
{name:'SUITECRM_DATABASE_USER',value:'xxxx'},
{name:'SUITECRM_DATABASE_PORT',value:'3306'},
{name:'SUITECRM_DATABASE_HOST',value:'xxxx'},
{name:'SUITECRM_DATABASE_NAME',value:'xxxx'}
],
},
},
},
healthCheckConfiguration: {
interval:5,
healthyThreshold:2,
},
});
}
}
[]で囲んでいるところは適宜書き換えてください。
また、healthCheckConfigurationはデプロイ時間を短縮するために追加していますので必須ではありません。
詳しくは以下の記事を参照のこと。
まとめ
ECRレポジトリの作成やIAMロールの作成も行いたい場合はもう少し上記のソースコードを書き換えていただく必要があります。
ついにこれでコンテナ&CDKデビューです(わーい)
今回作成したTypeScriptファイルを少し書き換えるだけで本番環境のデプロイコードも作成できそうです。
AppRunnerはコンテナを停止しただけでは課金は止まらないので、利用しないコンテナはcdk destroyコマンドできちんと削除してくださいね。