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
関連記事
-
NATインスタンスを作成する
プライベートサブネットのEC2インスタンスからカスタムメトリクスとCloudWa …
-
IAMユーザーのマネジメントコンソールログインパスワードを変更してDynamoDBに記録するLambda(Python)
やりたいこと IAMユーザーのマネジメントコンソールへのサインインパスワードを動 …
-
RDSのスナップショットをS3へエクスポートが日本語マネジメントコンソールでもできるようになってました
RDSスナップショットをS3にエクスポートする新機能を試そうかと思ったのときは、 …
-
EC2 Windows インスタンス PowerShellでメタデータを見る
Linuxインスタンスならcurlコマンドで確認すればいいのですが、Window …
-
S3バケットのデフォルト暗号化はデフォルトだったことを確認しました
S3バケットのデフォルト暗号化は名前のとおりだとデフォルトなので、暗号化を指定し …
-
オンプレミスに見立てたオハイオリージョンにVyOSインスタンスを起動して東京リージョンからVPN接続
AWSクイックスタートのActive Directory Domain Serv …
-
AWS Cost Explorerの履歴を38ヶ月とリソース別コストを見られるように設定しました
AWS Cost Explorer がより詳細な履歴データの提供を開始 知らなか …
-
CloudFormationで起動テンプレートのバージョン更新をした際にAuto ScalingのEC2インスタンスを置き換える
やりたいこと タイトルのとおり、起動テンプレートのバージョン変更(AMIの置換) …
-
AWS Lambda(Python)からZoom投票作成
以前、Zoomの投票(アンケート)をAPI経由で作成するというブログで書きました …
-
ブログの画像を別アカウントのS3に移動するためにIAMロールでクロスアカウントアクセス
ずっと先延ばしにしていたのですが、このブログの画像はEC2から直接配信しています …