docker-compose.ymlで構築されたプロジェクトをECRにpushする & ECSで公開する
はじめに
この記事は、私がDocker Compose CLIを利用して、ECSでプロジェクトを実行するまでの手順をメモしたものです。
使用するプロジェクトは、以下のサンプルを利用しています。
前提
- AWSアカウントがあること
- IAMユーザーが作成されていること
AWS CLIをインストールする
AWS CLIの設定をする
ECRでリポジトリを作成する
サンプルをclone & docker-compose.ymlを書き換え
$ git clone https://github.com/docker/ecs-plugin.git $ cd ecs-plugin/example/
imageを書き換えます。ECRの「プッシュコマンドの表示」から書き換えるタグ名を確認します。
version: "3.8" services: frontend: build: app # ↓削除 # x-aws-pull_credentials: <<<your arn for your secret you can get with docker ecs secret list>>> # ↓書き換え # image: <<<your docker hub user name>>>/timestamper image: 1111111111.dkr.ecr.ap-northeast-1.amazonaws.com/example:latest ports: - "5000:5000" depends_on: - backend backend: image: redis:alpine
ローカルで確認する
$ docker-compose up
localhost:5000 にアクセスするとサンプルのサイトが見れます。
ECRレジストリに対し、Dockerクライアントを認証する
再度「プッシュコマンドの表示」をクリックし、
exmapleリポジトリにイメージをpushする
$ docker-compose push
ECRのexmapleリポジトリにイメージがpushされていることが確認できます。
AWS用のコンテキストを作成 & 切り替え
今回は aws という名前にしました。
$ docker context create ecs aws
コンテキストが作成されているか確認し、
$ docker context list
'aws' に切り替えます。
$ docker context use aws
ECSへデプロイ
Docker Compose コマンド一覧はこちらに記載されています。
※自分の環境では5分程度かかりました
$ docker compose up
コンテナの一覧を表示します。
$ docker compose ps
PORTSに表示されているURLからサイトを確認することができます。
コンテナとネットワークの停止 & 削除
※こちらも数分かかります
$ docker compose down
参考サイト
以下の記事を参考にさせていただきました。
curlコマンドでnoteからデータを取得してみる
はじめに
使い方を公式で説明しているわけではないが、noteにはAPIがあるみたい。
curlコマンドの使い方を学ぶついでに、noteに投稿されている記事のタイトルを取得してみる。
curlコマンドとjqコマンド
$ curl --version curl 7.64.1
$ jq --version jq-1.6
2020/12/17当時
curlコマンドでnoteの、特定ユーザの記事タイトルを取得してみる
$ curl https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1
?と&をエスケープするため、\を入れている。
{"data":{"contents":[{"id":24798670,"type":"TextNote","status":"published","name":"テストタイトル2","description":null,"price":0,"key":"n4551d7093a0b","slug":"slug-n4551d7093a0b","publishAt":"2020/12/17 13:17","thumbnailExternalUrl":"","eyecatch":null,"user":{"id":3414203,"name":"こな","urlname":"kypowder","nickname":"こな","userProfileImagePath":"https://assets.st-note.com/production/uploads/images/31550000/profile_f1ad3c646727d3424b996812d90901f0.jpg?fit=bounds\u0026format=jpeg\u0026quality=45\u0026width=330","customDomain":null,"disableSupport":false,"likeAppealText":null,"likeAppealImage":null,"purchaseAppealTextNote":null,"twitterNickname":"YoKaU2"},"canRead":true,"isAuthor":false,......
見やすくするためにjq
コマンドをパイプでつなげる。
$ curl https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4473 0 4473 0 0 20612 0 --:--:-- --:--:-- --:--:-- 20612
↑ 最初の数行に表示される転送情報をスキップしたい場合、-s
オプションを追加する。
しかし、エラー情報まで消えてしまうので、-S
も追加しとく。
$ curl -Ss https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq
オブジェクトの部分抽出
$ curl -Ss https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq ".data"
data{
}
の中を抽出できた。
配列を抽出する場合、
$ curl -Ss https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq ".data | .contents"
とすることで
配列に対して、.xx
は適応できないので、.[]
を使う。
$ curl -Ss https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq ".data | .contents[]"
一番外側にある配列を除去してくれる。
.contents | .[]
としなくても.contents[]
で繋げられる。
".data.contents[]"
でもいける。
$ curl -Ss https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq ".data | .contents[] | .name"
オブジェクトになったので.xx
で指定することで、
投稿記事のタイトルのみを抽出できた。
これをさらに整形することもでき、
$ curl -Ss https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq "{title: [.data | .contents[].name]}"
とすることで、
いい感じに作り直すこともできる。