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 }}"
0 commit comments