npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cdk-env-manager

v0.8.6

Published

aws-cdk interactive deploy tool.

Downloads

67

Readme

cdk-env-manager

npm version License: MIT Twitter

aws-cdk で複数環境(production, development, etc...)を管理するための CLI ツールです。 TypeScript 対応。

https://qiita.com/ronny/items/c53c79a770fd12ae6786

  • デプロイ時の Parameter や Output は、AWS の Parameter Store で管理します。そのため、

    • config.dev.json など、環境毎にファイルを作成する必要はありません。
    • パラメータが増える毎に、環境変数や aws-cdk の Context を増やす必要はありません。
    • 機密情報を Git で管理する必要がありません。
  • cdk diffしてからcdk deployするなど、デプロイ時の手順が統一されます。

Image

Demo

デプロイ時の interactive CLI のイメージ

CDK

Install

yarn add aws-sdk @aws-cdk/core @aws-cdk/aws-ssm # install peer dependencies
yarn add cdk-env-manager

Usage

initialize

cdk プロジェクトを作成しておいてください。

cdk init --language typescript
// cdk.json
{
  "app": "node -r dotenv/config -r ts-node/register cdk/MyApp.ts"
}

Stack のコーディング

  • cdk-env-manager から CdkStackBase を import して継承してください。
  • createResources メソッドを実装してください。
// S3Stack.ts
import * as cdk from '@aws-cdk/core'
import * as s3 from '@aws-cdk/aws-s3'
import { CdkStackBase } from 'cdk-env-manager'

type Input = { removalPolicy: cdk.RemovalPolicy }
type Export = { myBucketArn: string }

export class S3Stack extends CdkStackBase<Input, Export> {
  createResources() {
    const myBucket = new s3.Bucket(this, this.name('MyBucket'), {
      removalPolicy: this.props.removalPolicy,
    })

    this.createOutputsSsmParameters({ myBucketName: myBucket.bucketName })

    return {
      myBucketArn: myBucket.bucketArn,
    }
  }
}
  • Input はこの Stack が受け取るパラメータです。
  • Export はこの Stack が出力するパラメータです。他の Stack に渡したい場合に使います。
  • createOutputsSsmParameters(...)は値を SSM のパラメータストアに書き出します。アプリ側から参照したい設定値などを、SSM に書き出してください。(アプリ側からの参照方法は後述)
  • this.name("MyBucket")は、"DevMyBucket"のように環境名の prefix をつけてくれるヘルパーメソッドです。

App のコーディング

複数の Stack をまとめる cdk app を作成します。

  • cdk-env-manager から CdkAppBase を import して継承してください。
  • createStacks メソッドを実装してください。
  • 末尾2行は必須です。
// MyApp.ts
import * as cdk from '@aws-cdk/core'
import { CdkAppBase } from 'cdk-env-manager'
import { RoleStack } from './stacks/RoleStack'
import { S3Stack } from './stacks/S3Stack'

type DeployParameter = { removalPolicy: cdk.RemovalPolicy }

export class MyApp extends CdkAppBase<DeployParameter> {
  async createStacks() {
    const s3Stack = new S3Stack(this, 'S3Stack', {
      removalPolicy: this.deployParameters.removalPolicy,
    })

    new RoleStack(this, 'RoleBucket', {
      bucketArn: s3Stack.exports.myBucketArn,
    })
  }
}

const app = new MyApp()
app.synth()

詳細は example フォルダを参照してください。

Default Parameter の定義

デプロイ時にパラメータを渡すことができます。パラメータは環境毎に設定できます。 パラメータの既定値をファイルに記載しておく必要があります。 プロジェクトのルートに cdk.parameters.default.env を作成し、パラメータの既定値を key=value 形式で指定してください。

REMOVAL_POLICY=retain
XXX=xxx

環境変数の設定

デプロイ時に必要な以下の環境変数を設定してください。aws-cdk が参照する環境変数となります。

  • AWS_DEFAULT_REGION
  • AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY のペア、または AWS_PROFILE

デプロイ実行

npx cdk-env-manager

# .envファイルを読み込んで実行する場合は
# npx -n '-r dotenv/config' cdk-env-manager

詳細は以下を参照。

https://qiita.com/ronny/items/c53c79a770fd12ae6786#デプロイ方法

CLI OPTIONS

--skip-diff

cdk diffの実行をスキップします。

other options

aws-cdk の cli options が使用できます。 cdk diff, cdk deploy実行時に指定された option を渡します。

npx cdk-env-manager --trace # Print trace for stack warnings

アプリケーションから Stack Outputs の参照

with webpack

SSM に書き出された設定値を、webpack で読み込んでビルドする方法です。

環境変数CDK_ENV_KEYに、利用したい環境のキーを設定してください。

// webpack.config.ts
import webpack from 'webpack'
import { loadStackParameters } from 'cdk-env-manager/lib/util'

const configFunction: () => Promise<webpack.Configuration> = async () => {
  // load stack parameters from ssm
  const params = await loadStackParameters()

  return {
    entry: 'src/index.ts',
    // ...省略
    plugins: [
      new webpack.DefinePlugin({
        ...Object.keys(params).reduce(
          (payload, key) => ({ ...payload, [key]: JSON.stringify(params[key]) }),
          {}
        ),
      }),
    ],
  }
}

export default configFunction
# .env
AWS_DEFAULT_REGION=ap-northeast-1
AWS_PROFILE=my-profile
CDK_ENV_KEY=Dev # SSMから取得する環境のKEYを指定
// package.json
{
  "scripts": {
    "build": "node -r dotenv/config -r ts-node/register webpack.config.ts"
  }
}

Singleton Stack

HOSTED ZONE など、各環境で共通で利用したいリソースは、CdkSingletonStackBaseを継承して Stack を作成してください。 各環境でこの Stack を共有して利用します。

1 つの AWS アカウント内に複数の CdkApp を持ちたい場合

環境変数CDK_APP_KEYを設定することで、 AWS アカウント内で参照する CdkApp を切り替えることができます。

License

MIT