AWS CodeStarのプロジェクトテンプレートLambda+Pythonによって生成されるもの
勉強会のデモで、AWS CodeStarのプロジェクトテンプレートLambda+Pythonを使用しました。
AWS Codeサービス(CodeCommit, CodeBuild, CodeDeploy, CodePipeline)で何ができるかを知るのに非常に有効なテンプレートだと思いましたので、このテンプレートによって生成されたものを書き残しておきます。
目次
AWS CodeStarでプロジェクト作成
まずCodeStarでLambda Pythonのプロジェクトを選択して作成しました。
プロジェクト名を入力しました。
作成中になりました。
ついでにIDEはCloud9を作成しました。
Cloud9で起動するEC2インスタンスを設定しました。
AWS CodeCommit
- index.py – Lambda関数のコード
- tests – テストコード
- buildspec.yml – CodeBuildで実行されるビルド仕様
- template.yml – DeployプロセスのSAMテンプレート
- template-configuration.json – CloudFormationスタックのタグ
リポジトリに各ファイルができていました。
AWS CodeBuild
CodeBuildの環境設定、環境変数、IAMロール、Buildspecの設定ができていました。
AWS CodeDeploy
CodeDeployはSAMのテンプレートのDeploymentPreferenceで、CodeDeployDefault.LambdaCanary10Percent5Minutesが設定されていました。
1 2 3 4 5 6 7 8 |
Globals: Function: AutoPublishAlias: live DeploymentPreference: Enabled: true Type: Canary10Percent5Minutes Role: !Ref CodeDeployRole |
これにより、Lamdaのバージョンとエイリアスを使って、段階的(10%のトラフィックだけ先にリリース、残り90%は5分後)なBlue/Greenデプロイを実行していました。
AWS CodePipeline
Source, Build, Deployがそれぞれ設定されています。
Source
CodeCommitのリポジトリとmasterブランチが設定されています。
CloudWatch Eventsには、CodePipelineを起動するトリガーイベントが設定されていました。
ブランチの作成、更新がイベントルールに定義されています。
Build
CodeBuildのプロジェクトが指定されていました。
Deploy
デプロイは2つ設定されていて、1つ目はCloudFormation変更セットの作成でした。
テンプレートはbuildspec.ymlで aws cloudformation packageコマンドで作成された、template-export.ymlとオプション設定ファイルのtemplate-configuration.json が指定されていました。
CloudFormationのパラメーターは[高度]セクションで指定されていました。
Cloud9
AWS SettingsでCredentialsが有効になっていますので、アクセスキーID、シークレットアクセスキーが設定済です。
CodeCommitにはCLI認証情報ヘルパーが使用されていますので、HTTPS接続が可能になっていて、リポジトリはクローン済でした。
コードを変更してパイプラインを確認する
このままの状態で、API GatewayのProdステージURLにブラウザからアクセスすると、以下の結果が返ってきます。
1 2 3 4 5 |
{ output: "Hello World", timestamp: "2021-06-07T10:40:54.930811" } |
これを変更しようと思います。
Cloud9で、index.pyとtests/test_handler.pyの’Hello World’を’Hello World Yamashita’に変更しました。
test_handler.pyも変更しておかないとBuildのテストで失敗します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ git add . $ git commit -m "update" [master a8bf7fb] update 2 files changed, 2 insertions(+), 2 deletions(-) $ git push Enumerating objects: 9, done. Counting objects: 100% (9/9), done. Delta compression using up to 2 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (5/5), 417 bytes | 417.00 KiB/s, done. Total 5 (delta 3), reused 0 (delta 0) To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/Lambda-Python 2452d28..a8bf7fb master -> master |
これで、CodePipelineが実行されます。
Build、変更セットの作成が無事成功して、変更セットの実行まで来ました。
CloudFormationスタックでは、Lambdaのバージョンが作成されて、liveエイリアスへの重み付け設定が始まりました。
Lambda関数のliveエイリアスには、バージョン2に10%の重みが設定されています。
残り90%はまだバージョン1です。
5分後にCloudFormationではエイリアスの設定が完了しました。
Lambda関数のliveエイリアスでもバージョン2が100%になりました。
API GatewayのprodステージURLにブラウザでアクセスすると更新されていました。
1 2 3 4 5 |
{ output: "Hello World Yamashita", timestamp: "2021-06-07T10:59:01.630638" } |
CodeStarを使うことで、まずは一通りのパイプラインと開発環境を作ってしまえるので、非常に便利でした。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
Amazon EC2 Auto Scalingのライフサイクルフック
EC2 Auto Scalingにライフサイクルフックという機能があります。 ス …
-
-
AWSアカウントでルートユーザーが使用されたときにTeamsへ投稿する
Organizations組織内のアカウントのいずれかでルートユーザーが使用され …
-
-
AWS Lambdaで Unable to import module エラーが発生したときは
そもそも、Pycharmのナビゲーションペインでディレクトリごとドラッグ& …
-
-
Systems Manager セッションマネージャアクセスのCloud9(SSHなし)
作成画面 いつからできるようになっていたのか気づいてなかったのですが、Cloud …
-
-
Amazon Location Service入門ワークショップ-マップの操作
関連記事 Amazon Location Service入門ワークショップの前提 …
-
-
AWS Organizationsのルートユーザー管理(Root user management)でメンバーアカウントのルートユーザー認証を無効にしました
2024年11月発表のAWS Organizations を使用するお客様のため …
-
-
RDSのポイントインタイムリカバリをしました
WordPressで画像アップロードができなくなった(AWS WAFでブロックし …
-
-
ALBの重み付けルーティングでカナリアリリースをしてみました
当ブログのAMIの更新と、ALBターゲットグループのヘルスチェックを変更したかっ …
-
-
RDS for MySQL のインスタンスタイプ変更
当ブログのデータベースは、RDS for MySQLです。 個人利用ですし、障害 …
-
-
RedmineをELB(ALB)でAutoScalingグループへ負荷分散
高可用なRedmineを作るためのELBの設定です。 高可用なRedmine R …