Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,18 @@ cdk synth
cdk bootstrap
cdk deploy

```
```

#### How to retrieve platform or solutionStackName?

- `platform`
```shell
aws elasticbeanstalk list-platform-versions \
--query 'PlatformSummaryList[*].[PlatformArn,PlatformBranchName]' --output table
```

- `solutionStackName`
```shell
aws elasticbeanstalk list-available-solution-stacks \
--query 'SolutionStackDetails[*].[SolutionStackName]' --output table
```
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"context": {
"platform": "arn:aws:elasticbeanstalk:us-east-1::platform/Tomcat 8 with Java 8 running on 64bit Amazon Linux"
"platform": "arn:aws:elasticbeanstalk:us-east-1::platform/Corretto 21 running on 64bit Amazon Linux 2023/4.5.0",
"solution": "64bit Amazon Linux 2023 v6.5.0 running Node.js 20"
},
"app": "node index"
}
53 changes: 45 additions & 8 deletions typescript/elasticbeanstalk/elasticbeanstalk-environment/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env node
import * as cdk from 'aws-cdk-lib';
import * as elasticbeanstalk from 'aws-cdk-lib/aws-elasticbeanstalk';
import { CfnApplication, CfnEnvironment } from 'aws-cdk-lib/aws-elasticbeanstalk';
import { InstanceProfile, ManagedPolicy, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam';


export class CdkStack extends cdk.Stack {
Expand All @@ -11,21 +12,57 @@ export class CdkStack extends cdk.Stack {
const node = this.node;

const appName = 'MyApp';

const platform = node.tryGetContext("platform");
const solution = node.tryGetContext("solution");


// Create Role:
const ebRole = new Role(this, `${appName}-eb-role` , {
assumedBy: new ServicePrincipal('ec2.amazonaws.com'),
roleName:`${appName}-eb-role`
});

// some managed policies eb must have
ebRole.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('AWSElasticBeanstalkWebTier'));
ebRole.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('AWSElasticBeanstalkMulticontainerDocker'));
ebRole.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('AWSElasticBeanstalkWorkerTier'));

//Custom policies
//access to config secrets

const roleARN = ebRole.roleArn;

// Create instance profile
const instanceProfile = new InstanceProfile(this, `${appName}-instance-role`, {
role: ebRole,
instanceProfileName: `${appName}-instance-role`,
})

const app = new elasticbeanstalk.CfnApplication(this, 'Application', {
const app = new CfnApplication(this, `${appName}-Application`, {
applicationName: appName
});

const env = new elasticbeanstalk.CfnEnvironment(this, 'Environment', {
environmentName: 'MySampleEnvironment',
applicationName: app.applicationName || appName,
platformArn: platform
const env = new CfnEnvironment(this, `${appName}-Environment`, {
environmentName: `${appName}-Environment`,
applicationName: appName,
solutionStackName: solution,
//platformArn: platform,
optionSettings: [
{
namespace: "aws:autoscaling:launchconfiguration",
optionName: "IamInstanceProfile",
value: instanceProfile.instanceProfileArn,
},
{
namespace: "aws:elasticbeanstalk:environment",
optionName: "EnvironmentType",
value: "SingleInstance",
},
]
});

// to ensure the application is created before the environment
env.addDependsOn(app);
env.addDependency(app);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"aws-cdk": "2.1004.0"
},
"dependencies": {
"aws-cdk-lib": "2.185.0",
"aws-cdk-lib": "2.188.0",
"constructs": "^10.0.0",
"source-map-support": "^0.5.9"
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,23 @@
{
"compilerOptions": {
"target":"ES2018",
"module": "commonjs",
"lib": ["es2016", "es2017.object", "es2017.string"],
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": false,
"inlineSourceMap": true,
"inlineSources": true,
"experimentalDecorators": true,
"strictPropertyInitialization":false
}
}
"target": "ES2020",
"module": "commonjs",
"lib": ["es2020"],
"declaration": true,
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": false,
"inlineSourceMap": true,
"inlineSources": true,
"experimentalDecorators": true,
"strictPropertyInitialization": false,
"typeRoots": ["./node_modules/@types"]
},
"exclude": ["node_modules", "cdk.out"]
}
Loading