スキップしてメイン コンテンツに移動

Amazon EC2 Container Serviceを試してみた

という記事を@takipone会社ブログに書いてると思うので、僕は自分のブログに書いてみるのであった。と言ってもAmazon Web ServiceブログEC2 Container Service実践という記事をそのまま試しただけです。

ECS CLI Previewのセットアップ

AWS CLIのECS CLIはまだ Previewなので、AWS CLIの最新版をインストールしたとしても含まれていない。なのでECS Getting StartedのページからECS CLI Previewをダウンロードしてくる。

ダウンロードしたファイルを展開。
$ tar xvzf amazon-ecs-cli-preview.tar.gz
$ cd ./amazon-ecs-cli-preview
$ ls -alF
total 9824
drwxr-xr-x@ 7 smokeymonkey smokeymonkey 238 12 18 17:14 ./
drwxr-xr-x+ 13 smokeymonkey smokeymonkey 442 12 18 17:13 ../
-rw-r--r--@ 1 smokeymonkey smokeymonkey 53249 12 17 16:34 2014-11-13.api.json
drwxr-xr-x@ 12 smokeymonkey smokeymonkey 408 12 17 16:34 AWS CLI Documentation/
-rw-r--r--@ 1 smokeymonkey smokeymonkey 2237 12 17 16:34 README
drwxr-xr-x@ 4 smokeymonkey smokeymonkey 136 12 17 15:12 awscli-bundle/
-rw-r--r--@ 1 smokeymonkey smokeymonkey 4965740 12 17 16:34 ecs-cli.zip
ecs-cli.zipを展開してinstallスクリプトを動かす。
$ unzip ecs-cli.zip
$ cd awscli-bundle/
$ ls
install packages
$ sudo ./install
Running cmd: /usr/local/opt/python/bin/python2.7 virtualenv.py --python /usr/local/opt/python/bin/python2.7 /Users/smokeymonkey/.local/lib/aws
Running cmd: /Users/smokeymonkey/.local/lib/aws/bin/pip install --no-index --find-links file:///Users/smokeymonkey/Downloads/amazon-ecs-cli-preview/awscli-bundle/packages awscli-1.6.5.tar.gz
You can now run: /Users/smokeymonkey/.local/lib/aws/bin/aws --version
バージョンを確認すると、1.6.5になっている。
$ /Users/smokeymonkey/.local/lib/aws/bin/aws --version
aws-cli/1.6.5 Python/2.7.8 Darwin/14.0.0
こんな感じでecsオプションが使えることがわかる。
$ /Users/smokeymonkey/.local/lib/aws/bin/aws ecs help
ECS() ECS()

NAME
ecs -
このままだと使いづらいので、alias貼っておく。
$ alias aws='/Users/smokeymonkey/.local/lib/aws/bin/aws'
$ alias
alias aws='/Users/smokeymonkey/.local/lib/aws/bin/aws'
それと、現時点ではECSはus-east-1でしか動かないので、aws cliのconfigファイルを書き換えておく。
$ vi ~/.aws/config
[default]
region = us-east-1

ECSを試してみる

では本題。さくっとClusterを作成する。
$ aws ecs create-cluster --cluster-name MyCluster
{
"cluster": {
"clusterName": "MyCluster",
"status": "ACTIVE",
"clusterArn": "arn:aws:ecs:us-east-1:1234567890:cluster/MyCluster"
}
}
そして、ここが微妙だなと思ったんだけど、ECSのクラスタとなるEC2インスタンスは手動で立ち上げておく必要があるらしい。今回はマネージメントコンソールからLaunchした。実際はaws cliからやるのが正解だろうな。使ったAMIはECSクラスタ用の「amzn-ami-2014.09.1-amazon-ecs-optimized-preview2 - ami-34ddbe5c」。Launch時のUserDataに以下のようにいれておく。
#!/bin/bash
echo ECS_CLUSTER=MyCluster >> /etc/ecs/ecs.config
EC2が起動した後に以下のコマンドでクラスタインスタンスを確認すると、ちゃんとMyClusterに2つのEC2インスタンスが登録されていることがわかる。
$ aws ecs list-container-instances --cluster MyCluster
{
"containerInstanceArns": [
"arn:aws:ecs:us-east-1:1234567890:container-instance/30b8c142-151f-4708-bcc7-5f1407abea6b",
"arn:aws:ecs:us-east-1:1234567890:container-instance/a604212a-3682-413e-83c2-21fbdbe666d4"
]
}
describe-container-instancesでクラスタインスタンスの情報が取得できる。
$ aws ecs describe-container-instances --cluster MyCluster --container-instances arn:aws:ecs:us-east-1:1234567890:container-instance/30b8c142-151f-4708-bcc7-5f1407abea6b
{
"failures": [],
"containerInstances": [
{
"status": "ACTIVE",
"registeredResources": [
{
"integerValue": 1024,
"longValue": 0,
"type": "INTEGER",
"name": "CPU",
"doubleValue": 0.0
},
{
"integerValue": 996,
"longValue": 0,
"type": "INTEGER",
"name": "MEMORY",
"doubleValue": 0.0
},
...
さて、実際にコンテナを立ち上げてみる。コンテナを立ち上げる前に、コンテナにやらせることをタスクとして作る。以下はEC2のドキュメントにあるタスクの内容そのまんま。
$ vi task.json
[
{
"environment": [],
"name": "sleep",
"image": "busybox",
"cpu": 10,
"portMappings": [],
"entryPoint": [
"/bin/sh"
],
"memory": 10,
"command": [
"sleep",
"360"
],
"essential": true
}
]
で、作成したタスクファイルを指定してregister-task-definitionすることで、タスクが登録される。
$ aws ecs register-task-definition --family sleep360 --container-definitions file://./task.json
{
"taskDefinition": {
"taskDefinitionArn": "arn:aws:ecs:us-east-1:1234567890:task-definition/sleep360:1",
"containerDefinitions": [
{
"environment": [],
"name": "sleep",
"image": "busybox",
"cpu": 10,
"portMappings": [],
"entryPoint": [
"/bin/sh"
],
"memory": 10,
"command": [
"sleep",
"360"
],
"essential": true
}
],
"family": "sleep360",
"revision": 1
}
}
10個のコンテナでタスクを実行してみる。
$ aws ecs run-task --cluster MyCluster --task-definition sleep360:1 --count 10
{
"tasks": [
{
"taskArn": "arn:aws:ecs:us-east-1:1234567890:task/bba3df13-fa23-47f9-943f-c4d45b860708",
"overrides": {
"containerOverrides": [
{
"name": "sleep"
}
]
},
"lastStatus": "PENDING",
タスクが実行されているコンテナを一覧表示。
$ aws ecs list-tasks --cluster MyCluster
{
"taskArns": [
"arn:aws:ecs:us-east-1:1234567890:task/2e073f60-8d86-4405-9e1c-df4164a2aa67",
"arn:aws:ecs:us-east-1:1234567890:task/3334a759-15bd-4305-9f4e-aed66c211efd",
"arn:aws:ecs:us-east-1:1234567890:task/56552e1d-0b81-45fe-b109-e8baa6fc23b9",
"arn:aws:ecs:us-east-1:1234567890:task/b0e550e6-1fef-44b5-9def-8afecb93ffb4",
"arn:aws:ecs:us-east-1:1234567890:task/b1275e5a-f6f2-43ab-bf8b-289d9c3126ee",
"arn:aws:ecs:us-east-1:1234567890:task/bba3df13-fa23-47f9-943f-c4d45b860708",
"arn:aws:ecs:us-east-1:1234567890:task/bbf3caca-3272-4485-8b94-dc8fe677cb79",
"arn:aws:ecs:us-east-1:1234567890:task/d046b9ed-c299-4df5-b2fb-8a9baabad6d4",
"arn:aws:ecs:us-east-1:1234567890:task/d96df087-89f2-4f75-aa2f-db649a6ccbe5",
"arn:aws:ecs:us-east-1:1234567890:task/f061e120-f82d-4d7b-9824-f42aae5bb9b6"
]
}

感想

EC2インスタンスを別に立ち上げなきゃいけないの面倒臭いなと思ったんだけど、ECSとEC2の役割を明確に分離したってことなのかなぁ。外部にサービス展開するときはELBとの組み合わせもちゃんと考えなきゃいけなさそうだ。勉強のキモになるのはタスクの書き方で、Dockerfileを指定することもできるようなので、この切り口で勉強しようと思う。

このブログの人気の投稿

初めての給与交渉で意識するべき6つのポイント

本記事は、社会人となって1〜3年目くらいの方が、給与アップのためにどのように考え、どのようにアクションするべきなのかを、僕の経験を踏まえてまとめたものです。 背景として、僕が初めて働いたIT企業は、年棒制で給与交渉は各自が行うものであり、年次で成果レポートと希望する年収額を会社に提示し、それが査定されて翌年の年俸が確定する、という制度でした。なので僕自身は若い頃からずっと給与交渉をし続けています。 大前提:給与とは与えられるものではなく勝ち取るものである 給与は勝手に上がるものではありません。自分の努力や成果を誰か(=会社や上長)が適切に判断し公平に給与を払ってくれる、なんてことはありません。何故なら多くの仕事は定量的なだけでは評価できず、そこに定性的な判断を必要とするからです。そして人間に公平で完璧な意思決定を求めるのはそもそも無理です。人間は感情的で、多くのバイアスを持ち、その時々のコンディションで常に意思決定が歪みます。だからこそ、定性的な評価に関する成果は、被評価者自身が自らアピールしないと評価者に正しく伝わりません(ただしアピールしたところで正しく伝わらないこともあります) もちろん定量的なだけで評価できる仕事は世の中にはあるし、その場合は給与はその成果に比例して決まり、人間の判断は必要としません。でもそうではない、定性的な評価が含まれる仕事をしているのであれば、自ら自分が何をし、どのような成果を出したのかを、きちんと会社に伝え、その分の給与を要求する、というアクションが必要になります。 大前提:給与は会社が儲かっていないと上がらない これもまぁ当たり前ですよね。会社は利益が出てるから社員に投資できる=社員の給与を上げられるわけで、利益が出てなかったらその個人がどんなに頑張ったところで給与は上がりません。何故なら給与を上げるための原資が無いからです。 だから、利益が無い会社に所属しているのであれば、給与交渉はそもそも無駄です。だって交渉しても上がるわけないし。その場合は、給与アップが必須なのであれば転職を検討するしかないし、給与アップしなくてもメリットがあるのであればその会社に在籍し続ける、という選択が必要になります。 目標と現状のギャップを把握する 具体的な希望も無く「給与上げてください」と言うのは給与交渉ではありません。これだと会社もどのくらい上げてほ

努力できること自体が才能なので、努力しただけで褒められるべき

発明王トーマス・エジソンの名言としてよく知られる「天才とは1%のひらめきと99%の努力である」という言葉があります。実際の意図は「1%のひらめきがなければ、99%の努力は無駄になる」であったとも 言われています が、まぁどちらにせよ、ひらめきだけでは成功することはできず、そこには必ず努力も必要となります。 漫画「はじめの一歩」において主人公の師匠である鴨川会長は「努力した者が全て報われるとは限らん。しかし、成功した者は皆すべからく努力しておる」と言っていました。ここにも、成功において努力は必要不可欠であるとの強いメッセージがあります。 しかし、実際には誰もが努力できるわけではありません。 努力できること自体が才能 なのだと思います。 努力をしないことが問題だと言うつもりはありませんし、努力をしないという選択肢を選ぶことは個人の自由だと思います。必ずしも成功が万人の幸せなわけではないし、成功しなくても得られる生活によって満足する人だっています。 僕が言いたいのは「そもそも努力できない人がいる」という事実です。こういう方は選択の余地が無く、何かにおいて1位になったり、一流になったり、勝利したり、成功したりすることは難しくなります。それらには必ず努力が必要になるからであり、そして努力ができない、努力をする才能が無いからです。 これには実験の裏付けがあります。詳しくは10年前の WIREDの記事 に書かれていますが、ざっくり言うと、脳内の一部(左線条体と前頭前皮質腹内側部)におけるドーパミン作動性活性が高いと努力ができる、違う一部( 島皮質)の ドーパミン作動性活性が高いと努力できない、という実験結果があります。そもそも脳の作りや働きによって努力ができる人とできない人がいる、ということです。 繰り返しになりますが、僕は努力しない人が悪いとも思っていないし、責めるつもりもありません。僕が言いたいのは以下の2点です。 (1)努力できること自体が才能であり、その才能が無い人はそもそも努力ができないので 、努力できないことを責めてはいけない。 それは本人の特性であり個性だから。 (2)努力できること自体がすごいことなので、努力した結果が成功に結びつかなかったとしても、責めてはいけない。 努力しただけで褒められてよい。 人にはそれぞれ適材適所があるので、めちゃくちゃ努力する人は努力が

40代の減量戦略 〜体重-14kg、体脂肪率-12%を実現した具体的な方法〜

コロナ禍はもちろん辛い時期ではあったけど、生活習慣が良い方へ大きく変わた時期でもあった。具体的には食生活がほぼ自炊になり、酒量が減り、ジム通いを再開し、マラソン大会にも定期的に参加した。そんな中で一念発起し、きちんと減量に取り組んで、体重75kg→61kg(-14kg)、体脂肪率25%→13%(-12%)を実現した。 具体的な体重遷移は以下。2020年12月がMAXの75kg、その後減量とリバウンドを繰り返しつつ70kg前後を推移、2022年後半で一気に落とし、2023年1月30日時点で61kgとなった。 そこで、その具体的な方法をお伝えしたい。減量とは3つの要素の組み合わせだ。 食事 運動 休養 この順番はそのまま優先順位でもある。それぞれについて以下に説明する。 0.プロにアドバイスをもらう 3つの要素と言ったがあれは嘘だ。すまない。もっと重要なことがある。それはプロにアドバイスをもらうことだ。 WHO NOT HOWという本がある。 WHO NOT HOW 「どうやるか」ではなく「誰とやるか」  posted with AmaQuick at 2023.01.21 ディスカヴァー・トゥエンティワン (2022-05-27T00:00:01Z) ダン・サリヴァン(著), ベンジャミン・ハーディ(著), 森由 美子(翻訳) Amazon.co.jpで詳細を見る 要約すると、起業家や経営者がやるべきことはビジネスを成功させることだけれど、人は皆スーパーマンではなく、得意なことと不得意なことがあるんだから、得意なことは得意な人に一任することが大事なんだよ、という内容の本。 これは減量についても同じ。本を読んだりYoutubeで動画を見て、実際に減量出来たのであればそれはそれで構わないし、そういう人はこのブログ投稿を読まないだろう。 自分で学んで、自分でチャレンジして、それでも減量出来ないのであれば、素直に投資してプロのアドバイスをもらったほうが効率が良い。具体的にはパーソナルトレーナーだ。パーソナルトレーナーは運動生理学やスポーツ栄養学などについて学び実践してきた人