投稿

ラベル(AWS)が付いた投稿を表示しています

[WIP][AWS]EC2でSpringBootアプリケーションを実行する

イメージ
SpringBootで開発したWebアプリケーションをEC2で実行するまでの手順をまとめます。 jarファイルとwarファイルの2通りの実行方法がありますので両方まとめます。主な違いは以下の通りです。 jarファイル 通常のJavaアプリケーションをパッケージングした内容で、SpringBootの場合、tomcatを内包している。そのため、jarファイル単独で実行できる。 warファイル Webアプリケーション向けにパッケージングされている。tomcat上にデプロイして実行する。 なお、EC2の構築については以下記事で構築したものを使います。 https://www.s-watanabe.work/2023/05/awsamazon-ec2.html 環境について EC2プラットフォーム Ubuntu 22.04.3 LTS ローカルビルド環境 Gradle 8.3 JDKバージョン (ローカル/EC2) openjdk version "17.0.9" 2023-10-17 jarファイルでの実行方法 ローカル(WSL)での作業 gradleインストール sudo add-apt-repository ppa:cwchien/gradle sudo apt update sudo apt upgrade gradle sudo apt autoremove 確認 $ gradle -v ------------------------------------------------------------ Gradle 8.3 ------------------------------------------------------------ jarファイル作成 build.gradle修正 以下を追加する。Main-Classはmainメソッドを持つクラスを指定する。 jar { manifest { attributes 'Main-Class': 'TestApplication'

[AWS]Amazon EC2

イメージ
AWSの無料利用枠(アカウント作成から1年)を使って、EC2インスタンスを起動してブラウザからHTTPアクセスするところまでをまとめます。 EC2インスタンスを作成 EC2インスタンスを作成する EC2 > インスタンス > インスタンスを起動 をクリックして以下の項目を入力・選択します。 インスタンス名、OSイメージ インスタンス名は任意の名前、OSイメージは自分の扱いやすいOSを選択します。ここではUbuntuを選択しました。 インスタンスタイプ、キーペア インスタンスタイプ インスタンスタイプは無料枠で利用可能な t2.micro を選択します。 キーペア EC2インスタンスの作成後、SSH接続して各種必要ソフトなどのセットアップを行います。その際必要になるのがキーペア(公開鍵と秘密鍵)を作成します。公開鍵はEC2インスタンス内に保存され、秘密鍵はユーザー自身がクライアント端末で管理します。 キーペア名 任意の名前 キーペアのタイプ RSA プライベートキーファイル形式 .pem 作成するとプライベートキー(.pem)ファイルがダウンロードされるので、ローカルの任意の場所へ保管しておきます。 ネットワーク設定 AWSには既存のセキュリティグループが一つ用意されているので、既存のセキュリティグループを選択します。 インスタンスを起動 インスタンスを起動をクリックして少し待ち、以下のような画面になればひとまずOKです。 アプリケーションセットアップ 作成したEC2インスタンスにSSHで接続し、アプリケーションのセットアップをします。 SSH接続 構文: ssh -i [プライベートキー] [EC2インスタンス] SSHコマンドは EC2 > インスタンス > [作成したインスタンス] > 接続 > SSH から確認できます。 SSH接続: $ ssh -i "test-key.pem" ubuntu@ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com Are you sure you want to continue connecting (yes/n

【PHP】Amazon SESでEメール送信

aws-sdk-phpを利用してAmazon SESからEメールを送信する方法のまとめです。 ※aws-sdk-phpのセットアップは以下リンク参照 【AWS】S3へファイルアップロード(PHP) 公式の詳細はこちら https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-using-sdk-php.html 実装 名前空間の定義 use \Aws\Credentials\CredentialProvider; use \Aws\Ses\SesClient; use \Aws\Exception\AwsException; 処理 /** * Amazon SES Sendmail * @param string $subject * @param string $body * @param string $to * @param string $from_email * @param string $from_name = null * @return bool * @throw Exception */ public static function send( string $subject, string $body, string $to, string $from_email, string $from_name = null ) : bool { try{ // ① 認証情報を取得 $provider = CredentialProvider::defaultProvider(); // ② SES Clientオブジェクト生成 $client = new SesClient(array( 'region' => 'us-west-2', 'version' => '2010-12-01', 'credentials' => $provid

AWS-CLI使い方まとめ(S3編)

本番環境へSSH接続できなくて(権限なし)、DBのdumpファイルをどうやってGETしようか試行錯誤した時の方法です。 セッションマネージャーからAWS-CLIでS3バケットにアップロードして、S3経由で取得できました。 これは色々応用できるなと思い、AWS-CLIの使い方をまとめておきます。 ということでまずはS3操作について... 事前準備 AWS-CLIのインストール https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html $ aws --version aws-cli/1.16.170 Python/3.7.4 Darwin/17.5.0 botocore/1.12.160 設定 以下2ファイルを用意 (無ければ作る) $ cat ~/.aws/config [default] region = ap-northeast-1 $ cat ~/.aws/credentials [default] aws_access_key_id = AAAAAAAAAAAAAAAAAAAA aws_secret_access_key = BBBBBBBBBBBBBBB/CCCCCCCCCCCCCCCCCCCCCCCC ※複数環境を使い分ける場合は、credentialsに設定した[キー]を --profile [キー] で指定する バケットの一覧 書式 aws s3 ls 使用例 $ aws s3 ls 2019-10-02 12:57:09 test.images 2019-10-25 11:52:43 test.bucket 2019-10-23 17:46:10 test.xxxxxxxx 指定バケット配下のファイルの一覧 書式 aws s3 ls {バケット名} 使用例 $ aws s3 ls test.bucket 2019-10-04 18:24:00 1289018 image-0001.png 2019-10-03 16:09:47 1289018 image-0002.p

【AWS】AWSコンソールのログインに二段階認証(MFA)を設定する

イメージ
AWSコンソールへのログインは通常アカウント、ユーザー名、パスワードによって認証しますが、これにMFAを加えて確実に本人しか認証できないようにするのがベターです。 昨今はセキュリティ対策として様々なシステムで二段階認証が設定できるようになっているのでこれを機に設定しておくと良いと思います。システムが変わっても方法はさほど変わらないはずです。 MFAとは MFA M ulti- F actor A uthentication 携帯電話や他のデバイスを仮想多要素認証として使用することです。 このデバイスをMFAデバイスといいます。 事前準備 ここではMFAデバイスとしてAndroid携帯を使用します。 これにより、このAndroid携帯の持ち主にしか認証できないようにするのが目的です。 認証アプリケーションをインストール 認証用のアプリとして、Google 認証システムを使います。 https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2 これ以外にもいろいろありますが、現時点で使ったことはありません。 この他の認証アプリケーション Symantec製 https://play.google.com/store/apps/details?id=com.verisign.mvip.main マイクロソフト製(Azureはこれじゃないとダメらしい) https://play.google.com/store/apps/details?id=com.azure.authenticator 事前準備は以上 MFAの設定 AWSコンソールへログイン IAM ユーザーアクセスと暗号化キーの管理を開く サービスをクリックして検索窓に iam と入れると出てくる) サイドメニューからユーザーをクリック ユーザーの一覧から自分のユーザー名を探してクリック 認証情報のタブをクリック MFAデバイスの割り当ての「管理」をクリック 仮想MFAデバイスを

【AWS】S3へファイルアップロード(PHP)

以前書いた FuelPHPでファイルアップロード の続きで、Amazon S3へアップロードする部分をまとめます。 事前準備 SDKセットアップ composerを使ってインストールします。 以下をcomposer.jsonに追加してcomposer installを実行します。 "aws/aws-sdk-php": "^3.99" 実装 S3へアップロードする処理 ライブラリ use \Aws\Credentials\CredentialProvider; use \Aws\S3\S3Client; use \Aws\S3\Exception\S3Exception; アップロード処理 // ①認証情報を取得 $provider = CredentialProvider::defaultProvider(); // ②S3Clientを生成 $s3client = new S3Client([ 'region' => 'ap-northeast-1', 'version' => '2006-03-01', 'credentials' => $provider, ]); foreach (Upload::get_files() as $file) { // ③URLを決定 $filename = 'images/'.$file['saved_as']; // ④イメージファイルをバイナリモードで開く $image = fopen($file['saved_to'].$file['saved_as'], 'rb'); // ⑤イメージファイルのContentTypeを取得 $content_type = mime_content_type($file['saved_to'].$file['saved_as']); try{ // ⑥S3へアップロード

【AWS】Visual Studio CodeでSAMアプリケーション開発

イメージ
Visual Studio Code(以下vscode)でSAMアプリケーション開発をする手順をまとめます。 前提条件 AWS-CLIインストール済み SAM-CLIインストール済み 事前準備 vscodeにAWS Toolkitをセットアップ vscodeを立ち上げてサイドメニューのEXTENSIONSからAWS Toolkitを検索 AWS Toolkit for Visual Studio Codeをインストール サイドメニューにAWSボタンが出てくればOK アプリケーション開発 新規のSAMアプリケーションを作る サイドメニューのAWSをクリック 上段メニューから「Create new SAM Application」 Runtimeを選択(せっかくだからPython3.7を選択する) アプリケーションを配置する場所を選択 (→sam-test-2) アプリケーションの名前を入力 (→sam-test) SAMアプリケーションの作成が完了すると、template.yamlが開く デプロイ設定 template.yaml AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > sam-test Sample SAM Template for sam-test # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Resources: HelloWorldFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/mas

【AWS】SAM-CLIでサーバーレスアプリケーション② - Lambda関数のデプロイ -

SAMアプリケーションのデプロイは ビルド → テスト(省略可) → パッケージング → デプロイ の順に行います。 ビルド アプリケーションをビルドする sam build $ sam build Building resource 'HelloWorldFunction' Running NodejsNpmBuilder:NpmPack Running NodejsNpmBuilder:CopyNpmrc Running NodejsNpmBuilder:CopySource Running NodejsNpmBuilder:NpmInstall Running NodejsNpmBuilder:CleanUpNpmrc Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next ========================= [*] Invoke Function: sam local invoke [*] Package: sam package --s3-bucket [yourbucket] 成功すると .aws-sam/ にビルドされたモジュールが生成されます。 次に必要なコマンドを教えてくれる。(Commands you can use next) が、Invoke Functionはビルドしたアプリケーションをテスト実行してくださいと言っていますが、これに関してはすでに検証済み(と仮定して)なのでスキップします。 なので最後の行、sam packageでパッケージングを実行します。 パッケージング sam packageコマンドでパッケージングを実行します。 オプション options --template-file … template.yamlを指定 --s3-bucket … パッケージのアップロード先(※Lambda関数のデプロイではない) --output-template-file … デプロイ用のテンプレートファイル 実行 sam package $ sam pac

【AWS】SAM-CLIでサーバーレスアプリケーション① - プロジェクトの作成とローカルでテスト実行 -

AWSでサーバーレスアプリケーション(SAMアプリケーション)を開発する際の手順をまとめます。 はじめに サーバーレスアプリケーションとは バックグラウンドで処理をするアプリケーション(いわゆるLambda関数) SAM-CLIとは AWSの提供するクライアント用SAMコマンド(Serverless Application Model - Client) ローカルでサーバーレスアプリケーションの作成やAWSへのデプロイができる また、Dockerと組み合わせればローカルでのテスト実行が可能 公式の詳細は以下 https://aws.amazon.com/jp/serverless/sam/ この記事ではSAM-CLIを使ってLambda関数をローカルで実行する手順を紹介します。 実装 プロジェクト作成 sam init $ sam init 以下のような構成でファイルが作られる。 sam-app/ ├── README.MD ├── event.json ├── hello-world │ └── app.js │ └── package.json │ └── tests │ └── unit │ └── test-handler.js ├── template.yaml ※もちろんオプションによりプロジェクトの細かい設定が可能です。 ※デフォルトで言語はnode.jsが選択されます。(この記事でもnode.jsを使用) 言語の選択 --runtime --runtime [識別子] で言語を選択可能、以下の識別子が利用できます。 名前(言語) → 識別子 Node.js 10(Node.js) → nodejs10.x Node.js 8.10(Node.js) → nodejs8.10 Python 3.6(Python) → python3.6 Python 3.7(Python) → python3.7 Python 2.7(Python) → python2.7 Ruby 2.5(Ruby) → ruby2.5 Java 8(Java) → java8 Go 1.x(Go) → go1.x .NET Core 2.1(C#) → dotnetc