ひぃ(hixi)の技術雑記ブログ

事実や解決策というよりも自分が思ったことをつらつらと書いていく所存。文章構成とかそういうのあまり気にせずに書きます

AWS CDK 使ってます

三日坊主 Cloudformation の記事を書いていましたが、最近は CDK を使っています。

ちょうど社内勉強会で話す機会があったので、 こちらにスライドを紹介させていただきます。 speakerdeck.com

そういえば、本番環境用の wrapper スクリプトも必要だなーってことで、適当に書いてみたのでそちらも。

./mycdk diff
./mycdk deploy

のように使っています

#!/usr/bin/env node

const AWS_PRODUCTION_ACCOUNT_ID = '{YOUR_PRODUCTION_AWS_ACCOUNT_ID}'

function confirm() {
  const yesno = require('yesno')
  const yes = yesno({
    question: "It's production environment. Are you sure you want to continue? ([y]es/[n]o)",
    defaultValue: null,
  })
  return yes
}

async function main() {
  process.argv.splice(0, 2)
  const command = process.argv[0]
  if (command == 'deploy') {
    console.log("checking environment...")
    const aws = require('aws-sdk')
    const sts = new aws.STS();
    const data = await sts.getCallerIdentity({}).promise()
    const accountId = data.Account
    if (accountId === AWS_PRODUCTION_ACCOUNT_ID) {
      if (!await confirm()) {
        return
      }
    }
  }

  const argv = process.argv
  
  const spawn = require('child_process').spawn;
  const deploy = spawn('cdk', argv, { stdio: 'inherit' })
}

main()

ちなみに ---profile は使って(使えて)いません。 AWS SSO を使っている環境においての cdk --profile がまだ対応していないためです。

なので、それぞれの環境の Command line or programmatic access から、ACCESS_KEY / SECRET を取得し、ターミナル上に貼り付けて deploy しています。 f:id:hixi-hyi:20200313150735p:plain

※ nodejs 初心者です