0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LaravelをGitHub ActionsでEC2に自動デプロイしてみた(AWS編)

Last updated at Posted at 2024-11-25

経緯

今まで直接SSH接続してgit pullやらphp artisan やらをしていたことが多く
また1から作成したことがないなと思いこの機会に学習したので備忘録として残します。

色々検索してみる

「github ec2 自動デプロイ」でググるといろんな方法がありました。
認証鍵の方法だとGitHub ActionsのIPが固定じゃないので「セキュリティグループでSSHのIP制限をしていたら使えないんじゃないか?」と思い今回はOpenID Connectを使用することにしました。

※self-hosted runner等使用すると認証鍵でもいけそうでした。

構成

Amazon Linux2023
Laravel (sailを使用)
Vue3

  • git,composer等、使用するものをEC2でインストール済み

やること

AWS

  1. IDプロバイダの作成
  2. IAMロールの作成
  3. ポリシーの作成

1. IDプロバイダの作成

  1. AWS Management ConsoleでIAMの管理画面に移動し「IDプロバイダ」を選択
    image.png

  2. 以下を追加し作成
    image.png
    • プロバイダーのタイプ: OpenID Connect
    • プロバイダーURL: https://token.actions.githubusercontent.com
    • 対象者: sts.amazonaws.com

    token.actions.githubusercontent.com:audは、トークンの発行者(audience)を指定します。ここでは 'sts.amazonaws.com' を使用
    token.actions.githubusercontent.com:subは、トークンのサブジェクトを指定し、特定のGitHubリポジトリやブランチに対するアクセスを制限します。

    引用元

2. IAMロールの作成

  1. IAMの管理画面で「ロール」を選択
    image.png

  2. 信頼されたエンティティタイプを「ウェブアイディンティティ」を選択し下記を入力
    アイデンティティプロバイダー: token.actions.githubusercontent.com
    Audience: sts.amazonaws.com
    GitHub 組織: ユーザー名 (今回は個人のためユーザー名になります)
    GitHub repository: 対象のリポジトリ
    GitHub branch: 対象のブランチ

    image.png

  3. 許可ポリシーは設定せずに次へ

  4. 名前、確認、および作成画面で任意のロール名を入力(必要であれば説明も)しロールを作成

  5. 作成したロールを確認しARNをメモします。(GitHubで使用します)

3. ポリシーの作成

  1. IAMの管理画面にある「ポリシー」から「ポリシーの作成」を押下
    image.png

  2. ポリシーエディタを「JSON」に変更
    image.png
    下記を追加し「次へ」ボタン押下

    json
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Effect": "Allow",
    			"Action": [
    				"ssm:SendCommand",
    				"ssm:GetCommandInvocation"
    			],
    			"Resource": [
    				"arn:aws:ec2:[リージョン]:[アカウントID]:instance/*",
    				"arn:aws:ssm:[リージョン]::document/AWS-RunShellScript"
    			]
    		},
    		{
    			"Effect": "Allow",
    			"Action": [
    				"ssm:GetCommandInvocation"
    			],
    			"Resource": [
    				"*"
    			]
    		}
    	]
    }
    
    • Effect
      許可または拒否を設定。
    • Action
      許可もしくは拒否する操作。
    • Resource
      対象のリソース。
    • [リージョン]
      使用しているEC2のリージョンを記載します。(例:ap-northeast-1)
    • [アカウントID]
      IAMダッシュボードの右側に記載されているアカウントIDになります。
      インスタンスARNにも記載されています。

    GetCommandInvocationがResourceをグローバル(*)にしないと認識してくれませんでした。。。


  3. 「ポリシー名」を入力(必要に合わせて説明も)しポリシーを作成する
    スクリーンショット 2024-11-24 17.04.19.png

  4. [2. IAMロールの作成]で作成したロールに戻り「ポリシーをアタッチ」を押下し先ほど作成したポリシーを追加
    image.png

最後に

ロールやポリシーの付け方がいろんな方法で可能なのでどこで設定したか戸惑ってしまいました。
AWSの設定はこれで終了です。
次回はGitHubの設定をしていきます。↓

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?