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
nvm
で npm
をインストールする。
$ 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/
今回開発したアプリの概要は講義資料を参考にしてください。
参考
Author And Source
この問題について(AWS CDK を用いた Linux 仮想サーバーの構築), 我々は、より多くの情報をここで見つけました https://qiita.com/keisuke-ota/items/c4fda71a9457db078112著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .