AWS Cloud9 构造库
本单元中更高层次的构件的API是实验性的并正在积极开发中. 在今后任何版本中,它们都须作非背向相容的修改或去除。 这些是 不适用 语义版本 模型和断开的更改 在发行笔记中宣布. 这意味着虽然你可能使用它们,但可能需要更新 当更新到此软件包的更新版本时,您的源代码.
这个模块是 AWS 云开发套件 项目.
AWS Cloud9 是一个以云为基础的集成开发环境(IDE),它允许您仅用一个来写、运行和调试您的代码 浏览器. 它包括一个代码编辑器,调试器,和终端. "Cloud9"预装了流行的基本工具 编程语言, 包括 JavaScript、 Python、 PHP 等, 因此不需要安装文件或配置 开发机器以启动新项目。 由于您的 Cloud9 IDE 以云为主, 您可以从您的文档中进行您的工程 办公室 家 或任何使用互联网连接的机器的地方 Cloud9还为发展提供了无缝的经验 无服务器应用程序使您能够轻松定义资源,调试,并在本地和远程执行之间切换 无服务器应用程序。 有了Cloud9,你就可以很快地与团队分享你的开发环境,使你能够配对 程序和实时跟踪对方的投入.
创建 EC2 环境
EC2 环境定义为: Ec2Environment中创建 EC2 环境
subnetSelection 专用 subnetType。 。 。 .
// create a cloud9 ec2 environment in a new VPC
const vpc = new ec2.Vpc(this, 'VPC', { maxAzs: 3});
new cloud9.Ec2Environment(this, 'Cloud9Env', { vpc, imageId: cloud9.ImageId.AMAZON_LINUX_2, });
// or create the cloud9 environment in the default VPC with specific instanceType
const defaultVpc = ec2.Vpc.fromLookup(this, 'DefaultVPC', { isDefault: true });
new cloud9.Ec2Environment(this, 'Cloud9Env2', {
vpc: defaultVpc,
instanceType: new ec2.InstanceType('t3.large'),
imageId: cloud9.ImageId.AMAZON_LINUX_2,
});
// or specify in a different subnetSelection
const c9env = new cloud9.Ec2Environment(this, 'Cloud9Env3', {
vpc,
subnetSelection: {
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
},
imageId: cloud9.ImageId.AMAZON_LINUX_2,
});
// print the Cloud9 IDE URL in the output
new CfnOutput(this, 'URL', { value: c9env.ideUrl });
指定EC2 AMI
使用 imageId 指定要使用的 EC2 AMI 图像:
const defaultVpc = ec2.Vpc.fromLookup(this, 'DefaultVPC', { isDefault: true });
new cloud9.Ec2Environment(this, 'Cloud9Env2', {
vpc: defaultVpc,
instanceType: new ec2.InstanceType('t3.large'),
imageId: cloud9.ImageId.UBUNTU_18_04,
});
克隆存储器
使用 clonedRepositories 以复制一个或多个 AWS 编码寄存器到环境中 :
import * as codecommit from 'aws-cdk-lib/aws-codecommit';
// create a codecommit repository to clone into the cloud9 environment
const repoNew = new codecommit.Repository(this, 'RepoNew', {
repositoryName: 'new-repo',
});
// import an existing codecommit repository to clone into the cloud9 environment
const repoExisting = codecommit.Repository.fromRepositoryName(this, 'RepoExisting', 'existing-repo');
// create a new Cloud9 environment and clone the two repositories
declare const vpc: ec2.Vpc;
new cloud9.Ec2Environment(this, 'C9Env', {
vpc,
clonedRepositories: [
cloud9.CloneRepository.fromCodeCommit(repoNew, '/src/new-repo'),
cloud9.CloneRepository.fromCodeCommit(repoExisting, '/src/existing-repo'),
],
imageId: cloud9.ImageId.AMAZON_LINUX_2,
});
指定所有者
每个Cloud9环境都有 拥有者拥有者完全控制环境,可以邀请更多的成员参与环境合作。 更多信息见 AWS Cloud9 与共享环境合作) (中文(简体) ).
默认情况下, 所有者将是创建环境的身份, 当环境使用 CloudFormation 创建时, 这最有可能是您的 CloudFormation 执行角色 。 提供方 owner 属性来指定不同的所有者,无论是特定的 IAM 用户还是 AWS 账户根用户.
Owner 是一个拥有Cloud9环境的IAM实体. Owner 拥有自己的访问权限和资源。 您可以指定一个 Owner在EC2环境中,可分为以下类型:
- 账户根
- IAM 用户
- IAM 联邦用户
- IAM 假定的作用
所有者的ARN必须满足下列正则表达式: ^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):(iam|sts)::\d+:(root|(user\/[\w+=/:,.@-]{1,64}|federated-user\/[\w+=/:,.@-]{2,32}|assumed-role\/[\w+=:,.@-]{1,64}\/[\w+=,.@-]{1,64}))$
注:不建议使用账户根用户,参见 交流最佳做法。 。 。 .
要指定 AWS 账户根用户为环境所有者, 请使用 Owner.accountRoot()
declare const vpc: ec2.Vpc;
new cloud9.Ec2Environment(this, 'C9Env', {
vpc,
imageId: cloud9.ImageId.AMAZON_LINUX_2,
owner: cloud9.Owner.accountRoot('111111111')
})
指定特定 IAM 用户为环境所有者,使用 Owner.user()。用户应当拥有 AWSCloud9Administrator 管理政策
用户应该拥有 AWSCloud9User (首选)或 AWSCloud9Administrator 附有管理的政策.
import * as iam from 'aws-cdk-lib/aws-iam';
const user = new iam.User(this, 'user');
user.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('AWSCloud9Administrator'));
declare const vpc: ec2.Vpc;
new cloud9.Ec2Environment(this, 'C9Env', {
vpc,
imageId: cloud9.ImageId.AMAZON_LINUX_2,
owner: cloud9.Owner.user(user)
})
指定特定 IAM 联盟用户为环境所有者,使用 Owner.federatedUser(accountId, userName)。 。 。 .
用户应该拥有 AWSCloud9User (首选)或 AWSCloud9Administrator 附有管理的政策.
import * as iam from 'aws-cdk-lib/aws-iam';
declare const vpc: ec2.Vpc;
new cloud9.Ec2Environment(this, 'C9Env', {
vpc,
imageId: cloud9.ImageId.AMAZON_LINUX_2,
owner: cloud9.Owner.federatedUser(Stack.of(this).account, "Admin/johndoe")
})
指定一个IAM作为环境所有者的角色,使用 Owner.assumedRole(accountId: string, roleName: string)。 。 。 .
该角色应具有: AWSCloud9User (首选)或 AWSCloud9Administrator 附有管理的政策.
import * as iam from 'aws-cdk-lib/aws-iam';
declare const vpc: ec2.Vpc;
new cloud9.Ec2Environment(this, 'C9Env', {
vpc,
imageId: cloud9.ImageId.AMAZON_LINUX_2,
owner: cloud9.Owner.assumedRole(Stack.of(this).account, "Admin/johndoe-role")
})
自动榴弹
Cloud9环境可以自动启动并停止相关的EC2实例来降低成本.
使用 automaticStop 以指定在环境被最后一次使用后运行实例被关闭之前的分钟.
const defaultVpc = ec2.Vpc.fromLookup(this, 'DefaultVPC', { isDefault: true });
new cloud9.Ec2Environment(this, 'Cloud9Env2', {
vpc: defaultVpc,
imageId: cloud9.ImageId.AMAZON_LINUX_2,
automaticStop: Duration.minutes(30),
});