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を使うことで、まずは一通りのパイプラインと開発環境を作ってしまえるので、非常に便利でした。
最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。
【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。
【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。
【PR】 「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル」という本を書きました。

開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター3年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
AWS Organizationsからメンバーアカウントを直接「閉じる」ことができるようになりました
これまでは、メンバーアカウントはOrganizations組織から「除外」して独 …
-
-
プライベートサブネットのEC2でセッションマネージャを使うようVPCエンドポイントを構成する
インターネットゲートウェイへのルートがないルートテーブルに関連付けられたプライベ …
-
-
名前解決してセッションマネージャが使えるようにVyOSのhost_name.pyを編集しました
発生したエラー セッションマネージャからこんなエラーが出力されました。 [cra …
-
-
AWS ControlTowerで既存アカウントをまとめて追加
AWS Organizationsに新たに招待したアカウントをAWS Contr …
-
-
EC2とRDSのMySQLを他のAWSアカウントへ移設する
他のAWSアカウントへシステムごと移設した場合の手順です。 構成はEC2とRDS …
-
-
AWS WAFのマネージドルールを見てみました
Web ACLで[Add managed rule groups]を選択しました …
-
-
Amazon SNSサブスクリプションフィルターで優先度別のSQSキューにサブスクライブする
EC2のコンシューマーアプリケーションは優先度の高いキューのメッセージを先に処理 …
-
-
Rocket.ChatにAWS Lambda(Python)から投稿する
Rocket.ChatにAPIで投稿するテスト(Postman)をやってみて、使 …
-
-
Amazon Glacierでボールトロックポリシーの作成開始をしてみました
Glacierを単体で使用することもそうそうないので、確認しました。 まずボール …
-
-
Backlogの課題チケット更新内容をMicrosoft Teamsに通知する(AWS Lambda Python)
BacklogにSlack連携が追加されました。 ですが、私の所属している会社で …