Amazon Lightsail で LAMP ウェブアプリケーションをデプロイする
入門ガイド
モジュール 1: コンテナを準備する
このモジュールでは、AWS CLI を使用して LAMP スタックを設定します
はじめに
このモジュールでは、AWS CLI を使用して、LAMP コンポーネントが事前設定されているブループリントから Lightsail インスタンスを作成します。インスタンスの作成中に、GitHub リポジトリから PHP アプリケーションをインストールします。
学習内容
- AWS CLI を使用して Lightsail インスタンスを作成する方法
- インスタンスのユーザーデータを使用して PHP アプリケーションをデプロイする
所要時間
10 分
モジュールの前提条件
- 管理者レベルのアクセス権を持つ AWS アカウント**
- 推奨ブラウザ: Chrome または Firefox の最新バージョン
[**] 過去 24 時間以内に作成されたアカウントは、このチュートリアルに必要なサービスへのアクセス権限がまだ付与されていない可能性があります。
実装
Lightsail インスタンスの作成
Lightsail インスタンスを作成するとき、一般的な自動設定タスクを実行したり、インスタンスの起動後にスクリプトを実行したりするために使用できるユーザーデータをインスタンスに渡すオプションがあります。このガイドの後半で、AWS CLI を使用して Lightsail インスタンスを作成します。次のスクリプトをコピーしてコマンドの --user-data 部分に貼り付けます。
# remove default website
#-----------------------
cd /opt/bitnami/apache2/htdocs
rm -rf *
# clone github repo
#------------------
/opt/bitnami/git/bin/git clone -b loft https://github.com/aws-developer-center/todo-php .
# set write permissons on the settings file
#-----------------------------------
chown bitnami:daemon ./*
chmod 666 connectvalues.php
# inject database password into configuration file
#-------------------------------------------------
sed -i.bak "s/<password>/$(cat /home/bitnami/bitnami_application_password)/;" /opt/bitnami/apache2/htdocs/connectvalues.php
# create database
#----------------
cat /home/bitnami/htdocs/data/init.sql | /opt/bitnami/mariadb/bin/mysql -u root -p$(cat /home/bitnami/bitnami_application_password)
このスクリプトは、ブループリントのデフォルトのウェブサイトを削除し、サンプルアプリケーションのクローンを作成して置き換え、適切なファイル許可を設定し、サンプルアプリケーションの設定ファイルで自動生成されたデータベースパスワードを設定し、init.sql スクリプトを実行して初期値が入力されたデータベースを作成します。
実行開始後にインスタンスにアクセスするには、SSH キーが必要です。生成するには、次のコマンドを実行します。
aws lightsail create-key-pair \
--key-pair-name LightsailGuide > ssh_key_response.json
cat ssh_key_response.json | jq -r '.publicKeyBase64' > lightsailguide.pub
cat ssh_key_response.json | jq -r '.privateKeyBase64' > lightsailguide
chmod 400 lightsailguide.pub lightsailguide
これで、AWS CLI を使用してインスタンスを作成する準備が整いました。このガイドでは、アイルランド (eu-west-1) リージョンと、lamp_7 の blueprintId を持つ LAMP ブループリントを使用します。使用可能なブループリントの詳細なリストを表示する場合は、次のコマンドを実行できます。
aws lightsail get-blueprints
Lightsail インスタンスを作成するときは、インスタンスバンドルを指定する必要があります。このガイドでは、micro_2_0 バンドルを使用します。次のコマンドを実行して、使用可能なバンドルのリストを表示できます。
aws lightsail get-bundles
ユーザーデータスクリプトと作成した SSH キーを使用して Lightsail インスタンスを作成するには、次のコマンドを実行します。
# Create the Lightsail instance:
aws lightsail create-instances \
--instance-names "LightsailLampExample" \
--availability-zone eu-west-1a \
--blueprint-id lamp_7 \
--bundle-id micro_2_0 \
--key-pair-name LightsailGuide \
--user-data '# remove default website
#-----------------------
cd /opt/bitnami/apache2/htdocs
rm -rf *
# clone github repo
#------------------
/opt/bitnami/git/bin/git clone -b loft https://github.com/aws-developer-center/todo-php .
# set write permissons on the settings file
#-----------------------------------
chown bitnami:daemon ./*
chmod 666 connectvalues.php
# inject database password into configuration file
#-------------------------------------------------
sed -i.bak "s/<password>/$(cat /home/bitnami/bitnami_application_password)/;" /opt/bitnami/apache2/htdocs/connectvalues.php
# create database
#----------------
cat /home/bitnami/htdocs/data/init.sql | /opt/bitnami/mariadb/bin/mysql -u root -p$(cat /home/bitnami/bitnami_application_password)'
このコマンドは、作成したインスタンスの詳細を出力します。
{
"operations": [
{
"id": "a49e1398-fb81-455a-8a50-3159c9bd9966",
"resourceName": "LightsailLampExample",
"resourceType": "Instance",
"createdAt": "2021-09-21T16:38:40.566000+02:00",
"location": {
"availabilityZone": "eu-west-1a",
"regionName": "eu-west-1"
},
"isTerminal": false,
"operationType": "CreateInstance",
"status": "Started",
"statusChangedAt": "2021-09-21T16:38:40.566000+02:00"
}
]
}
インスタンスが使用可能になるまで数分かかります。次のコマンドを実行して進行状況を確認できます。
aws lightsail get-instance-state --instance-name LightsailLampExample
次の出力が表示された場合、インスタンスは実行されていますが、引き続きユーザーデータスクリプトを介して機能している可能性があります。
{
"state": {
"code": 16,
"name": "running"
}
}
アプリケーションをテストするには、インスタンスのパブリック IP アドレスが必要です。次のコマンドを実行して、インスタンスのパブリック IP アドレスを取得します。
aws lightsail get-instance --instance-name LightsailLampExample | jq -r .instance.publicIpAddress
IP アドレスをコピーしてブラウザに貼り付けると、アプリケーションが実行されていることがわかります。

まとめ
この最初のモジュールでは、AWS CLI を使用してインフラストラクチャを作成し、サンプルアプリケーションをデプロイする方法を学習しました。次のモジュールでは、このガイドで使用されたリソースをクリーンアップする方法を学習します。
次のステップ: リソースをクリーンアップする