Check! Amazon EC2 Container Service で Docker を学びたい！(準備編)

こんにちは、[cloudpack][] の @dz_ こと[大平かづみ][]です。

Prologue - はじめに
===============================================
[Docker][] を使ってみたい。そうだ、[Amazon EC2 Container Service][] の Preview 申請が通ったじゃない！☆

Amazon EC2 Container Service 要点・まとめ
===============================================
ということで、Amazon EC2 Container Service (Amazon ECS) について、簡単にまとめてみます。

Amazon EC2 Container Service とは？
-------------------------------------

- AMazon EC2 をベースにしたスケーラブルなコンテナ管理サービス
    - コンテナは、 Docker のコンテナ
- Amazon EC2 インスタンスのクラスター上に配置
    - Amazon EC2 の使い慣れた機能を利用可能
    - クラスター管理はAWS側が行うので手間が省ける
- ECS 自体は無料で利用可能、保存や実行するためのAWSリソースに対して料金が発生
    - EC2インスタンスや、EBSボリュームなど
- ECS は現在はプレビュー利用、自動的に利用可能になるそう？

Amazon EC2 Container Service の構成
-------------------------------------------

<dl>
<dt>クラスター</dt><dd>タスクを配置できるコンテナインスタンスの論理グループ</dd>
<dt>コンテナインスタンス</dt><dd>Amazon ECS エージェントが稼働する Amazon EC2 インスタンスで、クラスターに登録される</dd>
<dt>タスク定義</dt><dd>1つまたは複数のコンテナ定義を含むアプリケーションの定義</dd>
<dt>タスク</dt><dd>コンテナインスタンスで稼働するタスク定義の実体</dd>
<dt>コンテナ</dt><dd>タスクの一部として作成される Linux コンテナ</dd>
</dl>

Amazon EC2 Container Service を使うには？
--------------------------------------------

クラスター用の Amazon EC2 インスタンスをセットアップします。
以下は、[Amazon ECS のセットアップ][ecs-setting-up] に掲載されている手順の概略です。はしょっているので、詳細は元のドキュメントをご参照ください。

1. IAMグループ作成 (権限: Administrator Access)
2. IAMユーザ作成 (Administratorグループに追加、パスワードの設定)
3. Credentials を取得
4. 作ったIAMユーザでサインイン
5. コンテナインスタンス用のIAMロールを作成 (下記のボリシーをコピー&ペースト)
6. SSH接続の準備 (Key Pair がなければ作成)
7. Virtual Private Cloud (VPC) の作成・設定
8. セキュリティーグループの作成・設定
9. (プレビューの間のみ) ECS を利用するため、1.7.0 以降の AWS CLI を用意 (後述)

### コンテナインスタンス用のIAMロールポリシー
(ドキュメントから引用)

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:CreateCluster",
        "ecs:RegisterContainerInstance",
        "ecs:DeregisterContainerInstance",
        "ecs:DiscoverPollEndpoint",
        "ecs:Submit*",
        "ecs:Poll"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

### AWS コマンドラインインターフェース (AWS CLI) の用意
Amazon EC2 Container Service はまだプレビューなので、1.7.0 以降の AWS CLI を用意します。

Amazon Linux には標準で AWS CLI がインストールされています。以下のようにバージョンを確認し、1.7.0 未満の場合はアップグレードしましょう。アップグレードや、その他インストールが必要な方は、[AWS コマンドラインインターフェースのインストール][aws-cli-installing] をご参照ください。

```bash
# バージョンの確認
$ aws --version
aws-cli/1.7.0 Python/2.7.8 Darwin/14.0.0
```

ここまでセットアップできれば、いよいよチュートリアルを実践できるそうです。チュートリアルはこちら [Getting Started with Amazon ECS][ecs-getting-started] にあります。

参考ドキュメント
------------------------------------------

- APIガイド: [Welcome - EC2ContainerService][ecs-api-guide]
- CLIガイド: [ecs — AWS CLI 1.7.4 documentation][ecs-cli-guide]

あれこれメモ (一部クイック和訳)
===============================================

開発者ガイド: Amazon EC2 Container Service とは？
-----------------------------------------------------

開発者ガイド: [What is Amazon EC2 Container Service? - Amazon EC2 Container Service][ecs-developer-guide]

### What is Amazon EC2 Container Service?

> Amazon EC2 Container Service (Amazon ECS) is a highly scalable, fast, container management service that makes it easy to run, stop, and manage Docker containers on a cluster of Amazon EC2 instances. Amazon ECS lets you launch and stop container-enabled applications with simple API calls, allows you to get the state of your cluster from a centralized service, and gives you access to many familiar Amazon EC2 features like security groups, Amazon EBS volumes, and IAM roles.

&quot;Amazon EC2 Container Service (Amazon ECS) は、とてもスケーラブルで、高速なコンテナ管理サービスです。簡単に起動、停止が行えて、Amazon EC2 インスタンスのクラスターの上で Dockerコンテナを管理することができます。Amazon ECS は、シンプルなAPI呼び出しでコンテナで利用可能なアプリケーションを起動や停止することができ、中央管理サービスからあなたのクラスターのス状態を取得でき、セキュリティーグループや Amazon EBS ボリューム、IAMロールなどのたくさんの使い慣れた Amazon EC2 の機能にアクセスすることができます。&quot;

> You can use Amazon ECS to schedule the placement of containers across your cluster based on your resource needs, isolation policies, and availability requirements. Amazon EC2 Container Service eliminates the need for you to operate your own cluster management and configuration management systems or worry about scaling your management infrastructure.

&quot;Amazon ECS は、リソースによる要件や、ポリシーの分断、要求される可用性に応じてあなたのクラスターにコンテナを配置するスケジュールを立てることができます。Amazon EC2 Container Service はクラスターの管理や管理システムの設定のオペレーションを不要にしたり、インフラストラクチャの管理のスケールに関する心配事を取り除きます。&quot;

#### Getting Set Up

&quot;セットアップ&quot;

> To use Amazon ECS, you need to be set up to launch Amazon EC2 instances into your clusters. You will also need to install a custom version of the AWS Command Line Interface for Amazon ECS, as this is the only available client during our preview. For more information, see [Setting Up with Amazon ECS][ecs-setting-up].

&quot;Amazon ECS を利用するには、あなたのクラスターに Amazon EC2 インスタンスを起動してセットアップする必要があります。また、Amazon ECS のために AWSコマンドラインインタフェースのカスタムバージョンをインストールする必要があり、これはプレビューの間だけ利用可能なクライアントです。詳細は、[Amazon ECSのセットアップ][ecs-setting-up] を参照してください。&quot;

> After you are set up, you are ready to complete the [Getting Started with Amazon ECS][ecs-getting-started] tutorial.

&quot;セットアップが完了したら、[Getting Started with Amazon ECS][ecs-getting-started] のチュートリアルを実践する準備ができます。&quot;

[Docker]:https://www.docker.com/ "Docker - Build, Ship, and Run Any App, Anywhere"
[Amazon EC2 Container Service]:http://aws.amazon.com/ecs/ "Amazon EC2 Container Service (高いスケーラビリティとパフォーマンスを備えたコンテナ管理サービス) | アマゾン ウェブ サービス（AWS 日本語）"
[ecs-getting-started]:http://aws.amazon.com/ecs/getting-started/ "AWS | Amazon EC2 Container Service | Getting Started"
[ecs-developer-guide]:http://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html "What is Amazon EC2 Container Service? - Amazon EC2 Container Service"
[ecs-api-guide]:http://docs.aws.amazon.com/AmazonECS/latest/APIReference/Welcome.html "Welcome - EC2ContainerService"
[ecs-cli-guide]:http://docs.aws.amazon.com/cli/latest/reference/ecs/index.html "ecs — AWS CLI 1.7.4 documentation"
[ecs-getting-started]:http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_GetStarted.html "Getting Started with Amazon ECS - Amazon EC2 Container Service"
[ecs-setting-up]:http://docs.aws.amazon.com/AmazonECS/latest/developerguide/get-set-up-for-amazon-ecs.html "Setting Up with Amazon ECS - Amazon EC2 Container Service"
[aws-cli]:http://aws.amazon.com/cli/ "AWS コマンドラインインターフェイス"
[aws-cli-installing]:http://docs.aws.amazon.com/cli/latest/userguide/installing.html "Installing the AWS Command Line Interface - AWS Command Line Interface"

Epilogue - おわりに
============================================
上記はドキュメントからまとめただけなので、実際にセットアップをしてみてはまるところあればまた記事にしたいと思います。Docker はまだ触ったことがなく右往左往しそうですが、いきなりECSネイティブで突き進んでみようと思います！


近況
===================================================

Phalcon関連
---------------------------------------

- [爆速フレームワーク!! Phalcon PHP Framework](
http://qiita.com/dz_/items/55ae18f7fe3a873bace1 "爆速フレームワーク!! Phalcon PHP Framework")
- [Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会](http://qiita.com/dz_/items/974a90b32ba6a6e38182 "Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会")
- [Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！](http://qiita.com/dz_/items/e70d61487224b854b971 "Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！") ← :new: :sparkles: 

技術ブログ寄稿
-----------------------------------------

[cloudpack技術ブログ][cloudpack-blog]でも、AWS Lambda や 運用ツール Serf に関して記事を書いています。ご興味あれば読んでいただけると嬉しいです！

- <a href="http://blog.cloudpack.jp/author/oohira/" title="大平 かづみ の記事一覧 | cloudpack技術情報サイト"　target="_blank" rel="nofollow">大平 かづみ の記事一覧</a>


[cloudpack]:https://cloudpack.jp/ "cloudpack（クラウドパック） 400社を超える導入実績! EC2などAWSクラウドの導入設計、構築、運用保守サービス"
[cloudpack-blog]:http://blog.cloudpack.jp/ "cloudpack技術情報サイト"
[大平かづみ]:http://blog.cloudpack.jp/author/oohira/ "大平かづみの記事一覧"