Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ElasticContainerServicesハンズオン

657fb6673f7551440601417843ec5152?s=47 tarosaiba
February 28, 2019

 ElasticContainerServicesハンズオン

657fb6673f7551440601417843ec5152?s=128

tarosaiba

February 28, 2019
Tweet

Transcript

  1. Elastic Container Services 編 2019/2/04 Shuntaro Saiba これからのアプリケーションデプロイが変わる 1

  2. @tarosaiba • Future Architect, Inc • TIG所属 4年目 • Infra

    - MW - CI 周りやってきました • AWS/GCP • Infrastructure as Codeの導入が得意 http://www.atmarkit.co.jp/ait/articles/1806/05/news010_2.html Shuntaro Saiba 2
  3. 3 私のいままで エンプラ小売り & AWS エンプラ金融 & オンプレ エンプラ小売り &

    GCP エンプラ小売り & AWS
  4. 4 私のいままで エンプラ小売り & AWS エンプラ金融 & オンプレ エンプラ小売り &

    GCP エンプラ小売り & AWS 本番環境でコンテナ運 用を経験
  5. 注意 - アイコンが変わりました • AWSのアイコンが2018/10月頃に変わったので、本資料は新しいので作成し てみます。 (慣れなくて見づらい..) 5 NEW! ECS

    Container
  6. 6 https://speakerdeck.com/tarosaiba/kontenaji-shu-tokontenaokesutoresiyonru-men こちらの資料も見てください!

  7. 想定読者 • ECSが便利なのは知ってるけど、どうやって使えばよいの? • 「Service」「Task」って何!? • これからのAWSでのシステム構築、アプリデプロイはどう変わっていくの? 7

  8. ECS (Elastic Container Service) 8 • AWSのマネージドサービス • AWS独自のコンテナオーケストレーションツール •

    Docker コンテナフォーマットをサポート
  9. ECS の簡単な仕組み 9 ECS Cluster EC2 EC2 Service Task Task

    ・・・ • EC2でクラスタを構成 • Task(=コンテナ)で コンテ ナイメージを指定 • ServiceでTask数を指定
  10. 10 とりあえず

  11. 11 今回のゴール • Fargateで動くコンテナ上の アプリにアクセスできるまで ECS Cluster Fargate Service ENI

    Task
  12. 12 でどんどんデプロイ していきます

  13. 今回やること 13 ECS Cluster App Source Dockerfile Image COMMIT DEPLOY

    Service Task Docker BUILD Docker PUSH AWS Service  ECR Registry 1 2 3 4
  14. 今回やること 14 No やること 内容 方法 Commit • Dockerfileと APP

    のソースコードを作成 • N/A Docker Build • Docker の Image を作成 • docker build Docker Push • Docker Imageを ECR に Push • AWS コンソール • docker push Deploy to ECS • ECR の Cluster、Service作成 • Task をデプロイ • AWS コンソール 1 2 3 4
  15. 15 1. Commit

  16. 1. Commit 16 Container Image • 以下を作成しましょう Build App Source

    Dockerfile
  17. Sample Java Source • こちらのSampleプログラムを 使います。 https://github.com/spring-projects/spring-petclinic • maven で

    ビルド • jar が作成されたことを確認 17 # Git Clone > git clone https://github.com/spring-projects/spring-petclinic # Build springboot source > mvn clean install [INFO] Scanning for projects... Downloading from spring-snapshots: .. [INFO] -------------------------------------------------------------- [INFO] BUILD SUCCESS -------------------------------------------------------------- > ls target/*.jar target/spring-petclinic-2.1.0.BUILD-SNAPSHOT.jar
  18. Sample Java Source • 動かしてみましょう 18 # Start Springboot >

    java -jar ./target/spring-petclinic-2.1.0.BUILD-SNAPSHOT.jar
  19. Sample Dockerfile • Dockerfile を作成します • CentOS7にopenjdkをインストールし ビルド済みのjarをコンテナにコピー • ポートの公開設定をして、jarを起動

    19 # ベースのイメージを指定 FROM centos:7 # yumでJavaをInstall RUN yum update -y && \ yum install -y java-1.8.0-openjdk # 作業ディレクトリに移動 WORKDIR /app # jarをコンテナにコピー COPY ./target/spring-petclinic-xxx.jar /app # ポートの公開設定 EXPOSE 8080 # コンテナ内でmy-app.jarを実行 CMD ["java", "-jar", "/app/spring-petclinic-xxx.jar"] # Make Dockerfile at same directry > vim Dockerfile Dockerfile pom.xml readme.md src target
  20. 20 準備完了です

  21. 21 2. Build

  22. 2. Build 22 Container Image • Build します Build App

    Source Dockerfile
  23. Docker build • docker build コマンドでイメージを作 成します 23 # Check

    files > ls Dockerfile pom.xml readme.md src target # Docker build > docker build -t sample-springboot:latest . Sending build context to Docker daemon 57.15 MB Step 1/6 : FROM centos:7 ---> 1e1148e4cc2c Step 2/6 : RUN yum update -y && yum install -y java-1.8.0-openjdk ---> Running in a019ed4047fe .. Step 6/6 : CMD java -jar /app/spring-petclinic-2.1.0.BUILD-SNAPSHOT.jar ---> Running in 1444a0955841 ---> 86de299b51bc Removing intermediate container 1444a0955841 Successfully built 86de299b51bc
  24. コンテナにアプリを入れる 24 Container Image Bins/Libs App • コンテナのイメージが出来上がりました! Build

  25. 25 3. Push

  26. 26 ここから     が登場

  27. ECR 作成 27 • Docker Image を管理する ECRのリポジトリを作成します

  28. 28 ECR 作成 • リポジトリ名を入れて、作成

  29. 29 ECR 作成 • リポジトリできました (sample-springboot) Repogitory

  30. 30 Docker login • ECRにpushするための準備を 行います Repogitory

  31. 31 # Get docker command > (aws ecr get-login --no-include-email

    --region ap-northeast-1) docker login -u AWS -p ******************************************************************************************** ******************************************************************************************** ******************************************************************************************** ******************************************************************************************** ********* https://xxxxxxxxxxxxx3.dkr.ecr.ap-northeast-1.amazonaws.com Login Succeeded Docker login • ECRにPushするために、Login します Repogitory
  32. 32 # Get docker command > docker tag sample-springboot:latest ***.dkr.ecr.ap-northeast-1.amazonaws.com/sample-springboot:latest

    > docker images REPOSITORY TAG IMAGE ID CREATED SIZE ***.dkr.ecr.ap-northeast-1.amazonaws.com/sample-springboot latest 86de299b51bc 26 hours ago 541 MB > docker push ***.dkr.ecr.ap-northeast-1.amazonaws.com/sample-springboot:latest The push refers to a repository [***.dkr.ecr.ap-northeast-1.amazonaws.com/sample-springboot] 30d8f279a479: Pushing [======> ] 5.965 MB/44.61 MB a419c287f8fe: Pushing 1.536 kB a1474341a13e: Pushing [=> ] 7.739 MB/294.7 MB 071d8bd76517: Pushing [> ] 2.735 MB/201.8 MB Docker push • Docker buildします • ECRにPushします Repogitory
  33. 33 Docker push • Docker Imageを pushできました Repogitory Docker Image

  34. 34 4. Deploy

  35. ECS Cluster 作成 35 • ECS Clusterを作ります Repogitory Docker Image

  36. 36 ECS Cluster 作成 • ECS Clusterを作ります • AWS Fargateを選択

    Repogitory Docker Image
  37. 37 ECS Cluster 作成 • ECS Clusterの名前を指定 (ecs-cluster-sample-springboot) Repogitory Docker

    Image
  38. 38 ECS Cluster 作成 • ECS Clusterできあがりました Repogitory Docker Image

    ECS Cluster Fargate
  39. 39 ECS Cluster 作成 • ECS Clusterできあがりました Repogitory Docker Image

    ECS Cluster Fargate
  40. 40 ECS タスク定義 作成 • タスク定義を作成します Repogitory Docker Image ECS

    Cluster Fargate
  41. 41 ECS タスク定義 作成 • 起動タイプ : FARGATE を指定 Repogitory

    Docker Image ECS Cluster Fargate
  42. 42 ECS タスク定義 作成 • 定義名 (ecs-task-sample-springboot) • ネットワーク: awsvpc

    を指定 Repogitory Docker Image ECS Cluster Fargate
  43. 43 ECS タスク定義 作成 • メモリとCPUを指定 Repogitory Docker Image ECS

    Cluster Fargate
  44. 44 ECS タスク定義 作成 • コンテナの定義 • pushしたECRのイメージを指定 Repogitory Docker

    Image ECS Cluster Fargate
  45. 45 ECS タスク定義 作成 • リッスンさせるポートを指定 (8080) Repogitory Docker Image

    ECS Cluster Fargate
  46. 46 ECS タスク定義 作成 • タスク定義ができました Repogitory Docker Image ECS

    Cluster Fargate Task Definition
  47. 47 ECS Service 作成 • Serviceを作成します Repogitory Docker Image ECS

    Cluster Fargate Task Definition
  48. 48 ECS Service 作成 • 先に作成したタスク定義を指定 • タスク数は1 Repogitory Docker

    Image ECS Cluster Fargate Task Definition
  49. 49 ECS Service 作成 • VPC、サブネット、セキュリティグルー プを指定 • パブリックIP は有効

    Repogitory Docker Image ECS Cluster Fargate Task Definition
  50. 50 ECS Service 作成 • サービスの検出は OFF ECS Cluster Fargate

    Repogitory Docker Image Task Definition
  51. 51 ECS Service 作成 • サービスできました ECS Cluster Fargate Service

    ENI Task Repogitory Docker Image Task Definition
  52. 52 アクセス確認 • パブリックIPにアクセス • アプリにアクセスできました ECS Cluster Fargate Service

    ENI Task Repogitory Docker Image Task Definition
  53. 53 おわり