かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Azure Functions on AWS

これは Serverless2 Advent Calendar 2018 の 4 日目の記事です。

qiita.com

前日は miyake さんによる Serverlessconf Tokyo で Durable Functions にコントリビュートしました | PaaSがかりの部屋 でした。

本文

先日、Azure Functions を Docker を使って Docker イメージにパッケージングしました。

blog.okazuki.jp

Advent Calendar も、空白があるようなので折角なので、今回は AWS の Amazon ECS にデプロイしてみようと思います。

とりあえず手動 docker push がだるかった(and 何故か自宅からやると凄く重かった)ので、以下のような azure-pipelines.yml を書いて Azure DevOps (旧 Visual Studio Team Services) で docker builddocker 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 ってところに作られてるから大丈夫なのかな。

f:id:okazuki:20181204111539p:plain

デプロイ to AWS

はじめて、ちゃんと開いた AWS のコンソールで ECS を探します。こんな感じに入力して更新

f:id:okazuki:20181204111947p:plain

タスク定義はそのままで、ロードバランサーは Application Load Balancer を選びました。あとは Yes マンです。 知らないクラウドの、いったい今何が作られてるんだろう…という不安感はたまらないですね(後で全部ちゃんと消せるんだろうか)

f:id:okazuki:20181204112208p:plain

作成されたロードバランサーを見ると凄く長い 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 を動かすことも出来ますね!やったね。