CodePipelineによるlambdaの自動リリースのメモ(未来の自分のコピペ用)
はじめに
自分用のメモとして作りました
python 3.8 の hello world を返す lambda を2つリリースします
手順
-
githubのリポジトリをフォークする
- AWSのマネジメントコンソールでパイプラインを作る
- lambdaがリリースされるのを確認する
注意
CodePipelineは従量制の課金です!
無料枠でも100回を越えると課金されます
前提
AWSのアカウントがあること
githubのアカウントがあること
詳細
1. githubのリポジトリをフォークする
githubにログインして、赤線の所をクリックするとforkできます
https://github.com/lnsw/sample-lambda-release
2. AWSのマネジメントコンソールでパイプラインを作る
下記の6つのステップがあります
1. 新規のパイプラインを作成する
2. ソースステージを追加する
3. ビルドステージを追加する
4. デプロイステージを追加する
5. レビュー
6. 調整
1. 新規のパイプラインを作成する
https://us-west-1.console.aws.amazon.com/codesuite/codepipeline/pipeline/new?region=us-west-1 (このリンクは北カルフォルニアです)
2.ソースステージを追加する
ソースは github になります
- GitHub (Version 1) を選択します
- GitHubに接続は、説明を省いてすいませんがなんとかうまいぐあいにやってください
- リポジトリはフォークした自分のsample-lambda-release を選択
- ブランチは master を選択
- 次にを押します
3. ビルドステージを追加する
ここはプロジェクトの設定もあって少し長いです
- AWS CodeBuild を選択します
- リージョンは自動で入ります
- プロジェクト名は、プロジェクトを作成するを押して別のウィンドウに移ります
プロジェクトの設定
環境
よくわからないですが最新のを選択するようです
- マネージド型イメージ
- ubuntu
- Standard
- aws/codebuild/standard:4.0
- aws/codebuild/standard:4.0-20.09.14 (最新の)
Buildspec、バッチ設定、ログ
パイプラインの作成に戻ってきます
- S3バケットを1つ作ります。名前は何でもいいです。例)sample-lambda-release-backet-(ユーザー名)等(※1)
- 環境変数 - オプショナル で環境変数の追加を押します
- それから S3_ARTIFACT_BUCKET と作ったバケット名を入力します
- 次に を押します
4. デプロイステージを追加する
- デプロイステージの前にIAMでパイプライン用のロールを1つ作ります
- ロールの作成 で ユースケースの選択でCloudFormationを選ぶ
- Attach アクセス権限ポリシー で 4つのポリシーを
AWSCloudFormationFullAccess
AWSLambdaFullAccess
AmazonAPIGatewayAdministrator
IAMFullAccess
をアタッチします (とりあえず動かすのを優先のためで、正式に利用するなら適切な権限にします) - 名前はsample-lambda-release-deploy-role として作成する
- デプロイステージに戻って デプロイプロバイダーに AWS Cloudformatin を選択します
- アクションモードは スタックを作成または更新する を選びます
- スタック名は sample-lambda-release
- テンプレートのアーティファクトは BuildArtifact 、ファイル名は packaged.yml を入力します
- 能力 - オプショナル は3つ選びます。CAPABILITY_IAM 、 CAPABILITY_NAMED_IAM 、 CAPABILITY_AUTO_EXPAND
- ロール名は、さきほど作ったパイプライン用のロールのARNを入力します(画面を表示した後に作ったロールは選択できないっぽいです)
- 次に を押します
5. レビュー
- パイプラインを作成する を押します
6. 調整
このままだとビルドステージでエラーになるので1つ修正をします
ビルドステージのロールの権限
ビルドステージで新規のロールを作成しましたが(sample-lambda-release で絞るとでてきます)
IAMでこのロールに「AmazonS3FullAccess」をアタッチします
(とりあえずリリースできる事を優先しました。※1で作ったS3バケットへの権限だけで設定するのが安全です)
こんな感じ
{
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::codepipeline-us-west-1-*",
"arn:aws:s3:::sample-lambda-release-backet-(ユーザー名)等",
"arn:aws:s3:::sample-lambda-release-backet-(ユーザー名)等/*"
],
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketAcl",
"s3:GetBucketLocation"
]
},
3. lambdaがリリースされるのを確認する
- 変更をリリースする を押して待ちます
以上です
あとは sample-lambda-releas リポジトリにある hello_worldの中のapp.py を変更したり、template.yml にAPIGateway や cloudfront や DynamoDB とかを追加して、リポジトリにプッシュすれば、自動でリリースされます
残課題
- APIGateway を追加する
- Deploy のロールを適切にする
- CodePipelineを作る、Cloudformation のテンプレートを作る
Author And Source
この問題について(CodePipelineによるlambdaの自動リリースのメモ(未来の自分のコピペ用)), 我々は、より多くの情報をここで見つけました https://qiita.com/lunar_sword3/items/d73cc59978e241deafcb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .