やりたいこと
- AWS CDKのデプロイをAWS CloudShellからやりたい
- CLIでの接続が難しい、MFAが必要な環境やSAMLでSSOしている環境でも、AWSコンソールからさっと開いてデプロイできる
ポイント
- AWS CloudShellは
$HOME
の外部にインストールしたツールは永続化されない $HOME
内の永続化ストレージ(上限1GB)に必要なツールをインストールすることで、繰り返しcdk deploy
を実行する際にパッケージの再インストールが必要なくなる
前提環境
- AWS CDKをPythonで書いている
- Pythonのパッケージリスト管理にpipenvを使っている
- AWS CDKのコードをGitHubなどインターネット経由で接続できるリポジトリにpushしている
準備
リポジトリ
- AWSコンソールからAWS CloudShellを起動する
- 自分のリポジトリをcloneする
$ git clone
### pipenv
- AWS CloudShellにはpython3,pip3はあるがpipenvが導入されていない
**普通に`sudo pip3 install`でインストールすると永続化されないので`$HOME`配下にインストールする**
$ pip3 install pipenv --user
- PipfileのあるCDKアプリのディレクトリに移動しPythonパッケージを一括インストールする
Pipfileに記載のPythonバージョンとAWS CloudShellにインストールされたバージョンが異なる場合があるが、コードに互換性がある場合はパスを指定することで警告を無視してインストールする
$ pipenv install --python /usr/bin/python3
- pipenvの仮想環境にスイッチすることで、 `$HOME` 配下のパッケージにパスが通った状態になる
$ pipenv shell
### cdkコマンド
- AWS CloudShellにはnode,npmコマンドはあるがcdkコマンドは導入されていない。
**普通に`sudo npm install -g`でインストールすると永続化されないので`$HOME`配下にインストールする**
cdk.jsonが配置されたCDKアプリのディレクトリでインストールする( `node_modules/`配下は.gitignoreされている前提)
$ npm install aws-cdk
- グローバルにインストールされていないので、cdkコマンドはnpxコマンドを介して利用する
$ npx cdk list
## 利用
AWS CloudShellを起動するたび、以下を実行することでパッケージの再インストールなしにCDKのデプロイが可能
```bash
$ cd <cdk_app_directory>
$ pipenv shell
$ npx cdk list
$ npx cdk diff <stack_name>
$ npx cdk deploy <stack_name>
快適!!!
パッケージが全て$HOME
配下に導入されるので、ディスク容量の上限には注意。