GitHub ActionsでAWS Lambdaに自動デプロイ
GitHub ActionsでAWS Lambdaに自動デプロイ DevOpsの実践において、CI / CD(継続的インテグレーション / 継続的デリバリー)は欠かせない要素となっています。特に、クラウドサービスを活用し […]
Filter by Category
GitHub ActionsでAWS Lambdaに自動デプロイ DevOpsの実践において、CI / CD(継続的インテグレーション / 継続的デリバリー)は欠かせない要素となっています。特に、クラウドサービスを活用し […]
Pythonのコマンドラインで特定の関数のみを指定して実行する AWS Lambdaではプログラム実行時に関数を指定しますが、pythonコマンドは通常、ファイル単位で指定するのでそのままでは実行できません。そのためロー […]
PythonとGhostscriptでPDFを軽量化 書類の添付などでブラウザからPDFをアップロードする際に数MB以下にしないとアップロードできないことがありますが、印刷用に作成したPDFや複数画像を一枚にまとめたPD […]
Alembicでheadが複数存在する時に発生するエラーの修正 FastAPI, PostgreSQL, Alembicで開発中のプロジェクトで、alembic upgrade headコマンドでマイグレーションを実行し […]
Jetson NanoのWiFiモジュール取り付け手順 Jetson NanoはNVIDIA社が提供するGPUを搭載した小型かつ低電力で動作する開発用ボードです。GPUを搭載しているのでCUDAを使って画像処理などの並列 […]
2024年度 長期インターンシップについて For English page 概要 2024年度 インターンシップの募集を開始します。 募集内容 ・インターンシップ 募集職種 ・機械学習エンジニア・ウェブアプリケーション […]
Announcement about Internships for 2024 日本語のページ Overview Recruitment for the 2024 internship program is now op […]
2023年に最も読まれた記事ランキング あけましておめでとうございます2024年もどうぞよろしくお願いします ファントムは2024年も皆様のお役に立てるよう精進しますより一層のご支援、お引立てを賜りますようお願い申し上げ […]
CodePipelineでCodeBuildのテストを自動化 CodeCommitで管理しているリポジトリをCodeBuildでテストする場合は通常、手動でテストを実行させる必要がありますが、CodePipelineを使 […]
AWS CodeCommitでプルリクエスト・マージ ソースコードの管理にはGitHubやGitLabを採用している方が多いかもしれませんが、AWSにもCodeCommitというサービスがあり、5人までは無料で5人以上で […]
FastAPI + SQLAlchemy + Alembic + SQLiteでマイグレーション FastAPIにはデータベースのマイグレーション機能はありませんが、Alembicというデータベースのマイグレーションツー […]
AWS LambdaとS3、SNSでファイルのアップロードを自動通知 AWS Lambdaは特定の条件を満たすときにサーバーレスでPython(他のプログラミング言語も)を実行できるサービスです。トリガーを検知したときや […]
GitHubリポジトリを別のOrganizationに移行 非公開用のOrganization(組織)で管理していたリポジトリの公開範囲をプライベートから公開に変更するにあたって、リポジトリを別のOrganization […]
PythonとMoviePyで動画ファイルの指定時間ごとの分割を自動化 OpenCVなどで動画の処理を行う際に、1分毎の変化や10分毎に結果を見たいときに一連の動画から指定した時間毎に分割して切り出したいことがあります。 […]
OpenCVで動画ファイルの最終フレームを取得 PythonとOpenCVを使用して動画ファイルの最大フレーム数を取得する方法を解説をします。処理の確認用に取得した最大フレーム数とファイル名をソートして表示させます。 コ […]
Amazon Route 53で新規ドメインを登録 ウェブサイトやウェブサービスを運営する際にドメインは欠かせない要素です。この記事では、Amazon Route 53で新しいドメインを登録する方法について解説します。 […]
GitHub CopilotをPyCharmで使用するまでの手順 GitHub Copilotは、プログラミングの効率を飛躍的に向上させるツールで、開発者にとって非常に便利なコーディングのサポートを提供します。本記事では […]
PyCharm 2023.2から追加されたBlackによるコード成形 Pythonのコード成形で人気のBlackがPyCharm 2023.2から環境設定画面で設定可能になりました。従来はpipなどでインストールしていま […]
S3のライフサイクルルールの落とし穴 保存したデータが必要以上に増えないようにライフサイクルルールで指定した日数を経過したデータは削除する設定にしていましたが、後日改めてバケットを確認するとフォルダ、ファイルどちらも削除 […]
S3でストレージクラスを一括で変更 デフォルトではS3のストレージクラスは「標準」になっていますが、このストレージクラスは頻繁にアクセスするデータを保存するのに適した設定なので、バックアップファイルなどの頻繁にアクセスし […]
DevOpsの実践において、CI / CD(継続的インテグレーション / 継続的デリバリー)は欠かせない要素となっています。特に、クラウドサービスを活用した開発では、効率的なデプロイメントプロセスの構築が重要です。
本番環境での運用を想定してmainブランチにマージ後、自動でAWS Lambdaへデプロイを実行するまでの流れを解説します。
.
├── .github
│ └── workflows
│ └── main.yml
└── lambda
├── lambda_function.py
└── requirements.txt
デプロイ時は必要なファイルだけをまとめてzip化するため、Lambdaで使用するlambda_function.pyなどはlambda配下に作成しています。
デプロイを行うLambda関数を作成します。関数名とランタイムに使用する言語、バージョンは任意の情報を入力・選択します。
Lambda関数が作成されました。赤枠で囲っているARNは後ほどポリシー作成時に使用するのでコピーしておきます。
IAM > IDプロバイダを選択してIDプロバイダの追加を行います。プロバイダの設定は下記の情報を入力して「プロバイダを追加」を押下します。
IAM > ポリシーを選択してポリシーの作成を行います。ポリシーエディタでJSONタブを選択して下記情報を入力します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:UpdateFunctionCode"
],
"Resource": "arn:aws:lambda:us-west-2:ID:function:FUNCTIONNAME"
}
]
}
※arn:awsから始まる赤枠には先ほどコピーしておいたLambda関数のARNを指定します。
ポリシー名を入力して「ポリシーの作成」を押下します。
IAM > ロールを選択し、「ロールを作成」をクリックします。ロールの設定は下記の情報を入力して「次へ」を押下します。
先ほど作成したポリシーを選択して「次へ」を押下します。
「ロール名」と「信頼されたエンティティ」に下記の情報を入力して「次へ」を押下します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::ID:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
},
"StringLike": {
"token.actions.githubusercontent.com:sub":"repo:ORGANIZATION/REPOSITORY:*"
}
}
}
]
}
ここで作成したロールのARNはGitHubのシークレット情報に登録するためコピーしておきます。AWS側の設定は以上で完了です。
Settings > Secrets and variables > Actionsを選択し、「New repository secret」を押下して、下記の情報を登録します。
2つのシークレット情報の登録が完了しました。
GitHubリポジトリの「Actions」を選択してデプロイのワークフローを作成します。
.github/workflows/main.ymlに下記情報を入力して「Commit changes」を押下し、mainブランチを更新します。
name: AWS Lambda Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ secrets.AWS_REGION }}
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
role-session-name: GitHubActions
- name: get-caller-identity is allowed to run on role.
run: aws sts get-caller-identity
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: |
cd lambda
pip install -r requirements.txt -t .
- name: Deploy to AWS Lambda
run: |
cd lambda && zip -r package.zip ./*
aws lambda update-function-code \
--function-name FUNCTIONNAME --zip-file fileb://package.zip --publish
GitHub側の設定は以上で完了です。mainブランチに直接コミットしたので、ここでデプロイのワークフローが実行されていると思います。
mainブランチに直接プッシュまたは、lambda_function.pyを変更しプルリクエストを作成後、mainブランチにマージします。
GitHubリポジトリの「Actions」を選択してワークフローの状況を確認できます。ワークフローが正常に完了すると緑のチェックマークが表示されます。
ワークフロー完了後、Lambdaのバージョンを確認するとコードが更新され、新しいバージョンが追加されました。
群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。
メーリングリストに登録するとファントムの最新情報をお届けします
お客様のメールアドレスを共有することはありません