希望测试coding但是又不想配置cdk环境,本文使用vscode+dockers的方式在ec2上快速启动cdk开发环境,便于复用和快速测试
启动amazonlinux容器运行awscli命令可以看到,容器能够从宿主机上获取元数据信息,即可以直接使用ec2的凭证
bash-4.2# aws sts get-caller-identity
{
"UserId": "AROAQRIBWRJKKIG7SFQ6E:i-017ff62b060a71f0a",
"Account": "xxxxxxx",
"Arn": "arn:aws-cn:sts::xxxxxxxxx:assumed-role/MyEc2AdministratorAccess/i-017ff62b060a71f0a"
}
拉取镜像,关于node的不同版本
$ docker pull node:16.18.0
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
amazonlinux latest 24608685b402 2 days ago 164MB
node 16.18.0 147af8719073 9 days ago 911MB
查看node镜像的入口,除了设定node环境外,最后的命令是exec "$@"
,我们可以自定义cmd,由于要持续运行,可以设置为sleep
# cat /usr/local/bin/docker-entrypoint.sh
#!/bin/sh
set -e
# Run command with node if the first argument contains a "-" or is not a system command. The last
# part inside the "{}" is a workaround for the following bug in ash/dash:
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=874264
if [ "${1#-}" != "${1}" ] || [ -z "$(command -v "${1}")" ] || { [ -f "${1}" ] && ! [ -x "${1}" ]; }; then
set -- node "$@"
fi
exec "$@"
将host的codeing目录外挂在hellocdk
目录下,注入启动脚本并sleep infinity
#!/bin/bash
set -ex
export CONTAINER_CDK_HOME=hellocdk
export INIT_CDK_HOME=/home/ec2-user/init.sh
cat > $INIT_CDK_HOME << EOF
#!/bin/bash
npm i -g cdk
mkdir $CONTAINER_CDK_HOME && cd $CONTAINER_CDK_HOME
cdk --version
cdk init --language javascript
sleep infinity
EOF
sudo docker run --detach \
--name hellocdk \
--user root \
--restart always \
-v $INIT_CDK_HOME:/init.sh \
node:16.18.0 \
bash "/init.sh"
当然也可以写成dockerfile打包为image
以上方法虽然能够创建cdk项目,但是只能使用nodejs,不过cdk本身是使用jsii进行异构部分的衔接,所以个人觉得最好还是用js
使用vscode attach
上面的环境已经搭建完毕,之后当然可以通过以下的方式进入容器中进行编辑。但是我们可以使用vscode本身的attach container功能直接在容器内部开发
docker exec -it xxxxx bash
安装docker插件和microsoft的remote系列插件,然后直接attach到容器中。vscode会在容器中安装类似agent的东西
进入创建好的cdk项目目录,创建简单的测试
执行部署成功
查看堆栈