AWS CDK を用いた Linux 仮想サーバーの構築


概要

前回は EC2 ダッシュボードの GUI に従って インスタンス(Linux 仮想サーバー)を起動した。今回は東京大学計数工学科で2020年度S1/S2タームに開講された"システム情報工学特論" を参考に、クラウド開発キット(Cloud Development Kit : CDK) というソフトウェア開発プラットホームを用いてインスタンスを起動する手順を紹介する。講義資料の手順に従うために必要な環境設定を中心に解説する。

環境

  • MacBook Air (Retina, 13-inch, 2018)
  • macOS Big Sur (Version 11.2.3)
  • メモリ 16 GB

CDK とは

CDK は CloudFormation を構築するソフトウェア開発プラットホームである。現在は TypeScript(JavaScript)、Python、Java、C#(.NET)の 4 言語でサポートされている。本項では AWS 無料アカウントを用いて Python プラットホームによる開発に取り組む。CDK の使い方は、こちらのワークショップに従ってアプリを作成することで効率的に習得することもできる。

CDK を用いた Linux 仮想サーバーの構築

STEP1: AWS CLI のインストール

前回のように AWS の各種設定・操作はマネージメントコンソールから視覚的に行うこともできる。一方で AWS 専用の CLI(コマンドラインインターフェース)を用いることで各種設定・操作を管理・自動化することもできる。
AWS CLI は aws から始まる一連のコマンドであり、様々なサービスを迅速に利用することができる。AWS CLI をローカルにインストールする方法はこちらに記載されているが、前回構築した Linux 仮想サーバーに AWS CLI は標準搭載されているため今回はこちらを利用する。前回の要領で Linux 仮想サーバーに SSH 接続してみよう。

STEP2: VScode と SSH 接続

テキストエディタの中でも VSCode は拡張機能で SSH 接続が可能になるため、AWS の開発に利用されることが多い。公式でも AWS のコードエディタとして VSCode が推奨されている。日本語ではこちらに詳しくまとめられている。VSCode で SSH 接続拡張機能をインストールし、前回作成したキーペアを用いて SSH 接続しよう。
これにより仮想サーバーのコード編集がリモートで可能になる。

STEP3: AWS CDK のインストール

AWS CDK は npm を用いてインストールする。まずはこちらを参考に npm をインストールし、続けてこちらに従って CDK をインストールする。

npm インストールのために nvm をインストールする。

ターミナル
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

nvmを有効にする。

ターミナル
$ . ~/.nvm/nvm.sh

nvmnpm をインストールする。

ターミナル
$ nvm install node

npm で CDK をインストールする。

ターミナル
$ npm install -g aws-cdk

CDK のバージョンが正しく確認できれば正常にインストールされている。

ターミナル
$ cdk --version
1.94.1 (build 60d8f91)

STEP4: AWS シークレットキーの取得・登録

AWS CLI や AWS CDK を用いてアプリ開発に取り組む場合、ユーザー認証にシークレットキーが必要である。こちらに従ってシークレットキーを取得しよう。

まずユーザー名を指定し、「アクセスの種類」で「プログラムによるアクセス」にチェックを入れる。

次に「アクセス許可の設定」で「既存のポリシーを直接アタッチ」を選択し、「ポリシー名」で「AdministratorAccess」にチェックを入れる。

その他の設定は行わず「確認」ボタンを押すとアクセスキー ID および「シークレットアクセスキー」が得られる。このページから移動するとアクセスキーは二度と得られなくなるため .csv でダウンロードして保存しておこう。

AWS CLI を用いてシークレットキーを登録しよう。aws configure というコマンドで登録できる。ちなみにアクセスキーおよびシークレットキーを公開すると不正利用される可能性がある。十分に注意すること。

ターミナル
$ aws configure
AWS Access Key ID [None]: アクセスキーID
AWS Secret Access Key [None]: シークレットアクセスキー
Default region name [None]: ap-northeast-1
Default output format [None]: json

ここで登録した内容は .aws/config および .aws/credentials に書き込まれる。先ほど SSH 接続した VSCode で確認してみるとよい。

configure の内容は環境変数にも代入しておく。以下の内容は ~/.bash_profile に書きこおくと毎回代入しなくても済むようになる。同様に VSCode で編集してもよいだろう。

ターミナル
$ export AWS_ACCESS_KEY_ID=アクセスキーID
$ export AWS_SECRET_ACCESS_KEY=シークレットアクセスキー
$ export AWS_DEFAULT_REGION=ap-northeast-1

シークレットキーの取得・登録を行わずに AWS CDK を利用しようとすると以下のエラーが表示されるため注意。

ターミナル
Unable to resolve AWS account to use. It must be either configured when you define your CDK or through the environment

STEP5: ソースコードのダウンロード

AWS CDK を用いて Linux 仮想サーバーを構築する際に必要なソースコードをダウンロードする。今回は東京大学計数工学科で2020年度S1/S2タームに開講された"システム情報工学特論" の Hands-on を参考に取り組む。git をインストールし、続けてソースコードをダウンロードしよう。

ターミナル
$ sudo yum install git
$ git clone https://gitlab.com/tomomano/intro-aws.git

これを実行するとソースコードや講義資料を含む intro-aws/ が得られる。フォルダの中身を VSCode で確認しておこう。今回は intro-aws/handson/01-ec2 で作業を行う。

STEP6: EC2 インスタンスの起動

こちらを参考に EC2 インスタンスを起動する。
まずは Python3 をインストールし、venv で仮想環境を構築する。

ターミナル
$ cd intro-aws/handson/01-ec2
$ sudo yum install python3 -y
$ python3 -m venv .env
$ source .env/bin/activate
$ pip install -r requirements.txt

次に AWS CLI を用いてキーペアを作成する。前回は EC2 ダッシュボードの GUI で作成したが、このようにコマンドでも実行できる。KEY_NAMEは自由に設定してよい。

ターミナル
$ export KEY_NAME="HirakeGoma"
$ aws ec2 create-key-pair --key-name ${KEY_NAME} --query 'KeyMaterial' --output text > ${KEY_NAME}.pem
$ mv HirakeGoma.pem ~/.ssh/
$ chmod 400 ~/.ssh/HirakeGoma.pem

CDK で仮想サーバーをデブロイし、SSH 接続する。
以下のように表示されればインスタンス起動が成功している。

ターミナル
$ cdk deploy -c key_name="HirakeGoma"
$ ssh -i ~/.ssh/HirakeGoma.pem [email protected]

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/

今回開発したアプリの概要は講義資料を参考にしてください。

参考