Uly.me

cloud engineer

  • Home
  • About
  • Archives
Home/Archives for 2018

Archives for 2018

December 30, 2018

Terraform

Hashicorp has a product called Terraform, which is a provisioning tool for the cloud. It works with most major providers like AWS, GCP, Azure and many more. Unlike CloudFormation, Resource Manager and Deployment Manager, Terraform will work with not just its own, but with many cloud providers. Here’s an example of how to provision a single instance to AWS, and assign an elastic IP to it. The cloud resources in the example were redacted. Placeholder values were placed instead for security purposes.

provider "aws" {
	access_key = "xxxxxxxx"
	secret_key = "xxxxxxxxxxxxxxxxxxxxxxxxxx"
	region = "us-east-2"
}
 
resource "aws_instance" "server1" {
	ami = "ami-xxxxxxxxxxxxxx"
	key_name = "tfc-ohio"
	instance_type = "c5.2xlarge"
	subnet_id = "subnet-xxxxxxxx"
	security_groups	= ["sg-xxxxxxxxxxxxxxx"]
	private_ip = "10.0.4.100"
	tags {
		Name = "Server One"
	}
}
 
resource "aws_eip_association" "server1-eip" {
  instance_id = "${aws_instance.server1.id}"
  allocation_id = "eipalloc-xxxxxxxx"
}

provider "aws" { access_key = "xxxxxxxx" secret_key = "xxxxxxxxxxxxxxxxxxxxxxxxxx" region = "us-east-2" } resource "aws_instance" "server1" { ami = "ami-xxxxxxxxxxxxxx" key_name = "tfc-ohio" instance_type = "c5.2xlarge" subnet_id = "subnet-xxxxxxxx" security_groups = ["sg-xxxxxxxxxxxxxxx"] private_ip = "10.0.4.100" tags { Name = "Server One" } } resource "aws_eip_association" "server1-eip" { instance_id = "${aws_instance.server1.id}" allocation_id = "eipalloc-xxxxxxxx" }

To provision an instance, just run:

terraform apply

terraform apply

When you are done, just run:

terraform destroy

terraform destroy

Filed Under: Cloud Tagged With: aws, ec2, instance, provisioning, terraform

December 30, 2018

Create a Crontab via Script

How do you create a crontab entry via a Bash script? That’s a good question. Here is one solution:

(crontab -l 2>/dev/null; echo "* 11 * * * /path/to/job -with args") | crontab -

(crontab -l 2>/dev/null; echo "* 11 * * * /path/to/job -with args") | crontab -

If you want to run it as a specific user, use the following:

(crontab -l -u user 2>/dev/null; echo "* 11 * * * /path/to/job -with args") | crontab -

(crontab -l -u user 2>/dev/null; echo "* 11 * * * /path/to/job -with args") | crontab -

Filed Under: Linux Tagged With: bash, cron, user

December 28, 2018

WordPress on Kubernetes

Kubernetes has documentation on how to deploy WordPress on its platform. The setup is using Persistent Volumes for both WordPress and MySQL on MiniKube. Although the setup is not recommended for a production environment, it is a good start to get yourself familiar with Kubernetes. For production environments, they do recommend running WordPress on a Kubernetes cluster using the Helm package manager. Here’s the WordPress-MySQL deployment on MiniKube.

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

apiVersion: v1 kind: Service metadata: name: wordpress-mysql labels: app: wordpress spec: ports: - port: 3306 selector: app: wordpress tier: mysql clusterIP: None --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi --- apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: wordpress-mysql labels: app: wordpress spec: selector: matchLabels: app: wordpress tier: mysql strategy: type: Recreate template: metadata: labels: app: wordpress tier: mysql spec: containers: - image: mysql:5.6 name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim

Filed Under: Cloud, WP Tagged With: helm, kubernetes, minikube, wordpress

December 27, 2018

EC2 Delete Snapshots

Here’s the AWS CLI command for deleting a snapshot.

aws ec2 delete-snapshot \
--snapshot-id snap-xxxxxxxxxxxxxxx \
--profile default

aws ec2 delete-snapshot \ --snapshot-id snap-xxxxxxxxxxxxxxx \ --profile default

Filed Under: Cloud Tagged With: aws, cli, delete, snapshots

December 27, 2018

EC2 Describe Snapshots

If you have a ton of snapshots, they tend to be difficult to find within the AWS console. Although AWS has optimized the snapshot view, it’s still in beta. Filtering a volume id is still a problem. It might be faster just to use the AWS CLI to display snapshot information. Here’s an example of how to display snapshots given a certain volume id.

aws ec2 describe-snapshots \
--filters Name=volume-id,Values=vol-xxxxxxxxxxxxxx \
--query "Snapshots[*].{ID:SnapshotId,Time:StartTime,Progress:Progress}" \
--profile default

aws ec2 describe-snapshots \ --filters Name=volume-id,Values=vol-xxxxxxxxxxxxxx \ --query "Snapshots[*].{ID:SnapshotId,Time:StartTime,Progress:Progress}" \ --profile default

The result is something like this.

{
        "Progress": "99%",
        "ID": "snap-xxxxxxxxxxxxxxx",
        "Time": "2018-12-25T10:19:51.385Z"
    },
    {
        "Progress": "99%",
        "ID": "snap-xxxxxxxxxxxxxxx",
        "Time": "2018-12-24T09:35:09.357Z"
    }

{ "Progress": "99%", "ID": "snap-xxxxxxxxxxxxxxx", "Time": "2018-12-25T10:19:51.385Z" }, { "Progress": "99%", "ID": "snap-xxxxxxxxxxxxxxx", "Time": "2018-12-24T09:35:09.357Z" }

Filed Under: Cloud Tagged With: aws, cli, snapshots, volumes

  • 1
  • 2
  • 3
  • …
  • 14
  • Next Page »
  • Cloud
  • Linux
  • Git

Copyright © 2012–2021