Skip to content

Instantly share code, notes, and snippets.

@wmakeev
Last active March 17, 2022 09:07
Show Gist options
  • Save wmakeev/5c62f903a653b2cd45d16d9619f11c47 to your computer and use it in GitHub Desktop.
Save wmakeev/5c62f903a653b2cd45d16d9619f11c47 to your computer and use it in GitHub Desktop.
[AWS CDK stack] #template #aws #cdk #stack

Params

Parameter Default Description
AWS_PROFILE default Current AWS profile
STACK_ACCOUNT_NUMBER AWS account number (aws sts get-caller-identity --profile default)
STACK_REGION eu-west-1 AWS region (aws configure get region --profile prod)

Include

Last bootstraped

  • 2021-11-25 /GitHub/moysklad-webhook-flatten-stack

  • 2021-11-30 /CodeCommit/@rybnyepravila/EcwidOrderStateSync

  • 2021-12-03 /CodeCommit/@gamehouse/ProductLastSupplyUpdate

  • 2021-12-09 /CodeCommit/@rybnyepravila/NewOrderProductAppend

    • Обновления в /DEPLOYMENT.md
  • 2021-12-12 /CodeCommit/@uaa/EmailSender/src/types/index.ts

    • MetaType src/types/index.ts
# AWS CDK (should be same version)
npm i -E -D aws-cdk @aws-cdk/core @aws-cdk/aws-codebuild @aws-cdk/aws-codecommit @aws-cdk/aws-codepipeline @aws-cdk/aws-codepipeline-actions @aws-cdk/pipelines
# SQS
npm i -E -D @aws-cdk/aws-sqs @aws-cdk/aws-lambda-event-sources @aws-cdk/aws-events-targets
# EventBus
npm i -E -D @aws-cdk/aws-events
# Lambda
npm i -E -D @aws-cdk/aws-lambda
# SSM
npm i -E -D @aws-cdk/aws-ssm
# Secrets Manager
npm i -E -D @aws-cdk/aws-secretsmanager
# Other devDependencies
npm i -D aws-sdk @types/aws-lambda @types/lodash.once
# dependencies
npm i envalid lodash.once
# npm
.npmrc
# build
/layer
#cdk
/cdk.out
module.exports = {
name: "%PROJECT_NAME%-stack",
private: true,
publishConfig: undefined,
scripts: {
"cleanup": $.scripts['cleanup'] + " && rm -rf __",
"build:layer": "touch .npmrc && LAYER_DIR=layer/dependencies && rm -rf $LAYER_DIR && mkdir -p \"${LAYER_DIR}/nodejs\" && cp package.json \"${LAYER_DIR}/nodejs\" && cp .npmrc \"${LAYER_DIR}/nodejs\" && npm install --production --prefix \"${LAYER_DIR}/nodejs\" && rm \"${LAYER_DIR}/nodejs/package.json\" && rm \"${LAYER_DIR}/nodejs/package-lock.json\" && rm \"${LAYER_DIR}/nodejs/.npmrc\"",
"build:app:dev": $.scripts['build:dev'],
"build:app": $.scripts['build'],
"build": 'npm run build:app && npm run build:layer',
"cdk:synth": "npx cdk synth",
"cdk:deploy": "npm run build && npm run cdk:synth && npx cdk deploy",
"deploy": "npx cdk deploy --all --profile $PROFILE"
}
}
{
"app": "NODE_OPTIONS=--enable-source-maps node build/stack/synth.js",
"context": {
"@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true,
"@aws-cdk/core:enableStackNameDuplicates": true,
"aws-cdk:enableDiffNoFail": true,
"@aws-cdk/core:stackRelativeExports": true,
"@aws-cdk/core:newStyleStackSynthesis": true,
"@aws-cdk/aws-ecr-assets:dockerIgnoreSupport": true,
"@aws-cdk/aws-secretsmanager:parseOwnedSecretName": true,
"@aws-cdk/aws-kms:defaultKeyPolicies": true,
"@aws-cdk/aws-s3:grantWriteWithoutAcl": true,
"@aws-cdk/aws-ecs-patterns:removeDefaultDesiredCount": true,
"@aws-cdk/aws-rds:lowercaseDbIdentifier": true,
"@aws-cdk/aws-efs:defaultEncryptionAtRest": true,
"@aws-cdk/aws-lambda:recognizeVersionProps": true,
"@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true
}
}
module.export = {
include: [...$.include, 'stack/**/*']
}

Сontributing guide

Tools and conventions

Stack CI pipeline deployment

1. Preconditions

npm install -g np@latest
npm install -g aws-cdk@latest
cdk --version

Output:

2.16.0 (build 4c77925)

2. Install dependencies and test project

npm install
npm run test

3. Update stack config (if necessary)

Update stack props in stack/synth.ts and commit

4. Create CodeCommit repository (if CI is necessary)

For consistence use CammelCase naming convention

APP_NAME=MyAppCamelCaseName

APP_DESCRIPTION="App description"
aws codecommit create-repository --repository-name ${APP_NAME}Stack --repository-description $APP_DESCRIPTION --profile default

command output:

{
  "repositoryMetadata": {
    ...
    "cloneUrlSsh": "ssh://git-codecommit.eu-west-1.amazonaws.com/v1/repos/NewOrderProductAppendStack",
    ...
  }
}

Ensure you have valid ssh config for CodeCommit.

REPO_CLONE_URL=[cloneUrlSsh]

Replace host (git-codecommit.eu-west-1.amazonaws.com) in cloneUrlSsh to alias, if necessary.

Add origin

git remote add origin $REPO_CLONE_URL

Add stage branch

git branch stage

Commit all current changes.

Push to master

git push --set-upstream origin master

Push to stage

git push origin stage

5. Bootstrap AWS account (if necessary)

Once for each deploy region in current account,

npx cdk bootstrap --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess --profile default

or specific account

npx cdk bootstrap aws://ACCOUNT-NUMBER/REGION --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess --profile default

Get current ACCOUNT-NUMBER

aws sts get-caller-identity
aws sts get-caller-identity --profile default

Get current REGION

aws configure get region
aws configure get region --profile prod

6. Release new version (if necessary)

np

7. Setup environment

Ensure all configs and secrets described in README is existsy.

8. Deploy CDK stack

PROFILE=default npm run deploy
# SHOULD BE EMPTY
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment