これは Serverless2 Advent Calendar 2018 の 4 日目の記事です。
前日は miyake さんによる Serverlessconf Tokyo で Durable Functions にコントリビュートしました | PaaSがかりの部屋 でした。
本文
先日、Azure Functions を Docker を使って Docker イメージにパッケージングしました。
Advent Calendar も、空白があるようなので折角なので、今回は AWS の Amazon ECS にデプロイしてみようと思います。
とりあえず手動 docker push
がだるかった(and 何故か自宅からやると凄く重かった)ので、以下のような azure-pipelines.yml
を書いて Azure DevOps (旧 Visual Studio Team Services) で docker build
と docker push
をしてもらうようにしました。
とりあえず現在のビルド ID をタグにしたイメージと、同じものを latest タグに突っ込むようにしたけどいいのかな。
pool: vmImage: 'Ubuntu 16.04' variables: imageName: '$(dockerId)/serverless2018:$(build.buildId)' latestImageName: '$(dockerId)/serverless2018:latest' steps: - script: | docker build -f Dockerfile -t $(imageName) . docker tag $(imageName) $(latestImageName) displayName: 'docker build' - script: | docker login -u $(dockerId) -p $(pswd) docker push $(imageName) docker push $(latestImageName) displayName: 'docker push'
変数部分は、別途変数用の設定画面でさくっと設定してビルド設定をしておきます。このビルドを走らせると以下のようにさくっと docker push
されました。
(自宅で何時間放置しても終わらなかったのに…)
Docker は初心者なのでよくわかってないのですが Tags ってところに作られてるから大丈夫なのかな。
デプロイ to AWS
はじめて、ちゃんと開いた AWS のコンソールで ECS を探します。こんな感じに入力して更新
タスク定義はそのままで、ロードバランサーは Application Load Balancer を選びました。あとは Yes マンです。 知らないクラウドの、いったい今何が作られてるんだろう…という不安感はたまらないですね(後で全部ちゃんと消せるんだろうか)
作成されたロードバランサーを見ると凄く長い URL が生成されてます。そこに向けて curl コマンドを叩くと…。
>curl http://ec2co-ecsel-1g11swshqzpgu-1462563513.us-west-2.elb.amazonaws.com/api/Echo?message=Hello You said 'Hello'
動いた!!
まとめ
まだプレビュー段階ですが Azure Functions の Docker サポートを使うと AWS で Azure Functions を動かすことも出来ますね!やったね。