Amplify Consoleでしか CICDできなかったけど..。@w2or3w2021.08.27 JAWS-UG浜松 AWS勉強会 2021#8
View Slide
Amplify ConsoleでしかCICDできなかったけど..。・静的WebサイトをAmplifyConsoleでCICD・静的WebサイトをCode PipelineでCICD(おまけ : GoのWebアプリをCode PipelineでCICD)今日やることCICDやってるマン!(プライベートでAmplifyConsoleだけ)CICD担当マン!(本業でもやってる )ちょっと進化した
ナカムラ ツカサ (38)浜松市在住のリーマンアプリケーションエンジニア好き:サーバーレスWebアプリ制作データレイク・データ連携Amplify, Lambda, DynamoDB, AppSyncS3, Athena, Glue, StepFunctions転職して2ヶ月 Webアプリ(Nuxt)の実装しつつ、 CICD担当としてAWSと戯れる日々。@w2or3w2(ツー) or(~か) 3(サン)自己紹介
https://aws.amazon.com/jp/amplify/hosting/ https://aws.amazon.com/jp/codepipeline/Amplify Console / CodePipeline
1. Amplify Consoleでアプリ作成2. リポジトリとブランチを選択3. ビルドの設定 (テストや環境変数もここに含まれる)4. 確認静的WebサイトをAmplify ConsoleでCICD
1. S3バケットの作成2. S3バケットの設定(パブリック許可、ホスティング有効)3. Code Pipelineでパイプライン作成4. リポジトリとブランチを選択5. ビルドの設定 (テストや環境変数もここに含まれる)6. デプロイの設定(プロバイダ=S3)7. 確認静的WebサイトをCode PipelineでCICD
Code Pipelineで担う範囲に限定すれば、Amplify Consoleと大体同じ。(a)ソースステージ、(b)ビルドステージ、(c)デプロイステージ ・・・この辺りはアプリケーションエンジニアの領域!(a)(b)(a)(b)(c)
やってみよう!
1. yarn dev で簡易サーバーを立ち上げて実行2. yarn run generate でビルドされた静的コンテンツを出力3. aws s3 cp コマンドでアップロード静的Webサイトをローカルで実行したり、コマンドラインでデプロイする
(a) ソースステージAmplify Console Code PipelineGitHub(バージョン2)が推奨されているが、AmplifyConsoleでは選択できない。
(b) ビルドステージAmplify Console Code Pipelineartifactsの baseDirectory の指定に若干差異があるが、だいたい同じ。(!)本当は、 nodeのバージョンを指定したり、 テストを実行したりするのが望ましいが、 割愛している。
(c) デプロイステージAmplify Console Code Pipeline なし
CICDしてる様子Amplify Console Code Pipeline
おまけ:GoのWebアプリをCode PipelineでCICDビルドステージ1. リポジトリ(ECR)の作成2. CodeBuildプロジェクト作成※ビルドステージ (ECRとCodeBuild)とデプロイステージ (ECS)は それぞれ事前に作成しておいてから、パイプラインでそれらを選択します。※DockerHubにログインしておかないと、 「Too Many Requests」というエラーによりビルドが失敗することがあります。 ( https://dev.classmethod.jp/articles/codebuild-has-to-use-dockerhub-login-to-avoid-ip-gacha/ )※DockerfileはBuildspecに直接書いても良いですが、 このサンプルではソースコードと同じ場所にあるファイルを利用しています。 ( https://github.com/ww2or3ww/learn-run-go/blob/main/03.webapp/webapp/Dockerfile.release ) なお、Buildspec自体もソースコードと同じ場所に作成しておくこともできます。
おまけ:GoのWebアプリをCode PipelineでCICDデプロイステージ1. ECSのタスクをFAGATEとして作成(コンテナは先ほど作成したECRを指定)2. ECSのクラスターを作成3. 作成したクラスターにサービスを作成(タスクは上で作成したタスクを指定)(ターゲットグループを作成する必要あり)(VPC, サブネット, セキュリティグループ, ALBも必要)この辺りはインフラ色が強く、アプリ担当の出番はない領域かもしれません。私も全てでなく、一部のみ担当しています。 インフラ担当 :VPC、サブネット、セキュリティグループ、 ALB、ECSクラスター アプリ担当 (私) :ECSタスク、ECSサービス、ターゲットグループ今感じている辛み 環境変数が多くて辛い ・SystemManagerのパラメータストアに実際の値を設定 (機密情報は、さらに Secrets Managerへの登録も。 ) ・タスクのコンテナ設定では、パラメータストアのパスを指定
Enjoy Deploy🚀Thank You !!@w2or3w