Add Amazon Linux 2 compatible package building for GitHub Actions #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 public.ecr.aws/lambda/python:3.10 \ | |
| bash -c " | |
| cd /var/task | |
| python -m pip install --upgrade pip | |
| 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 }}" |