チュートリアル2019年9月11日14分读 去アプリケーションのAWS ECSへのデプロイ,ビルド,テスト 多米尼克MotukaAndela, DevOpsエンジニア Twitter的で共有 Facebook的で共有 reddit的で共有 Hacker Newsで共有 このチュートリアルの例では,シンプルな去アプリケーションを亚马逊EC2コンテナサービス(ECS)にデプロイします。次に,CircleCIを使用して,アプリの后続バージョンを自动的にビルド,テスト,デプロイします。使用されているテクノロジーを正しく确実に理解できるように,次の主な手顺を段阶的に行っていきます。 セキュリティグループを作成する 1つのインスタンスでECSクラスタを作成する ECSタスク定義を作成する タスク定義を実行するサービスを作成する CircleCIクラスタのECSサービスに関連付けるAmazon Elastic负载均衡器(ELB)およびターゲットグループを作成して構成する CircleCIのでELB DNS名を使用してアプリケーションにアクセスする(动作することをテストするため) circleci / aws-ecr@6.2.0orbを使用してCircleCIを構成し,更新されたイメージをビルドしてAmazon Elastic容器注册(ECR)にプッシュする circleci / aws-ecs@0.0.11orbを使用してCircleCIを構成し,先ほど作成したクラスタに更新されたイメージをデプロイする 亚马逊ECSの利点を十分に理解するには,まず码头工人を理解する必要があります。このチュートリアルでは,多克尔とコンテナの知识が必要となります。さらに,継続的インテグレーションと継続的デプロイメント(CI / CD)の基本の理解している必要があります。次のセクションでは,使用するテクノロジーと用语の一部を说明します。 使用されるテクノロジーと用语の概要 ECSの概要: ECSはコンテナを管理する亚马逊网络服务(AWS)のクラウドコンピューティングサービスです。開発者は,アプリケーションプログラミングインターフェイス(API)呼び出しとタスク定義を通じて,クラスタと呼ばれるサーバーのグループで実行されるスケーラブルなアプリケーションデプロイおよび管理できます。基本的に,ECSはタスクスケジューラです。ECSが作成するタスクは,実行中の码头工人コンテナにマップされます。使用可能なリソースに基づいて,クラスタ内のリソースでタスクを実行する場所を決定します。码头工人が広く採用されていることから、他のコンテナテクノロジー(LXC、RKTなど)も利用できるようになっていますが、ECS は Docker コンテナでネイティブに動作するように設計されています。 タスク定義:タスク定義は,コンテナの実行方法を説明するレシピと考えることができます。コンテナに公開するポート,割り当てるメモリとCPU、コンテナを起動する码头工人イメージなどの情報がタスク定義に含まれます。この例のタスク定義では,1つのコンテナ,使用するイメージ,割り当てるCPUとメモリ,および公開するポートが設定されます。 タスク: ECSタスクは,タスク定義からインスタンス化された実行中のコンテナの単位です。これらは,同じインスタンスで一緒に実行される1 ~ N個のコンテナの論理グループです(Nは1 ~ 10の間で定義されます)。需要に応じて1つのタスク定義で複数のタスクを作成できます。 サービス: ECSサービスは,常にいくつかのタスクが常に実行されていることを保証するために使用されます。エラーが発生しタスクのコンテナが終了した場合,またはバックエンドのEC2インスタンスが失敗して置き換えられる場合,ECSサービスは失敗したタスクを置き換えます。クラスタを作成して,使用するCPU、メモリ,およびネットワークポートなど,サービスが十分なリソースを利用できるようにします。実行されている限り,どのインスタンスタスクが実行されるかは重要ではありません。サービスコンフィグは,タスク定義を参照します。サービスはタスクの作成を担当します。 クラスター:ECSクラスターは,単一のリージョン内にある(コンテナ)インスタンス(またはFargateではタスク)のグループですが,复数のアベイラビリティーゾーンにまたがる场合もあります.ECSは,これらのインスタンスへのスケーリングリクエストのスケジューリング,管理,および处理のロジックを处理します。また,CPUとメモリのニーズに基づいて各タスクを最适に配置する作业も不要になります。クラスタは多くのサービスを実行できます。制品の一部であるアプリケーションが复数ある场合,それらのいくつかを1つのクラスタに配置できます。これにより,利用可能なリソースを效率的に使用し,セットアップの时间を最小限に抑えることができます。 コンテナインスタンス:これは,亚马逊ECSコンテナエージェントを実行しているAmazon Elastic Compute Cloud (EC2)インスタンスです。IAMポリシーとロールが明確に定義されており,クラスタに登録されています。亚马逊ECSでタスクを実行すると,EC2起動タイプを使用して,ユーザーのタスクがアクティブなコンテナインスタンスに配置されます。 CircleCI宝珠:宝珠は,プロジェクト间で共有できるCircleCIコンフィグのパッケージです.Orbsを使用すると,ジョブ,コマンド,および执行人から构成される単一のバンドルを作成して,相互に参照したり,CircleCIビルドコンフィグにインポートして独自のネームスペースで呼び出したりすることができます。 シンプルな转到アプリケーション プロジェクトのディレクトリ构造は次のとおりです。 。├──.circleci│└──配置。yml├──├├md├──ecs-service。json├──主要。去└──任务定义。json 1目录,6个文件 完全なアプリケーションは,このリポジトリにあります。詳細を確認するには,お使いの端末で次の行を使用して,必要な場所にクローンを作成します。 美元git克隆https://github.com/daumie/circleci-ecs.git Dockerfileのみについて作业する场合は,ここで見つけることができます。去アプリケーションのmain.goファイルはここにあります。 では,これらをまとめて実行していきましょう。最初に,AWSアカウントを作成してアクティブにします。次に,ローカルマシンに AWS CLI をインストールして設定します。AWS CLIを使用して,コマンドラインインターフェイスでAWSとやり取りします。 次に,AWSアカウントを作成したときに自動的に作成されるデフォルトの虚拟私有云(VPC)を使用します。利用できない場合は,次のコマンドを実行してデフォルトのVPCを作成できます。 美元aws ec2 create-default-vpc 次のコマンドを実行して,利用できるVPCがあることを確認します。 美元aws ec2 describe-vpcs デフォルトのVPCがあることを確認したら,後で使用するセキュリティグループを作成しましょう。 美元AWS EC2创建安全组- 组的名字circleci-demo-sg——描述“圆CI演示安全组” 次に,ECSクラスターと关连するEC2インスタンスを作成します。circleci-demo-clusterクラスタを呼び出します。以前に作成したcircleci-demo-sgセキュリティグループを設定する必要があります。 クラスタ名:circleci-demo-cluster EC2インスタンスタイプ: t2.medium ネットワーキング:すべてのサブネットでデフォルトVPCを使用します。 セキュリティグループ(circleci-demo-sg)このIDを使用します。 コンテナインスタンス我ロール: ecsInstanceRole 数分间待ってから,コンテナインスタンスがcircleci-demo-clusterに正常に登录されたことを确认します。集群/我的集群の下のECS实例タブをクリックして,登録されていることを確認できます。 アプリケーションイメージを作成し,AWS ECRにプッシュする 码头工人イメージをローカルで作成し,ECRにプッシュします。 美元码头工人建造- tcircleci-ecs: v1。步骤1/14:来自golang:最新的建设者--->be63d15101cb…… 次の手順で,ECRにイメージリポジトリを作成します。circleci-demoという名前を付けます。 AWSアカウントには一意のIDが設定されます。次のコマンドの634223907656をそのIDに変更してください。リポジトリ名を取得したら,イメージを適切にタグ付けできるようになります。 美元docker标签circleci-ecs:v1 634223907656.dkr.ecr.eu-western2.amazonaws.com/circleci -demo:最新 認証情報ヘルパーを使用して,码头工人CLIのAWS ECRリポジトリを認証できます。次のコマンドを使用して認証します(必要に応じてリージョンを変更します)。 $ aws ecr get login -不包括电子邮件-地区eu-west-2 | bash 次に,イメージをECRリポジトリにプッシュします。 美元码头工人推634223907656. dkr.ecr.eu -西方- 2. - amazonaws.com/circleci -演示:最新 ECRレジストリにイメージができましたので,去アプリケーションを起動するブループリントになるタスク定義が必要です。プロジェクトのルートにあるtask-definition.jsonファイルには,次のコード行があります。 {“家庭”:“circleci-演示服务”,“containerDefinitions”:({“名称”:“circleci-演示服务”,“图像”:“634223907656.dkr.ecr.eu-west-2.amazonaws.com/circleci-demo:latest”,“cpu”:128,“memoryReservation”:128,“portMappings”:({“containerPort”:8080,“协议”:“tcp”}]“命令”:(主要“。/”]“必不可少”:真正的}]} 注:ECRにプッシュしたイメージに変更することを忘れないでください。 次のコマンドを実行して,コマンドラインインターフェイスからタスク定義を登録します。 美元AWS ECS寄存器任务定义——cli-input-jsonfile://task-definition.json タスク定义がECSコンソールに正常に登录されたことを确认します。 後でECSサービスに関連付けるELBとターゲットグループを作成する ELBを作成しているのは,最終的に複数のコンテナ間でリクエストをロードバランシングし,去アプリケーションをテストのためにインターネットに公開するためです。このために,AWSコンソールを使用します。EC2控制台>负载平衡>负载平衡器に移動し,创建负载均衡器をクリックして,应用负载平衡器を選択します。 ロードバランサーを構成する ロードバランサーにcircleci-demo-elbという名前を付けて,(apple)を選択します。 听众で、HTTPプロトコルとポート80を使用するデフォルトのリスナーを使用します。 可用性区域で,クラスタを作成したときに使用したVPCを選択し,必要なサブネットを選択します。 セキュリティを構成する SSLを使用しないため,警告をスキップします。 セキュリティグループを构成する circleci-demo-elb-sgという名前の新しいセキュリティグループを作成し,ポート80とソース0.0.0.0/0を开いて,外部からのすべてがポートで80 ELBにアクセスできるようにします。 ルーティングを構成する ポート80を使用する新しいターゲットグループ名circleci-demo-target-groupを作成します。 ターゲットを登録する ECSインスタンスを选択して,既存のターゲットを登录します。 レビュ ロードバランサーの詳細を確認します。 circleci-demo-elb-sgセキュリティグループは,circleci-demo-elbロードバランサーのポート80を开きます。次に,ECSインスタンスに关连付けられたcircleci-demo-sgセキュリティグループがロードバランサーからのトラフィックを許可することを確認する必要があります。すべてのELBトラフィックがコンテナインスタンスにヒットできるようにするには,次を実行します。 美元aws ec2 authorize-security-group-ingress- 组的名字circleci-demo-sg——协议tcp——港口1-65535——source-groupcircleci-demo-elb-sg EC 2コンソールから,セキュリティグループにこれらのルールが追加されたことを確認します。 circleci-demo-target-groupグループのコンテナインスタンスに送信されるトラフィックはすべて许可されます。 サービスを作成する 次のステップは,circleci-演示服务タスク定義(task-definition.jsonファイルで定義)を実行するサービスを作成することです。プロジェクトのルートにあるECS-service.jsonファイルには,次のコード行があります。 {“集群”:“circleci-demo-cluster”,“名”:“circleci-演示服务”,“taskDefinition”:“circleci-演示服务”,“负载均衡器”:({“targetGroupArn”:“阿尔恩:AWS:elasticloadbalancing:欧盟 - 西2:634223907656:targetgroup / circleci-演示targetgroup / a5a0f047c845fcbb”,“containerName”:“circleci-演示服务”,“containerPort”:8080}]“desiredCount”:1,“角色”:“ecsServiceRole”} circleci-demo-elbロードバランサーを作成するときに作成したtargetGroupArnを见つけるにはEC2控制台>负载平衡>目标群体に移動し,circleci-demo-target-groupをクリックします。これをコピーして,ECS-service.jsonファイルのtargetGroupArnにあるものと置き换えます。 次に,circleci-演示服务ECSサービスを作成します。 美元aws ecs创建服务——cli-input-jsonfile://ecs-service.json ECSコンソールから,集群>circleci-demo-cluster>circleci-演示服务に移動し,任务タブを表示します。コンテナが実行されていることを确认します。 すべてが機能していることをテストする 旋度を使用して,ELBで公開されているDNSエンドポイントを確認します。 美元旋度circleci -演示elb - 129747675. -欧盟-西方- 2. - elb.amazonaws.com;回声你好世界! ブラウザからも同じように確認できます。 CircleCIを構成して,ビルド,テスト,およびデプロイする 去アプリケーションをECSに正常にデプロイしたら,アップデートごとにアプリを再デプロイします.CircleCi球体を使用することにより,构成済みのコマンド,ジョブ,および执行人をコンフィグファイルにインポートでき,多くの时间を节约できます。これにより,AWSのデプロイに必要な的bashスクリプト作成の多くの労力が軽减され,コンフィグ内のコード行も大幅に削减されます.Orbsキーを使用して,このプロジェクトで次の球体を呼び出します。 circleci / aws-ecr@6.2.0:亚马逊のECRと连携してイメージをビルド,プッシュ,更新する球 circleci / aws-ecs@0.0.11:亚马逊のECSと连携して,更新されたイメージを以前に作成したクラスタに展开する球 orbは次の要素から構成されます。 コマンド ジョブ:実行可能なコマンドまたはステップのセット 遗嘱执行人:遗嘱执行人は,码头工人,マシン,macOSやその環境の他のパラメーターなど,ステップが実行される環境を定義します。 CircleCIを使用するには,ビルド,テスト,およびデプロイ操作を命令するためにCircleCIが使用するコンフィグファイルが必要です。このプロジェクトの場合,config.ymlファイルには次のコード行が含まれます。 版本:2.1球体:AWS-ECR:circleci / aws-ecr@6.2.0AWS-ECS:circleci / aws-ecs@0.0.11工作流:#登录AWS,构建并推送图像到Amazon ECRbuild_and_push_image:职位:-AWS-ECR /构建 - 推图像:帐户url:AWS_ECR_ACCOUNT_URLaws-access-key-id:AWS_ACCESS_KEY_IDAWS-秘密访问密钥:AWS_SECRET_ACCESS_KEYcreate-repo:真正的要使用的dockerfile名称。默认为Dockerfile。dockerfile:Dockerfile# AWS_REGION_ENV_VAR_NAME地区:AWS_DEFAULT_REGION# myECRRepository回购:”$ {MY_APP_PREFIX}”# myECRRepoTag标签:”CIRCLE_SHA1美元”-aws-ecs / deploy-service-update:要求:-AWS-ECR /构建 - 推图像aws-region:AWS_DEFAULT_REGION家庭:”$ {} MY_APP_PREFIX -service”集群名称:”$ {MY_APP_PREFIX}集群”container-image-name-updates:”容器= $ {MY_APP_PREFIX}服务类型、标签= $ {CIRCLE_SHA1}’ GitHubとCircleCIを使用します。CircleCIアカウントがない場合は,アカウントを作成します。GitHubにサインアップします。CircleCIダッシュボードから添加项目をクリックし,表示されたリストからプロジェクトを追加します。 次の环境変数を追加します。 AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION AWS_ECR_ACCOUNT_URL(在这个例子中,“634223907656.dkr.ecr.eu-west-2.amazonaws.com”) MY_APP_PREFIX(在本例中为“circleci-demo”) main.goファイルで次の行を変更します。 "你好,世界!" を "你好,世界! "现在更新CircleCI”に変更します。 変更をコミットしてGitHubにプッシュします。 次のコマンドを実行することで,変更が端末から適用されたことを確認できます。 $卷曲circleci-demo-elb-129747675.eu-west-2.elb.amazonaws.com;回声的Hello World!现在,随着CircleCI更新 ブラウザからも同じように確認できます。 結論 ここでは,シンプルなGOアプリケーションをビルドし,それをECRにデプロイしました。これで,テストをアプリケーションに追加して,ECSインスタンスを更新する前にそれらのテストに合格することを确认できます。このチュートリアルでは,基本的なアプリケーションを使用しましたが,これは多くの実际の状况で机能する成熟したデプロイメントパイプラインです。 さらに,CircleCI orbを使用すると,CircleCIコンフィグの記述が簡素化されるため,生産性が向上します。球体は共有できるため、作成済みのコマンド、ジョブ、および Executor をコンフィグファイルで繰り返し使用でき、時間を節約できます。Orbs の使用は CircleCI と ECS のデプロイに限定されません。宝珠レジストリで利用可能なorbの詳細なリストを確認し,クラウドプラットフォーム,プログラミング言語などに適合するorbを見つけることができます。 多米尼克Motuka氏はAndela社のDevOpsエンジニアであり,コンフィグ管理,CI / CD, DevOpsプロセスを活用した,AWSおよびGCPの本番環境へのデプロイのサポート,自動化,最適化について4年以上の実務経験があります。 あなたにおすすめの記事 チュートリアル2020年10月22日6分读 泊坞窗コンテナで何がうれしいのか - 2开発用コンテナ上での网络アプリ开発 チュートリアル2020年9月24日7分读 码头工人コンテナで何がうれしいのか- 1。開発用コンテナの構築 チュートリアル二〇二〇年七月三十○日48分读 コードとしてのインフラストラクチャ——パート3:継続的インテグレーション&継続的デプロイメント(CI / CD)によってKubernetesデプロイを自動化する チュートリアル2020年7月29日46分READ コードとしてのインフラストラクチャ——パート2:码头工人イメージを作成してKubernetesにデプロイする チュートリアル2020年7月29日28分读 コードとしてのインフラストラクチャ——パート1:Kubernetesクラスタを作成する チュートリアル2020年6月15日21分读 Symfonyアプリケーション向けの自動テスト チュートリアル2020年6月8日25分读 プログレッシブ网页アプリケーションの継続的デプロイメント チュートリアル2020年5月19日,26分读 GraphQL入門ガイド チュートリアル2020年5月19日,12分读 カスタム码头工人イメージを作成してCIビルドを実行する チュートリアル2020年5月14日25分读 基础设施代码(IaC)の使用方法 チュートリアル2020年5月11日,15分读 盖茨比アプリの的Herokuへの継続的デプロイメント チュートリアル2020年4月24日25分读 码头工人とCI / CDのチュートリアル:コンテナについて詳しく解説 チュートリアル2020年4月2日33分读 fastlaneによるAndroidアプリの継続的インテグレーション&デプロイメント チュートリアル2020年3月20日14分读 Herokuへの継続的デプロイ チュートリアル2020年3月6日12分读 亚马逊ECRへのプライベート码头工人イメージの自動デプロイ チュートリアル2020年2月14日,21分读 CI / CDパイプラインのスモークテスト チュートリアル2019年12月17日16分读 Salesforceアプリケーションの継続的インテグレーション チュートリアル2019年12月11日23分读 CircleCIでのオープンソースプロジェクトのビルドを最適化する チュートリアル2019年11月15日14分读 ASP。网络核心アプリケーションのビルドとテスト チュートリアル2019年9月18日53分读 MobXを使用した扑アプリのステート管理 チュートリアル2019年7月24日11分读 基础设施即代码を使用したパイプラインからのリリースの自动化 チュートリアル2019年7月11日10分读 CircleCI orbを使用したGKEへのCI / CDビルドパイプラインの簡素化 チュートリアル2019年5月21日11分读 信頼済みCIジョブを未信頼のフォークでトリガーする チュートリアル2019年2月5日21分读 Jestと酶による反应アプリケーションの継続的テスト チュートリアル2018年8月17日10分读 码头工人を使用したCI / CDパイプラインのビルド方法 2017年9月25日4分读 ワークフローでのデータの保持:キャッシュ,アーティファクト,およびワークスペースの使用方法 エンジニアリング2018年7月13日5分READ CircleCIを使用したGitHubリリースの自動化 チーム2019年5月23日8分READ 遠隔地に散らばるリモートチームでのコミュニケーションと情報共有のヒント チーム2019年7月26日6分读 単なる”リモートワーク”ではなく,“リモートファースト”の文化を育むためのヒント ニュース2019年9月19日7分读 Forrester波が評価。CircleCIが継続的 インテグレーションツールのリーダーに 新着情報のメール配信 最新のブログ记事をメールでお知らせします。 国・地域アフガニスタンアルバニアアンドラアンギラアンティグア・バーブーダアルメニアオーストラリアアゼルバイジャンバーレーンバルバドスベルギーベナンブータンボネール,シント・ユースタティウスおよびサバボツワナブラジルブルネイブルキナファソカンボジアカナダケイマン诸岛チャド中国ココス(キーリング)诸岛コモロコンゴ民主共和国コスタリカクロアチアキュラソーチェコ共和国ジブチドミニカ共和国エジプト赤道ギニアエストニアフォークランド諸島(マルビナス諸島)フィジーフランス仏領ポリネシアガボンジョージアガーナギリシャグレナダグアテマラギニアガイアナハード岛とマクドナルド诸岛ホンジュラスアイスランドインドネシアイラクマン岛イタリアジャージーカザフスタンキリバス大韓民国キルギスラトビアレソトリビアリトアニアマカオマダガスカルマレーシアマリマルティニークモーリシャスメキシコモナコモンテネグロモロッコミャンマーナウルオランダニュージーランドニジェールニウエノルウェーパキスタンパナマパラグアイフィリピンポーランドカタールルーマニアルワンダセントヘレナ・アセンションおよびトリスタンダクーニャセントルシアサンピエール島およびミクロン島サモアサントメ・プリンシペセネガルセーシェルシンガポールスロバキアソロモン諸島南アフリカ南スーダンスリランカスリナムスワジランドスイス台湾タンザニア東ティモールトケラウトリニダード・トバゴトルコタークス・カイコス諸島ウガンダアラブ首長国連邦米国ウズベキスタンベネズエラ英领ヴァージン诸岛西サハラザンビア登録する このフォームを送信することで,当社の利用規約およびプライバシーポリシーに同意したものと見なされます。 谢谢你!提交你的信息 你应该会收到一个自动回复通知你我们已经收到你的信息。我们企业团队的人很快就会联系您。金宝博娱乐官网网址