使用用户数据来自动化EC2实例的WordPress构建【仅用于验证】
请注意的要点我们没有考虑到使用WordPress进行实际运营。
我们预计用于验证并立即删除实例。
手动构建的过程
-
在亚马逊 Linux 2 上启动实例
-
- 在亚马逊 Linux 2 上启动实例
在具有互联网网关的公共子网上启动,并启用公共IP
允许安全组的入站规则中的端口80
允许以自己的IP地址启用SSH连接的端口22,或者通过会话管理器连接时,将适当权限的IAM角色附加到实例配置文件
连接到实例并输入命令,安装 WordPress 所需的环境(数据库、Apache、PHP)
下载 WordPress 安装包
在浏览器中输入实例的公共IP地址,输入必要的信息,开始安装 WordPress。
以上内容基本上遵循以下教程的要点。
请参考教程。教程:在Amazon Linux2上安装LAMP Web服务器
教程:在Amazon Linux 2上托管WordPress博客
自动构建的内容使用用户数据自动化上述步骤2和3。
2 输入两个命令,安装WordPress所需的环境(数据库,Apache,PHP)
3 下载WordPress安装包
用户数据
#! /bin/bash
yum update -y
amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
yum install -y httpd mariadb-server
systemctl start httpd
systemctl enable httpd
systemctl start mariadb
systemctl enable mariadb
useradd -m -U ssm-user
usermod -a -G apache ssm-user
echo "ssm-user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/90-cloud-init-users
chown -R ssm-user:apache /var/www
chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
mysql -u root -e "CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'password'; CREATE DATABASE \`wordpress-db\`;GRANT ALL PRIVILEGES ON \`wordpress-db\`.* TO 'wordpress-user'@'localhost'; FLUSH PRIVILEGES;"
cp -r wordpress/* /var/www/html/
mkdir /var/www/html/blog
cp -r wordpress/* /var/www/html/blog/
cp /var/www/html/blog/wp-config-sample.php /var/www/html/blog/wp-config.php
2 输入两个命令,安装WordPress所需的环境(数据库,Apache,PHP)
3 下载WordPress安装包
#! /bin/bash
yum update -y
amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
yum install -y httpd mariadb-server
systemctl start httpd
systemctl enable httpd
systemctl start mariadb
systemctl enable mariadb
useradd -m -U ssm-user
usermod -a -G apache ssm-user
echo "ssm-user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/90-cloud-init-users
chown -R ssm-user:apache /var/www
chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
mysql -u root -e "CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'password'; CREATE DATABASE \`wordpress-db\`;GRANT ALL PRIVILEGES ON \`wordpress-db\`.* TO 'wordpress-user'@'localhost'; FLUSH PRIVILEGES;"
cp -r wordpress/* /var/www/html/
mkdir /var/www/html/blog
cp -r wordpress/* /var/www/html/blog/
cp /var/www/html/blog/wp-config-sample.php /var/www/html/blog/wp-config.php
请留意以下要点
-
- ssm-userの作成は、Session Manager で接続をしない場合不要です
本来 ssm-user は Session Manager で接続する際に自動作成されますが、ユーザーデータ内で ssm-user の存在が前提のコマンドを実行するため、この時点で ssm-user を作成しています。
Session Managerで接続しない場合、 ssm-user は ec2-user に置き換えてください
DBでユーザーなどの作成をしていますが、好みでユーザー名、パスワード、DB名などを変更してください( WordPress インストール時にこれらの値を使用します。)
セキュリティは考慮していません
如果您还想注意到安全方面的问题,可以参考以下的用户数据。
使用用户数据进行构建试试看。
启动EC2
设置会被忽略。
用户数据执行完成可能需要几分钟,但只需要5分钟就能完成。
设置会被忽略。
用户数据执行完成可能需要几分钟,但只需要5分钟就能完成。
请在使用时注意,这个我是在CDK中创建的,它会引用现有的资源。
import * as cdk from '@aws-cdk/core';
import * as ec2 from '@aws-cdk/aws-ec2'
import {readFileSync} from 'fs';
export class WordPressEc2Stack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const vpc = ec2.Vpc.fromLookup(this, 'vpc', {
vpcId: '既存のVPCIDを入力'
})
const sg = ec2.SecurityGroup.fromLookup(this, 'sg', '既存のセキュリティグループIDを入力')
// The code that defines your stack goes here
const instance = new ec2.Instance(this, 'wordpress', {
vpc: vpc,
vpcSubnets: { subnetType: ec2.SubnetType.PUBLIC },
instanceType: ec2.InstanceType.of(
ec2.InstanceClass.BURSTABLE2,
ec2.InstanceSize.MICRO
),
machineImage: ec2.MachineImage.fromSsmParameter('/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'),
instanceName: 'WordPress',
securityGroup: sg,
role: iam.Role.fromRoleArn(this, 'role', 'ロールのARNを入力')
});
const userDataScript = readFileSync('./lib/user-data.sh', 'utf8');
instance.addUserData(userDataScript);
}
}
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from '@aws-cdk/core';
import { WordPressEc2Stack } from '../lib/wordpress-ec2-stack';
const app = new cdk.App();
new WordPressEc2Stack(app, 'WordPressEc2Stack', {
/* If you don't specify 'env', this stack will be environment-agnostic.
* Account/Region-dependent features and context lookups will not work,
* but a single synthesized template can be deployed anywhere. */
/* Uncomment the next line to specialize this stack for the AWS Account
* and Region that are implied by the current CLI configuration. */
env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION },
/* Uncomment the next line if you know exactly what Account and Region you
* want to deploy the stack to. */
// env: { account: '123456789012', region: 'us-east-1' },
/* For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html */
});
安装WordPress
在输入实例的公共IP地址到浏览器中时,会显示要求输入WordPress数据库信息的界面。
由于使用用户数据命令设置了数据库名称等信息,我们需要输入这些值。
由于安装准备就绪,我们接下来开始进行。
输入网站标题等信息,开始安装WordPress。
安装成功了。
我成功登录并确认了管理员界面。
用户数据执行日志日志可以在/var/log/cloud-init-output.log中确认。





