2015年6月21日日曜日

ECSで"Private Registry"を利用するCloudFormationのテンプレートを作ってみた


下記のドキュメントの内容をCloudFormationを使って試してみました
Private Registry Authentication
要は"Container Instance"の"/etc/ecs/ecs.config"に
ECS_ENGINE_AUTH_TYPE=docker
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}
のように認証情報がセットされるようにします。

CloudFormationのテンプレートは、こんな感じです。

「"Container Instance"の"/etc/ecs/ecs.config"に認証情報を設定」は
次のようにUserDataで実現しています。
"UserData": { "Fn::Base64": { "Fn::Join" : [ "\n", [
    "#!/bin/bash",
    "yum -y update",
    "grubby --default-kernel | grep `uname -r` || reboot",
    { "Fn::Join" : [ "", [
        "echo ECS_CLUSTER=",
        { "Ref": "Cluster" },
        " >> /etc/ecs/ecs.config"
    ] ] },
    "echo ECS_ENGINE_AUTH_TYPE=docker >> /etc/ecs/ecs.config",
    { "Fn::Join" : [ "", [
        "echo ECS_ENGINE_AUTH_DATA='{\"https://index.docker.io/v1/\":{\"username\":\"",
        { "Ref": "Username" },
        "\",\"password\":\"",
        { "Ref": "Password" },
        "\",\"email\":\"",
        { "Ref": "Email" },
        "\"}}' >> /etc/ecs/ecs.config"
    ] ] }
] ] } }
今回は下記"Docker Hub"のPublicなイメージとPrivateなイメージを使って
上記のテンプレートでスタックを作ってみました。


まずはパラメータに"Docker Hub"のログイン情報を設定してスタックを作成してみます。


ECSのクラスターができ、サービス登録したタスクが起動していることがわかります。


実際のタスクも下記の通り、プライベートなイメージ(nginx-private)も含めて
問題ない状態になっています。


次にパラメータに"Docker Hub"のログイン情報を設定せずにスタックを作成してみます。


こちらもサービス登録したタスクが起動している状態になりましたが、


タスクの状況を確認すると、プライベートなイメージ(nginx-private)の方は
イメージが見つからないというエラーになっていることがわかります。
(パブリックなイメージ"nginx-public"は問題ありません)

0 コメント: