AWS Cloud9 EC2環境内のコンポーネントを確認する
環境タイプでEC2
を選択した場合、JavaScript、Python、PHP などの一般的なプログラム言語に不可欠なツールがあらかじめパッケージ化されています。
2018年9月時点で、以下のコンポーネントがインストールされています。
コンポーネント | バージョン | バージョン確認 |
---|---|---|
Apache HTTP サーバ | 2.4 | $ httpd -v |
AWS CLI | 1.14.9 | $ aws --version |
AWS SAM Local | 0.2.11 | $ sam --version |
CoffeeScript | 2.3.1 | $ coffee -v |
Docker | 18.03.1-ce | $ docker version |
GCC、G++ | 4.8.5 | $ gcc --version |
GDB | 7.6.1 | $ gdb --version |
Git | 2.14.4 | $ git --version |
GNU libc | 2.17 | $ yum list installed | grep glibc |
Go | 1.9.1 | $ go version |
MySQL | 14.14 | $ mysql --version |
PHP対応MySQLネイティブドライバ | 5.0.11 | $ php -i | grep mysqlnd |
Node.js | 6.14.3 | $ node -v |
ノードパッケージマネージャ (npm) | 3.10.10 | $ npm -v |
ノードバージョンマネージャ (nvm) | 0.31.7 | $ nvm --version |
Perl | 5.16.3 | $ perl -v |
PHP | 5.6.36 | $ php -v |
Pylint | 1.8.1 | $ pyplint --version |
Python | 2.7.14 | $ python2 -V |
Python | 3.6.5 | $ python3 -V |
Ruby on Rails | 5.2.0 | $ rails -v |
Ruby | 2.4.1 | $ ruby --version |
virtualenv | 16.0.0 | $ virtualenv --version |
Amazon Linux AMI 2018.03 パッケージ |
参考
AWS Cloud9 EC2環境を構築する
AWS Cloud9 は、ブラウザのみでどのマシンからでもコードを記述、実行、デバッグできる、クラウドベースの統合開発環境 (IDE) です。
とはいえ、何でもできるわけではありません。
基本はサーバーサイド向けです。
特にサーバーレスアプリケーション(Lambda)の作成、実行、デバッグが簡単になります。
サポートしているリージョン
AWS Cloud9がサポートしているリージョンは以下の5ヶ所です。
- 米国東部 (バージニア北部)
- 米国東部 (オハイオ)
- 米国西部 (オレゴン)
- アジアパシフィック (シンガポール)
- EU (アイルランド)
東京
リージョンはありませんが、Cloud9の設定画面で、Lambdaリソースのリージョンを変更できます。
日本から接続する場合は、レイテンシが小さいシンガポール
リージョンがおすすめです。
環境作成
それでは、さっそく環境構築してみましょう。
サービス [開発者用ツール] - [Cloud9] を選択して、[Create environment]ボタンをクリックします。
環境名
環境名
と説明
を入力して、[Next step]ボタンをクリックします。
環境名
と説明
は、ダッシュボード(Your environments)画面の[Edit]ボタンから、いつでも変更できます。
環境設定
今回はデフォルトのまま[Next step]ボタンをクリックします。
- 環境タイプ(Environment type)
- 用意されたEC2インスタンスを起動するか
- SSHで自分で用意したサーバーを指定するか
- 後から変更不可能
- インスタンスタイプ(Instance type)
- 環境タイプに
EC2
を選択した時のインスタンスのタイプ - デフォルトは
t2.micro
- インスタンス停止中に [コンピューティング] - [EC2] - [インスタンス] から変更可能
- [インスタンスの設定] - [インスタンスタイプの変更]
- 環境タイプに
- コスト削減のセットアップ(Cost-saving setting)
- すべてのウェブブラウザインスタンスが閉じられてからEC2インスタンスがシャットダウンするまでの時間
- デフォルトは
30分後
- シャットダウンしない場合はNeverを選択
- Cloud9の設定画面から変更可能
- [Project Settings] - [EC2 Instance] - [Stop my environment]
確認
問題がなければ[Create environment]ボタンをクリックします。
数分で起動します。
起動画面
起動直後の画面です。
IDE チュートリアル
メニューバー
表示/非表示
メニューバーの左端の矢印▲
を選択して非表示、中央の矢印▼
で表示ができます。
ダッシュボード画面の遷移
[AWS Cloud9] - [Go To Your Dashboard]でダッシュボード(Your environments)画面に遷移できます。
ダッシュボード画面
プロセスリスト
[Tools] - [Process List] でプロセスリストを表示できます。
プロセスの停止、強制終了ができます。
環境ウィンドウ
環境ウィンドウには、フォルダとファイルが表示されます。
隠しファイルを表示するには、環境ウィンドウにある歯車アイコン
を選択して、 [Show Hidden Files] 項目をチェックします。
隠しファイルが表示されます。
非表示にするには、再度 [Show Hidden Files] 項目をチェックします。
ターミナル
ターミナルウィンドウからEC2インスタンスに対して、各種コマンドを実行できます。
$ cat /etc/system-release Amazon Linux AMI release 2018.03 $ uname -srv Linux 4.14.62-65.117.amzn1.x86_64 #1 SMP Fri Aug 10 20:03:52 UTC 2018
AWS-CLIやgitも既にイントールされています。
$ aws --version aws-cli/1.14.9 Python/2.7.14 Linux/4.14.62-65.117.amzn1.x86_64 botocore/1.8.13 $ git --version git version 2.14.4
インストール済みのパッケージをアップデートします。
$ sudo yum -y update
右上のサイズ変更アイコンを選択すると、ターミナルを全画面表示にすることができます。
再度選択すると、元のサイズに戻ります。
参考
- AWSドキュメント
Bitbucket上のリポジトリをAWS CodeCommit上へ移行する
普段、趣味で書くコードはBitbucket
を利用しています。
5ユーザーまでの制限はあるけれど、プライベートリポジトリを無料で利用できるのは嬉しいですね。
AWS CodeCommit にも無料枠があります。 これは期間限定ではなく常に無料です。
- 無制限のリポジトリ
- 5人のアクティブユーザー/ 月
- 50 GB のストレージ/月
- 10,000 回の Git リクエスト/月
個人で利用するには十分ではないでしょうか。
今回はこのBitbucket上のリポジトリをAWS CodeCommit上に移行します。
- AWS CodeCommitリポジトリを作成
- Bitbucketリポジトリをクローン
- AWS CodeCommitリポジトリにプッシュ
AWS CodeCommitの準備は、前回のエントリを参考にしてください。
1. AWS CodeCommitリポジトリを作成
まずはリポジトリを作成します。
マネジメントコンソールの場合
- サービス [開発者用ツール] - [CodeCommit] を選択
- リポジトリを作成するリージョンを選択(CodeCommitはリージョン単位のサービスです)
- [リポジトリの作成]ボタンをクリック(はじめての場合は[今すぐ始める]ボタンをクリック)
[リポジトリの作成]ボタンをクリックします。
[スキップ]ボタンをクリックします。([設定] - [通知] からいつでも設定できます)
AWS-CLI の場合
作成
$ aws codecommit create-repository --repository-name MyRepository --repository-description "私のリポジトリ" { "repositoryMetadata": { "cloneUrlSsh": "ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/MyRepository", "repositoryId": "a95590a1-9d4f-4e09-b562-1234567890ab", "repositoryDescription": "私のリポジトリ", "lastModifiedDate": 1536095543.38, "repositoryName": "MyRepository", "accountId": "123456789012", "cloneUrlHttp": "https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/MyRepository", "creationDate": 1536095543.38, "Arn": "arn:aws:codecommit:ap-northeast-1:123456789012:MyRepository" } }
削除(参考)
$ aws codecommit delete-repository --repository-name MyRepository { "repositoryId": "a95590a1-9d4f-4e09-b562-1234567890ab" }
2. Bitbucketリポジトリをクローン
gitコマンドを利用して、Bitbucketリポジトリをローカル上にクローンします。
SSHの場合
$ git clone --mirror git@bitbucket.org:<account_name>/<repo_name>.git <ローカルリポジトリ名>
HTTPSの場合
git clone --mirror https://<username>@bitbucket.org/<account_name>/<repo_name>.git <ローカルリポジトリ名>
3. AWS CodeCommitリポジトリにプッシュ
クローンを作成したディレクトリに移動してgitコマンドでプッシュします。
$ cd <ローカルリポジトリ名> $ git push ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/<AWS CodeCommitリポジトリ名> --all
上の例では、東京リージョンap-northeast-1
になっています。
各リージョンのエンドポイントURLは、AWS CodeCommit のリージョンと Git 接続エンドポイントを参照してください。
Counting objects: 354, done. Delta compression using up to 4 threads. Compressing objects: 100% (146/146), done. Writing objects: 100% (354/354), 306.89 KiB | 38.36 MiB/s, done. Total 354 (delta 203), reused 354 (delta 203) To ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/OrenoRepository * [new branch] develop -> develop * [new branch] master -> master
Compressing objects: 100% (完了件数/全体件数), done.
と表示されていれば移行完了です。
AWS CodeCommit UIの確認
AWS CodeCommit ダッシュボードから作成したリポジトリを選択します。
シンプル過ぎて逆に清々しさを感じるUI。
そこにはかわいいタコ猫
やキモい狸
はいませんでした。
参考
AWS CodeCommitリポジトリにSSH接続するための前準備
Code兄弟。
ちょっとずつ試してみたいと思います。
まずはバージョン管理サービスの CodeCommit から。
AWS CodeCommitに対する認証とアクセスコントロール
AWS CodeCommitはバージョン管理サービスです。
GitHubやBitbucketと同様に、リポジトリへのアクセスに認証情報が必要です。
CodeCommitでは、認証と権限にIAMユーザーを利用できます。
もちろん、SSH接続にも対応しています。 CodeCommitでは、IAMユーザーに対して、SSH公開鍵を紐づけることができます。
SSHキーの作成
まずはSSHキーを作成します。
ssh-keygen
コマンドを使用してSSHキーを作成します。
$ cd ~/.ssh/ $ ssh-keygen -t rsa -b 4096 -f codecommit Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in codecommit. Your public key has been saved in codecommit.pub. The key fingerprint is: SHA256:******************************************* user-name@client-name The key's randomart image is: +---[RSA 4096]----+ | E.+.o*.++| | .o .=.=o.| | . .. *. +| | ..o . +..| | So . . . | | . | | | | | | | +----[SHA256]-----+
ファイルが2つ作成されます。
- 秘密鍵: codecommit
- 公開鍵: codecommit.pub
IAMユーザーの作成
IAMユーザーを作成し、先程作成した公開鍵のSSHキーを紐付けします。
サービス [セキュリティ、 アイデンティティ、 コンプライアンス] - [IAM] を選択します。 ナビゲーションペインの[ユーザー]を選択して[ユーザーを追加]ボタンをクリックします。
ユーザーを追加
ユーザー名とパスワードを入力して、[次のステップ: アクセス権限]ボタンをクリックします。
[既存のポリシーを直接アタッチ]ボタンを選択して、ポリシーのフィルタにAWSCodeCommit
を入力して絞り込みます。
- AWSCodeCommitFullAcces
- 管理者用
- AWSCodeCommitPowerUser
- 一般ユーザー用(リポジトリの削除不可)
- AWSCodeCommitReadOnly
- 参照ユーザー用
ユーザーに適切なポリシーを選択します。
ここではAWSCodeCommitFullAccess
ポリシーを選択します。
[次のステップ: 確認]ボタンをクリックします。
確認画面で[ユーザーの作成]ボタンをクリックして、ユーザーを作成します。
SSHキーの紐付け
作成した[ユーザー名]リンクをクリックします。
[認証情報]タブを選択して、[SSH 公開キーのアップロード]ボタンをクリックします。
先程作成したSSHキーの公開鍵(*.pub)の中身をコピーして貼り付けます。
[SSH 公開キーのアップロード]ボタンをクリックします。
SSHキーID
が表示されるので、これをコピーしておきます。
SSH設定ファイルに追記
.ssh/configファイルに下記を追加します。configファイルがない場合は新規作成してください。
# CodeCommit Host git-codecommit.*.amazonaws.com USER APKA**************** IdentityFile ~/.ssh/codecommit
- Host: AWS CodeCommitのGit接続エンドポイント(*で全リージョン対応)
- USER: コピーしたSSHキーID
- IdentityFile: 作成したSSHキーの秘密鍵
最後に、設定ファイルのアクセス権を変更します。
$ chmod 600 config
これで準備が整いました。
SSH接続確認
設定が正しいか、SSHコマンドで確認します。
$ ssh git-codecommit.us-east-2.amazonaws.com You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.us-east-2.amazonaws.com closed by remote host. Connection to git-codecommit.us-east-2.amazonaws.com closed.
You have successfully authenticated over SSH
と表示されればOKです。
参考
Fitbit APIをcurlで叩いてみた
Fitbitしていますか?
Fitbitとは腕につけて、歩数や心拍数、登った階数、カロリーなどを計測してくれるリスバンドタイプの活動量計です。
自分は普段からFitbitを身に着けています。
とにかくよく歩きます。
アイデアを整理しながら歩いたり、たまに無になって歩いたり。。
記録を見ると、シベリア鉄道の全長を超えていました。
目指せ、世界一周ですね。
このFitbitはWeb APIが公開されており、自分のデータを取得することができます。
早速試してみましょう。
アプリケーションの登録
その前にアプリケーションを登録する必要があります。
https://dev.fitbit.com/apps/new
試すだけなので、URLはローカルホストにします。
項目 | 値 |
---|---|
Application Name | 任意 |
Description | 10文字以上 |
Application Website | http://localhost |
Organization | 任意 |
Organization Website | http://localhost |
Terms Of Service Url | http://localhost |
Privacy Policy Url | http://localhost |
OAuth 2.0 Application Type | Personal |
Callback URL | http://127.0.0.1:8080 |
Default Access Type | Read-Only |
登録後、[OAuth 2.0 tutorial page]リンクをクリックします。
OAuth 2.0 チュートリアルページ
このチュートリアルページで、アクセストークンとリフレッシュトークン、およびFitbit API用のcurlコマンドを取得できます。
- Flow type を
Authorization Code Flow
に選択します。 - リンクをクリックします。
アクセス許可を求める画面が表示されるので、すべて許可する
を選択して[許可]ボタンをクリックします。
Callback URLをローカルホストに設定しているため、サーバーに接続できずエラー画面が表示されます。
アドレスバー URL内にある40桁のコード値
をクリップボードにコピーします。
末尾の#_=_
は不要です。
http://127.0.0.1:8080/?code=0123456789012345678901234567890123456789#_=_
コピーしたコード値
を、下図のCodeテキストボックス(1番)にペーストします。
トークン取得用のcurlコマンド
が表示(2番)されます。
このトークン取得用のcurlコマンド
をコピーします。
コピーしたトークン取得用のcurlコマンド
をローカルのターミナル上にペーストしてcurlを叩きます。
$ curl -X POST -i -H 'Authorization: Basic **********' -H 'Content-Type: application/x-www-form-urlencoded' -d "clientId=******" -d "grant_type=authorization_code" -d "redirect_uri=http%3A%2F%2F127.0.0.1%3A8080" -d "code=**********" https://api.fitbit.com/oauth2/token HTTP/2 200 date: Mon, 03 Sep 2018 20:26:42 GMT content-type: application/json;charset=UTF-8 vary: Origin,Accept-Encoding cache-control: no-cache, private content-language: ja-JP x-frame-options: SAMEORIGIN expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" server: cloudflare cf-ray: 4518f4ac8f3e94d5-NRT {"access_token":"**********","expires_in":28800,"refresh_token":"**********","scope":"nutrition heartrate social activity profile sleep weight settings location","token_type":"Bearer","user_id":"******"}
HTTPステータスコード 200が返ってきていたら成功です。
レスポンスボディのJSON結果
をコピーします。
テキストエリア(3番)にJSON結果
をペーストします。
アクセストークンとリフレッシュトークンが表示(4番)され、プロフィール取得用のcurlコマンド
が表示(5番)されます。
curl -i -H "Authorization: Bearer **********.**********" https://api.fitbit.com/1/user/-/profile.json
curlを叩くとプロフィールが取得されます。
URL中の -
はカレントユーザーを意味します。
このURLのprofile
箇所を変更してcurlを叩くと、各種データを取得できます。
アクセストークンとリフレッシュトークンはプログラムからOAuth2.0認証を利用する場合に利用できます。
URLエンドポイント
いくつかのエンドポイントを見てみましょう。
エンドポイント | 説明 |
---|---|
activities/today | 今日のアクティビティを取得 |
activities/steps/date/2018-09-03/1d | 指定した日の歩数を取得 |
activities/steps/date/today/1m | 1ヶ月分の歩数を取得 |
activities/heart/date/today/1d | 今日の心拍数を取得 |
activities/heart/date/today/7d | 1週間分の心拍数を取得 |
sleep/date/today | 今日の睡眠データを取得 |
sleep/date/2018-09-01 | 指定した日付の睡眠データを取得 |
sleep/date/2018-08-01/2018-08-31 | 期間を指定して睡眠データを取得 |
他にも様々なコマンドやオプションがあります。
詳しい使い方は Web API Reference を参考にしてください。
サンプル
サンプルとして、昨日の歩数を取得してみます。
curl -H "Authorization: Bearer **********.**********" https://api.fitbit.com/1/user/-/activities/steps/date/2018-09-03/1d.json | jq .
そのままだとJSONが見づらいので、jq をパイプ連結して、結果を整形しています。
Macユーザーなら、更にパイプ連結でpbcopy
を追加すると、クリップボードに直接コピーできます。
{ "activities-steps": [ { "dateTime": "2018-09-03", "value": "11758" } ], "activities-steps-intraday": { "dataset": [ { "time": "00:00:00", "value": 0 }, 略 { "time": "08:00:00", "value": 25 }, { "time": "08:01:00", "value": 32 }, { "time": "08:02:00", "value": 16 }, 略 { "time": "23:59:00", "value": 0 } ], "datasetInterval": 1, "datasetType": "minute" } }
無事出力されました。
昨日は 11,758歩。平日なのでまずまずです。
参考
AWS認定DevOpsエンジニア-プロフェッショナルに合格しました
本日、AWS認定資格 DevOpsエンジニア-プロフェッショナル
に合格しました。
今年の2月にAWS認定資格を取ろうと決心。コツコツと1個ずつ取得していきました。
(資格もアウトプットですね)
- AWS認定 ソリューションアーキテクト – アソシエイト (03/22)
- AWS認定 SysOps アドミニストレーター – アソシエイト (04/24)
- AWS認定 デベロッパー – アソシエイト (05/10)
- AWS認定 ソリューションアーキテクト – プロフェッショナル (06/30)
- AWS認定 DevOps エンジニア – プロフェッショナル (8/30)
これで5冠達成です。
自分はソフトウェア開発者なので、今回の DevOpsエンジニア – プロフェッショナル
が、やはり1番嬉しいです。
資格を取得してよかったこと
資格を取得する過程で、体系的に勉強できたことが一番です。
例えば、IAMのロールやポリシー、Security Token Service(STS)に関して。
Amazon Cognitoの認証の仕組みがイマイチわからなかったのですが、STSを理解すれば仕組みが理解できます。
つらかったこと
本試験、模擬試験、全て実費だったので金銭的につらかったです。。。
妻にはAmazon
で何か買ったと思われていますし。
ここからがスタートライン
認定資格を受けて感じたことは、少し古臭いと感じたことです。
当たり前ですが、クラウドは日々進化しています。
出来なかったことが出来るようになったり、新しいサービスが出てクラウドパターンが通用しなくなったり。
資格を取得したから終わり、ではありません。
AWS関連のニュースを日々キャッチアップして、知識をアップデートしていく必要があります。
そういった意味で、ここからがスタートラインです。
これからやりたいこと
サーバーレスアーキテクチャに興味があります。
また、以下のサービスが気になるので、ちょっとずつ勉強していこうかと思います。
- Amazon API Gateway
- AWS AppSync
- Amazon EKS
- Code兄弟
- AWS Cloud9
Elastic BeanstalkのサンプルアプリでBlue/Greenデプロイを試す
Elastic Beanstalkにはデプロイ方式がいくつかあります。
今回は、ダウンタイム無しのURL Swap
による環境の切り替えを試してみます。
サンプルアプリ
サンプルアプリは、Amazon Elastic Beanstalk を使用したアプリケーションの起動 で利用しているPHPアプリを利用します。
公式サイトから http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/samples/php-v1.zip をダウンロードします。
ファイル構成
解凍してファイルの中身を確認します。
$ unzip php-v1.zip -d php-v1 $ tree -a php-v1 php-v1 ├── .ebextensions │ └── logging.config ├── cron.yaml ├── index.php ├── logo_aws_reduced.gif ├── scheduled.php └── styles.css
設定ファイル用の .ebextensions
という隠しフォルダがあります。アップロードする時は含める必要があるので注意しましょう。
1つめの環境作成
サービス [コンピューティング] - [Elastic Beanstalk] を選択。 [新しいアプリケーションの作成]ボタン をクリックします。
アプリケーションの作成
アプリケーション名を入力して、[作成]ボタンをクリックします。
環境の作成
[アクション]-[環境の作成]をクリックします。
環境枠の選択でウェブサーバー環境
を選択します。
必要な項目を入力して、[環境の作成]ボタンをクリックします。
- ドメイン:ユニークな環境URLを割り当てます
- コードのアップロード:ダウンロードした
php-v1.zip
をそのままアップロードします
ヘルスがOK
になるまで待機します。
URLを開いて、サンプルアプリが表示されることを確認します。
これで1つめの環境が出来ました。
2つめの環境作成
サンプルアプリの改修
ダウンロードしたサンプルアプリを少し変更します。
styles.css
section.instructions { display: block; padding: 50px; text-align: left; background-color: #0f0; /*変更*/ position: absolute; top: 0; left: 50%; right: 0; bottom: 0; }
背景色を白から緑に変更しました。
index.php ファイルのあるディレクトリでファイルを圧縮します。
$ zip php-v2.zip -r .e* *
この時、隠しフォルダ.ebextensions
を含めるようにします。含めないとエラーになります。
※Windowsの人はアプリケーションを更新するを参考にしてください。
環境のクローン作成
作成した環境をコピーして、改修したサンプルアプリをデプロイします。
[アクション]-[環境のクローン作成]メニューを選択します。
ユニークな環境URLを割り当て、[クローン]ボタンをクリックします。
[アップロードとデプロイ]ボタンから、改修したサンプルアプリをアップロードし、[デプロイ]ボタンをクリックします。
URLを開いて、背景色が緑色になっていることを確認します。
これで2つめの環境が出来ました。
環境URLのスワップ
2つの環境のDNSレコードのCNAMEを切り替えます。
[アクション]-[環境URLのスワップ]メニューを選択します。
スワップする環境を選択して、[スワップ]ボタンをクリックします。
環境 | スワップ前 | スワップ後 |
---|---|---|
1つめ | aaa.xxx.elasticbeanstalk.com | bbb.xxx.elasticbeanstalk.com |
2つめ | bbb.xxx.elasticbeanstalk.com | aaa.xxx.elasticbeanstalk.com |
1つめの環境のURLを開いた時に、背景色が緑色になっていることを確認します。
アプリに問題があれば、スワップして元に戻すだけです。
素晴らしいですね!
まとめ
Elastic Beanstalkを使うと、簡単にデプロイが出来て、簡単にダウンタイム無しにアプリを切り替えることが出来ます。
デプロイについては、冒頭の資料 AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalkと、下記のブログを一読することをおすすめします。 どちらもよくまとまっています。
参考
- AWSドキュメント
- 10分間チュートリアル
- AWS Black Belt