使用用户数据来自动化EC2实例的WordPress构建【仅用于验证】

请注意的要点我们没有考虑到使用WordPress进行实际运营。
我们预计用于验证并立即删除实例。

手动构建的过程

    1. 在亚马逊 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

请留意以下要点

    • ssm-userの作成は、Session Manager で接続をしない場合不要です

本来 ssm-user は Session Manager で接続する際に自動作成されますが、ユーザーデータ内で ssm-user の存在が前提のコマンドを実行するため、この時点で ssm-user を作成しています。

Session Managerで接続しない場合、 ssm-user は ec2-user に置き換えてください
DBでユーザーなどの作成をしていますが、好みでユーザー名、パスワード、DB名などを変更してください( WordPress インストール時にこれらの値を使用します。)
セキュリティは考慮していません

如果您还想注意到安全方面的问题,可以参考以下的用户数据。

使用用户数据进行构建试试看。

启动EC2
设置会被忽略。
用户数据执行完成可能需要几分钟,但只需要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_›_Setup_Configuration_File.png由于使用用户数据命令设置了数据库名称等信息,我们需要输入这些值。

WordPress_›_Setup_Configuration_File.png由于安装准备就绪,我们接下来开始进行。

WordPress_›_Setup_Configuration_File.png输入网站标题等信息,开始安装WordPress。

WordPress_›_Installation.png安装成功了。

WordPress_›_Installation.png我成功登录并确认了管理员界面。

Dashboard_‹_test_—_WordPress.png

用户数据执行日志日志可以在/var/log/cloud-init-output.log中确认。

bannerAds