Skip to content

Fix Docker volume mount issue and ensure package directory exists #8

Fix Docker volume mount issue and ensure package directory exists

Fix Docker volume mount issue and ensure package directory exists #8

name: Deploy to AWS CloudFormation (Amazon Linux 2)
on:
push:
branches:
- main
- deploy
env:
AWS_REGION: ap-northeast-1
PROJECT_NAME: LambdaFramework
permissions:
id-token: write
contents: read
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Amazon Linux 2 compatible package
run: |
# Amazon Linux 2コンテナで依存関係をビルド
docker run --rm -v $(pwd):/var/task amazonlinux:2 \
bash -c "
cd /var/task
yum update -y
yum install -y python3 python3-pip
python3 -m pip install --upgrade pip
python3 -m pip install -r requirements.txt -t ./package
echo 'Dependencies installed for Amazon Linux 2'
ls -la ./package
du -sh ./package
"
- name: Create optimized deployment package
run: |
# パッケージディレクトリを作成
mkdir -p lambda-package
# Lambda関数のコードをコピー
cp -r LambdaFramework/* lambda-package/
# Amazon Linux 2用の依存関係をコピー
cp -r package/* lambda-package/
# 不要なファイルを削除(サイズ最適化)
find lambda-package -name "*.pyc" -delete
find lambda-package -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true
find lambda-package -name "*.dist-info" -type d -exec rm -rf {} + 2>/dev/null || true
# パッケージを圧縮
cd lambda-package
zip -r ../lambda-deployment-package.zip .
cd ..
echo "Optimized deployment package created"
ls -la lambda-deployment-package.zip
du -sh lambda-deployment-package.zip
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ github.ref == 'refs/heads/main' && secrets.AWS_ROLE_ARN_PROD || secrets.AWS_ROLE_ARN_DEV }}
aws-region: ${{ env.AWS_REGION }}
- name: Upload package to S3
run: |
# ブランチに基づいて環境設定を決定
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
S3_BUCKET="${{ vars.S3_BUCKET_PROD }}"
ENVIRONMENT="production"
else
S3_BUCKET="${{ vars.S3_BUCKET_DEV }}"
ENVIRONMENT="development"
fi
# S3にパッケージをアップロード
aws s3 cp lambda-deployment-package.zip s3://$S3_BUCKET/lambda-packages/
echo "Package uploaded to s3://$S3_BUCKET/lambda-packages/"
- name: Deploy with SAM
run: |
STACK_NAME="LambdaFramework"
# ブランチに基づいて環境設定を決定
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
ENVIRONMENT="production"
S3_BUCKET="${{ vars.S3_BUCKET_PROD }}"
else
ENVIRONMENT="development"
S3_BUCKET="${{ vars.S3_BUCKET_DEV }}"
fi
echo "Deploying to environment: $ENVIRONMENT"
echo "Stack name: $STACK_NAME"
echo "AWS Region: $AWS_REGION"
echo "S3 Bucket: $S3_BUCKET"
# カスタムパッケージを使用してビルド
sam build --use-container
sam deploy --no-confirm-changeset --no-fail-on-empty-changeset \
--stack-name $STACK_NAME \
--s3-bucket $S3_BUCKET \
--parameter-overrides ProjectName=${{ env.PROJECT_NAME }} Environment=$ENVIRONMENT
env:
AWS_REGION: ${{ env.AWS_REGION }}
SAM_CLI_TELEMETRY: 0
- name: Deploy status
if: always()
run: |
# ブランチに基づいて環境設定を決定
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
STACK_NAME="lambda-framework-prod"
ENVIRONMENT="production"
else
STACK_NAME="lambda-framework-dev"
ENVIRONMENT="development"
fi
echo "Amazon Linux 2 deployment completed for branch: ${{ github.ref }}"
echo "Stack name: $STACK_NAME"
echo "Environment: $ENVIRONMENT"
echo "Commit: ${{ github.sha }}"