Skip to content

Commit 4d11311

Browse files
Add Amazon Linux 2 compatible package building for GitHub Actions
1 parent 445c442 commit 4d11311

2 files changed

Lines changed: 155 additions & 3 deletions

File tree

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
name: Deploy to AWS CloudFormation (Amazon Linux 2)
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- deploy
8+
9+
env:
10+
AWS_REGION: ap-northeast-1
11+
PROJECT_NAME: LambdaFramework
12+
13+
permissions:
14+
id-token: write
15+
contents: read
16+
17+
jobs:
18+
build-and-deploy:
19+
runs-on: ubuntu-latest
20+
21+
steps:
22+
- name: Checkout code
23+
uses: actions/checkout@v4
24+
25+
- name: Set up Docker Buildx
26+
uses: docker/setup-buildx-action@v3
27+
28+
- name: Build Amazon Linux 2 compatible package
29+
run: |
30+
# Amazon Linux 2コンテナで依存関係をビルド
31+
docker run --rm -v $(pwd):/var/task public.ecr.aws/lambda/python:3.10 \
32+
bash -c "
33+
cd /var/task
34+
python -m pip install --upgrade pip
35+
pip install -r requirements.txt -t ./package
36+
echo 'Dependencies installed for Amazon Linux 2'
37+
ls -la ./package
38+
du -sh ./package
39+
"
40+
41+
- name: Create optimized deployment package
42+
run: |
43+
# パッケージディレクトリを作成
44+
mkdir -p lambda-package
45+
46+
# Lambda関数のコードをコピー
47+
cp -r LambdaFramework/* lambda-package/
48+
49+
# Amazon Linux 2用の依存関係をコピー
50+
cp -r package/* lambda-package/
51+
52+
# 不要なファイルを削除(サイズ最適化)
53+
find lambda-package -name "*.pyc" -delete
54+
find lambda-package -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true
55+
find lambda-package -name "*.dist-info" -type d -exec rm -rf {} + 2>/dev/null || true
56+
57+
# パッケージを圧縮
58+
cd lambda-package
59+
zip -r ../lambda-deployment-package.zip .
60+
cd ..
61+
62+
echo "Optimized deployment package created"
63+
ls -la lambda-deployment-package.zip
64+
du -sh lambda-deployment-package.zip
65+
66+
- name: Configure AWS credentials
67+
uses: aws-actions/configure-aws-credentials@v4
68+
with:
69+
role-to-assume: ${{ github.ref == 'refs/heads/main' && secrets.AWS_ROLE_ARN_PROD || secrets.AWS_ROLE_ARN_DEV }}
70+
aws-region: ${{ env.AWS_REGION }}
71+
72+
- name: Upload package to S3
73+
run: |
74+
# ブランチに基づいて環境設定を決定
75+
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
76+
S3_BUCKET="${{ vars.S3_BUCKET_PROD }}"
77+
ENVIRONMENT="production"
78+
else
79+
S3_BUCKET="${{ vars.S3_BUCKET_DEV }}"
80+
ENVIRONMENT="development"
81+
fi
82+
83+
# S3にパッケージをアップロード
84+
aws s3 cp lambda-deployment-package.zip s3://$S3_BUCKET/lambda-packages/
85+
echo "Package uploaded to s3://$S3_BUCKET/lambda-packages/"
86+
87+
- name: Deploy with SAM
88+
run: |
89+
STACK_NAME="LambdaFramework"
90+
# ブランチに基づいて環境設定を決定
91+
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
92+
ENVIRONMENT="production"
93+
S3_BUCKET="${{ vars.S3_BUCKET_PROD }}"
94+
else
95+
ENVIRONMENT="development"
96+
S3_BUCKET="${{ vars.S3_BUCKET_DEV }}"
97+
fi
98+
99+
echo "Deploying to environment: $ENVIRONMENT"
100+
echo "Stack name: $STACK_NAME"
101+
echo "AWS Region: $AWS_REGION"
102+
echo "S3 Bucket: $S3_BUCKET"
103+
104+
# カスタムパッケージを使用してビルド
105+
sam build --use-container
106+
sam deploy --no-confirm-changeset --no-fail-on-empty-changeset \
107+
--stack-name $STACK_NAME \
108+
--s3-bucket $S3_BUCKET \
109+
--parameter-overrides ProjectName=${{ env.PROJECT_NAME }} Environment=$ENVIRONMENT
110+
env:
111+
AWS_REGION: ${{ env.AWS_REGION }}
112+
SAM_CLI_TELEMETRY: 0
113+
114+
- name: Deploy status
115+
if: always()
116+
run: |
117+
# ブランチに基づいて環境設定を決定
118+
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
119+
STACK_NAME="lambda-framework-prod"
120+
ENVIRONMENT="production"
121+
else
122+
STACK_NAME="lambda-framework-dev"
123+
ENVIRONMENT="development"
124+
fi
125+
126+
echo "Amazon Linux 2 deployment completed for branch: ${{ github.ref }}"
127+
echo "Stack name: $STACK_NAME"
128+
echo "Environment: $ENVIRONMENT"
129+
echo "Commit: ${{ github.sha }}"

.github/workflows/deploy.yml

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,32 @@ jobs:
2727
with:
2828
python-version: '3.10'
2929

30-
- name: Install dependencies
30+
- name: Install dependencies for Amazon Linux 2
3131
run: |
3232
python -m pip install --upgrade pip
33-
pip install -r requirements.txt
33+
# Amazon Linux 2用のバイナリをダウンロード
34+
pip install --platform manylinux2014_x86_64 --only-binary=all --target ./package -r requirements.txt
35+
# ネイティブバイナリが必要な場合は、Amazon Linux 2コンテナでビルド
36+
docker run --rm -v $(pwd):/var/task public.ecr.aws/lambda/python:3.10 \
37+
pip install -r requirements.txt -t /var/task/package
38+
# パッケージサイズを確認
39+
du -sh ./package
40+
ls -la ./package
41+
42+
- name: Create deployment package
43+
run: |
44+
# パッケージディレクトリを作成
45+
mkdir -p deployment-package
46+
# Lambda関数のコードをコピー
47+
cp -r LambdaFramework/* deployment-package/
48+
# 依存関係をコピー
49+
cp -r package/* deployment-package/
50+
# パッケージを圧縮
51+
cd deployment-package
52+
zip -r ../lambda-deployment-package.zip .
53+
cd ..
54+
echo "Deployment package created: lambda-deployment-package.zip"
55+
ls -la lambda-deployment-package.zip
3456
3557
- name: Debug AWS Role ARN
3658
run: |
@@ -74,7 +96,8 @@ jobs:
7496
echo "AWS Region: $AWS_REGION"
7597
echo "S3 Bucket: $S3_BUCKET"
7698
77-
sam build
99+
# カスタムパッケージを使用してビルド
100+
sam build --use-container
78101
sam deploy --no-confirm-changeset --no-fail-on-empty-changeset \
79102
--stack-name $STACK_NAME \
80103
--s3-bucket $S3_BUCKET \

0 commit comments

Comments
 (0)