AWS CDKでAppConfigの機能フラグを作成してみた

2022.09.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部 IoT事業部の若槻です。

最近AWS AppConfigの活用事例について聞く機会がありました。

AppConfigは保持したパラメータを呼び出せるという点ではParameter Storeと似ていますが、異なる点としてDeploymentやEnvironmentの概念を持っており、複数のパラメータをまとまった単位(configuration profile)で管理できるなどParameter Storeに比べてアプリケーションのDevOps向けの機能が強化されたサービスとなっています。

今回は、AppConfigの機能フラグをAWS CDKで作成してみました。

やってみた

AppConfigのCDK Construct Classは現状ではL1のみの提供となります。

利用できるConstructは次の6つです。

  • CfnApplication
  • CfnEnvironment
  • CfnConfigurationProfile
  • CfnDeployment
  • CfnDeploymentStrategy
  • CfnHostedConfigurationVersion

今回は機能フラグ型のConfiguration Profileの箱までをAWS CDKで作り、機能フラグのパラメータやバージョン、デプロイは手動で作るようにしてみます。(実際の運用でもこのようにすることが多いのではないでしょうか。)

まずAWS CDK v2(TypeScript)で次のようなCDKスタックを作成します。

lib/aws-cdk-app-stack.ts

import { aws_appconfig, Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';

export class AwsCdkAppStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    const testApp = new aws_appconfig.CfnApplication(this, 'testApp', {
      name: 'testApp',
    });

    new aws_appconfig.CfnEnvironment(this, 'testEnvironment', {
      applicationId: testApp.ref,
      name: 'testEnvironment',
    });

    new aws_appconfig.CfnConfigurationProfile(this, 'testConfigureProfile', {
      name: 'testConfigureProfile',
      applicationId: testApp.ref,
      locationUri: 'hosted', //configurationをAppStore上に保管する場合は"hosted"と指定。他にもS3 BucketやSSM Parameterなどに保管可能。
      type: 'AWS.AppConfig.FeatureFlags',
    });
  }
}

上記をCDK Deployしてスタックをデプロイします。

AppConfigコンソールにアクセスすると、アプリケーションが作成されています。

アプリケーションにはConfiguration Profileが機能フラグ型で作成されています。

フラグを作成してみます。

AppConfigはパラメータごとに値のConstraint(制約)を設けられるのが良いですね。手動で変更する場合でも誤って異常な値を設定するオペミスを防ぐことができます。

新規バージョンとして保存します。

保存したバージョンをデプロイします。

デプロイが開始されました。ステータスがBakingから変わればデプロイ完了です。

少し経つとデプロイが完了し、また次のデプロイが実施可能な状態になりました。

おわりに

AppConfigの機能フラグをAWS CDKで作成してみました。

DeploymentやEnvironmentなど要素となるリソースが多いためParameter Storeを想像しているとはじめは戸惑いますが、使いこなせればとても便利なサービスだと思うので、活用していきたいです。

以上